O protocolo TCP

O TCP (Transmission Control Protocol) é responsável pela divisão da mensagem em datagramas, pelo seu reagrupamento e retransmissão dos datagramas perdidos. O IP (Internet Protocol) é responsável pelo roteamento dos datagramas o que não é tarefa fácil na Internet, pois ligação pode requerer que o datagrama atravesse várias redes até chegar ao seu destino. A camada IP precisa de conhecer todas as rotas possiveis e lidar com possiveis incompatibilidades entre os diferentes meios de transporte. A interface entre TCP e IP é relativamente simples, a camada TCP entrega à camada IP um datagrama de cada vez, não havendo nenhuma relação entre o datagrama actual e os anteriores.

O TCP não tem só de fazer chegar os datagramas ao destino é preciso controlar a que ligação é que pertence cada datagrama. O cabeçalho é um conjunto bytes postos no inicio do datagrama por forma a permitir a sua gestão, é equivalente pôr uma carta dentro de um envelope, e de seguida escrever o endereço. A seguida é exemplificado o que acontece a um ficheiro que vai ser enviado pela rede:

 

1. Inicialmente temos um ficheiro que queremos enviar para outro computador, ele é composto por n conjuntos de octetos P1, P2, P3, ..., Pn.

 

Cada conjunto de octetos P será constituido da seguinte forma, onde O1, O2, ..., Oj são octetos,

Se tivermos um ficheiro com 15000 octetos e supondo que cada datagrama TCP pode levar 500 octetos de dados, então teriamos um ficheiro composto por 30 conjuntos de 500 octetos. Ou seja o valor para n seria de 30 (n/j=15000/500=30) e o j seria 500.

2. O que o TCP faz é dividir o ficheiro inicial em partes fáceis de gerir (TCP tem de determinar qual o tamanho máximo do datagrama que a rede suporta), a seguir o TCP parte o ficheiro em partes cujo tamanho é suportado pela ligação.

 

 

3. De seguida o TCP acrescenta um cabeçalho a cada um dos conjuntos obtidos no ponto anterior. O cabeçalho TCP é aqui designado por CT .

 

 

O cabeçalho TCP contém cerca de 20 octetos, dos quais se destacam o porto de origem e destino do datagrama, e o número de ordem. Os portos são utilizados para gerir as ligações, por exemplo se tivermos 3 utilizadores a transferir ficheiros de um computador central para 3 computadores dispersos pela rede, a aplicação de TCP alocava por exemplo os portos 999, 1000, 1001 como os portos de origem do datagrama. O TCP terá de saber o porto de destino do lado dos utilizadores e coloca-o no cabeçalho.

Todos os datagramas têm um numero de sequência para garantir a sua correcta ordenação no destino, permitindo assim descobrir se há algum datagrama em falta. O TCP numera os octetos e não os datagramas, assim se existirem 500 octetos de dados em cada datagrama ao primeiro datagrama é posto o numero 0 no respectivo campo, enquanto ao segundo é atribuido o numero 500, terceiro 1000, etc.

Existe um outro campo no cabeçalho que é o checksum, e é calculado adicionando todos os octetos do datagrama. No destino o TCP calcula de novo o checksum, se o valor calculado diferir do valor enviado no cabeçalho então algo de errado aconteceu na transmissão e o datagrama é deitado fora. De seguida está uma representação de como um datagrama está estruturado:

 

 

 

É de referir que certos campos do cabeçalho não são descritos pois referem-se à gestão da ligação. O destinatário deve enviar uma confirmação para assegurar que um datagrama chegou correctamente ao seu destino, este será um datagrama onde o campo "Acknowledgement Number" do cabeçalho estará preenchido. Um valor de 1500 neste campo significaria que o extremo da ligação recebeu os dados até ao octeto 1500. Caso o remetente não receba a confirmação da recepção da mensagem dentro de um tempo razoável então voltará a enviar os dados.

O campo window é usado para controlar a quantidade de dados que pode ser transmitida nesse determinado momento. Não é práctico esperar pela confirmação da recepção do datagrama antes de enviar o próximo, o que abrandaria muito o ritmo de transmissão. Por outro lado não se pode enviar constantemente datagramas, uma vez que o computador de destino pode não ser capaz de processar os dados a essa velocidade. Cada extremo indica a quantidade de dados que está preparado para absorver pondo o numero de octetos no campo window. Quando o computador recebe os dados a quantidade de espaço indicada no campo window decresce, até que atinge 0 e o remetente pára. Enquanto o destinatário recebe dados, o tamanho do campo window aumenta, indicando que está pronto para receber mais dados. Muitas vezes o mesmo datagrama pode ser usado para indicar a recepção de um conjunto de dados assim como para permitir a transmissão de dados adicionais.

O campo Urgent permite a um extremo dizer ao outro para saltar o processamento para um octeto particular, o que pode ser útil quando se quer lidar com acontecimentos assincronos como por exemplo quando se insere um caracter de controlo ou um comando qualquer que interrompa a saída.

 

<<< tema anterior                       próximo tema >>>