Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Paradigma Cliente-Servidor
Existem diversas maneiras de efetuar a comunicao entre processos finais, mas o mais
amplamento utilizado o paradigma cliente-servidor. Um processo que em um host local,
denominado cliente, precisa dos servios de outro processo localizado em um host remoto,
denominado servidor.
Ambos processos (cliente e servidor) possuem o mesmo nome. Por exemplo, para obter o
dia e a hora de uma mquina remota necessitamos de um cliente, denominado Daytime, rodando no
host local e um processo servidor, Daytime tambm, rodando no host remoto.
Para a comunicao devemos definir:
Host local
Processo local
Host remoto
Processo remoto
Mecanismo de endereamento
Sempre que dados devem fluir entre dois destinos dentre muitos possveis, necessrio um
mecanismo de endereamento. Na camada de enlace, os endereos de hardware (MAC address) so
responsveis por identificar um n em uma rede local. Na camada de rede, os nmeros IP
identificam unicamente um determinado host na rede de alcance global. Em cada caso, um endereo
de origem e um de destino esto especificados.
Na camada de transporte o mesmo se faz valer. So utilizados dois endereos, um de
origem e outro de destino. Estes endereos recebem o nome de portas nesta camada. Na Internet,
os endereos de portas so nmeros inteiros de 16 bits (0 at 65535, 64K).
No host que roda o processo cliente, os nmeros das portas so designados (em geral) de
maneira aleatria ou pelo menos no determinada. Pode-se dizer que esses nmeros de portas so
temporrios (ou efmeros), pois so atribudos apenas enquanto o processo cliente est
comunicando com o servidor.
No host que roda o servidor, as portas so estticas (ou permanentes). Se as portas fossem
escolhidas ao acaso (ou de maneira no previamente conhecida), o processo cliente no saberia para
qual porta direcionar suas requisies. Ele teria ento que procurar previamente a qual porta se
dirigir.
Existem algumas excees a essas regras. Existem processos clientes que utilizam sempre
a mesma porta (o SMTP originalmente) e processos servidores que no tm portas pr-determinadas
(o RCP ainda assim; ele possui um servidor RPC que funciona como um catlogo das portas
utlizadas pelos demais processos RPC (servidor de arquivos por exemplo)).
O IANA (Internet Assigned Number Authority, www.iana.org) detm a autoridade sobre
os nmeros de portas. Para tal dividiu os nmeros em trs faixas:
Portas bem conhecidas (well known). Portas com nemros entre 0 e 1023 so
atribuidas e controladas pela IANA. So portas pblicas e bem conhecidas, ex.: telnet, ftp,
http.
Portas registradas. So portas com nmeros entre 1024 e 49.151 e no so
atribudas pela IANA, apenas controladas por ela, para evitar duplicao. Apenas empresas
podem requerer um registro.
Portas dinmicas. So as portas de 49.152 at 65.535. No so registradas nem
controladas. Qualquer processo pode utilizar estas portas.
A lista completa dos nmeros atribudos e controlados pelo IANA pode ser verificado em:
http://www.iana.org/assignments/port-numbers
importante notar que apenas um processo pode utilizar uma porta especfica em um dado
momento.
Desafio: Quais protocolos utilizam o UDP e quais suas respectivas portas (existe pelo menos um
protocolo de aplicao que fundamental para o correto funcionamento da WEB)?
Nmero de portas
Como o UDP, o TCP usa nmero de portas como mecanismo de endereamento na camada
de transporte. Algumas portas mais conhecidas so:
Bytes e Segmentos
Embora o esquema de bufferizao controle a disparidade de velocidade entre os processos
transmissor e receptor, precisamos de uma etapa a mais antes da transmisso de dados. A camada
IP, enquanto provedora de servios para o TCP, precisa enviar pacotes de dados e no uma cadeia
de bytes. Na camada de transporte, o TCP agrupa uma certa quantidade de bytes juntos para formar
um pacote denominado segmento. O TCP anexa um cabealho a cada segmento (com o propsito
de controle) e entrega o segmento camada IP para transmisso. Os segmentos so encapsulados
em um datagrama IP e em seguida transmitidos. Toda essa operao transparente ao processo que
estiver rodando no receptor. Observe que os segmentos no tm necessariamente o mesmo
tamanho.
Servio Full-Duplex
O TCP oferece servios de entrega em modo full-duplex, onde dados podem fluir nas duas
direes ao mesmo tempo. O protocolo TCP rodando em cada uma das pontas agrega um buffer de
transmisso e outro de recepo capazes de transmitir segmentos em ambas direes.
Servio Confivel
O TCP um protocolo de transporte confivel. Ele utiliza um mecanismo de confirmao
(ACK) para verificar a integridade dos dados.
Numerao de Bytes
Nmero de Bytes
O protocolo TCP numera todos os bytes de dados que so transmitidos em uma conexo. A
numerao independente em cada direo. O TCP numera os bytes quando recebe os dados de um
processo e os armazena no buffer de transmisso. A numerao no comea necessariamente em
zero. O valor inicial por um gerador de nmeros aleatrios entre 0 e 232 1. Por exemplo, se o
nmero aleatrio escolhido for 1057 e a quantidade total de bytes 6000, os bytes so numerados
de 1057 at 7056.
Nmero de Seqncia
Aps os bytes terem sido numerados, o TCP atribui um nmero de seqncia para cada
segmento transmitido. O nmero de seqncia do segmento idntico ao nmero do primeiro byte
transportado por este segmento.
Exemplo 1
Imagine uma conexo TCP transferindo 6000 bytes. O primeiro byte recebe a numerao
10010. Quais so os nmeros de seqncia para cada segmento se os dados so transmitidos em 5
segmentos, os quatro primeiros transportando 1000 bytes cada e o ltimo 2000 bytes?
Soluo
A seguir vemos os nmeros de seqncia para cada segmento:
Segmento 1: nmero de seqncia 10010 (faixa 10010 a 11009)
Segmento 2: nmero de seqncia 11010 (faixa 11010 a 12009)
Segmento 3: nmero de seqncia 12010 (faixa 12010 a 13009)
Segmento 4: nmero de seqncia 13010 (faixa 13010 a 14009)
Segmento 5: nmero de seqncia 14010 (faixa 14010 a 16009)
Nmero de Confirmao
Como discutimos antes, a comunicao TCP full-duplex. Quando uma conexo
estabelecida, ambas partes podem enviar e receber dados ao mesmo tempo. Cada uma das partes
numera os bytes com um nmero inicial recebido do gerador de nmeros aleatrios e, por isso,
geralmente estes nmeros so diferentes. O nmero de seqncia em cada direo identifica o
nmero do primeiro byte transportado pelo segmento.
Cada parte usa tambm um nmero de confirmao para assegurar ao transmissor que os
bytes foram recebidos. Entretanto o nmero ACK define o nmero do prximo byte que o protocolo
TCP receptor espera receber. Alm disso, o nmero ACK cumulativo, isto , o receptor toma o
nmero do ltimo byte recebido, salva, incrementa-o de uma unidade e o utiliza como nmero de
confirmao.
Segmento TCP
Conexo
Relgios do TCP
O TCP utiliza quatro relgios para suavizar sua operao:
Relgio de Retransmisso
O TCP utiliza o relgio de retransmisso para controlar o tempo de retransmisso dos
segmentos perdidos ou corrompidos, esperando o tempo de confirmao de um segmento. Quando
o TCP transmite um segmento, ele configura um relgio de retransmisso para esse segmento em
particular. Podem ocorrer duas situaes:
1. Se um ACK recebido para um segmento particular antes do relgio expirar, o relgio
desarmado.
2. Se ocorrer um time-out antes do ACK ser recebido, o segmento retransmitido e o relgio
resetado.
A maneira mais comum configurar o tempo do time-out como duas vezes o RTT (Roud-
Trip Time), o tempo entre o envio do segmento anterior e o recebimento do seu ACK. Se um ACK
no recebido, o tempo decrementado pela metade sempre que o relgio precisa ser rearmado.
Relgio de Persistncia
Para lidar com a informao do tamanho de janela mvel igual a zero, o TCP precisa de
outro relgio. Suponha que um TCP receptor informe o tamanho de janela zero. O TCP transmissor
no pode transmitir at que uma confirmao anunciando uma janela de tamanho maior do que zero
seja informada. Caso essa confirmao seja perdida, ambos processos ficam parados, um
aguardando pelo outro.
Para evitar isso, utilizado o relgio de persistncia. Quando o TCP transmissor recebe um
ACK de tamanho de janela zero, ele dispara um relgio. Quando esse relgio expira, o transmissor
envia um segmento especial, contendo apenas um nico byte, que no contabilizado nas contagem
do TCP, apenas para alertar o receptor de que seu ACK pode ter sido perdido. Neste caso o receptor
envia uma nova confirmao.
Se uma resposta no recebida, o valor do relgio duplicado e disparado novamente. O
processo se repete at o relgio atingir valores da ordem de 60 segundos, quando ento estabiliza
neste valor.
Relgio Keep-Alive
Algumas implementaes utilizam este relgio para evitar conexes ociosas entre dois
protocolos TCP. Caso um cliente envie uma certa quantidade de dados ao um servidor, e por algum
motivo a aplicao tenha travado. O TCP no encerra a conexo sem a requisio explicita da
aplicao. Neste caso a conexo continua aberta.
Este relgio funciona assim: O relgio resetado toda vez que o servidor escuta algum
dado do cliente. O valor do time-out tipicamente de 2 horas. Um segmento de sondagem
enviado pelo servidor caso ele no escute o cliente aps 2 horas. As sondagens so espaadas de 75
segundos. Aps 10 sondagens sem nenhuma resposta, o servidor considera o cliente inativo e
encerra a conexo.
Relgio de Espera
O relgio de espera utilizado para a finalizao de conexes. Quando o TCP fecha uma
conexo, ele no considera a conexo fechada efetivamente. A conexo mantida no limbo por um
perodo de espera. Isso possibilita que os segmentos FIN duplicados, se existirem, cheguem ao
destino para serem descartados. O valor para este relgio tipicamente o mesmo que o relgio de
retransmisso.
Exerccios:
1. Considere uma conexo TCP entre o host A e o host B. Suponha que os segmentos TCP que
trafegam do host A para o host B tenham um nmero de porta de origem X e o nmero da
porta de destino Y. Quais so os nmeros de porta origem e porta de destino para os
segmentos que trafegam de B para A?
2. Por que um desenvolvedor de uma aplicao poderia escolher rodar um aplicao sobre
UDP em vez de TCP?
3. possvel que uma aplicao desfrute de transferncia confivel de dados mesmo quando
roda sobre UDP? Se sim, como isto possvel?
4. Verdadeiro ou Falso
a. O host A est enviando ao host B um arquivo muito grande por uma conexo TCP.
Suponha que o host B no tenha dados para enviar para o host A. O host B no enviar
reconhecimentos para A pois os reconhecimentos no podem "pegar carona" com os dados.
b. O tamanho da janela de recebimento nunca muda enquanto dura uma conexo.
c. Imagine que o host A est enviando ao host B uma arquivo muito grande via TCP. Se o
nmero de seqncia para um segmento desta conexo for M, ento o nmero de seqncia
para o segmento seguinte ser necessariamente M+1.
d. O cabealho do TCP tem um campo para o tamanho da "Janela de Recebimento".
e. Imagine que o host A envie ao host B, por uma conexo TCP, um segmento com o
nmero de seqncia 38 e 4 bytes de dados. Neste mesmo segmento, o nmero de
reconhecimento ser 42.
5. Suponha que um host A envie dois segmentos TCP, um atrs do outro, ao host B. O
primeiro segmento tem nmero de seqncia 90 e o segundo nmero de seqncia 110.
a. Quantos bytes tem o primeiro segmento?
b. Suponha que o primeiro segmento seja perdido, mas o segundo chegue a B. No
reconhecimento que B envia para A, qual ser o nmero?
6. O cliente A inicia uma sesso Telnet com o servidor S. Quase ao mesmo tempo, o cliente B
tambm inicia uma sesso Telnet com o mesmo servidor S. Fornea possveis nmeros de
porta de origem e de destino para:
a. Os segmentos enviados de A para S.
b. Os segmentos enviados de B para S.
c. Os segmentos enviados de S para A.
d. Os segmentos enviados de S para B.
e. Se A e B so hosts diferentes, possvel que o nmero de porta de origem nos segmentos
de A para S sem os mesmos que de B para S?
f. E se A e B forem o mesmo host?