Tendo como referência o modelo OSI, os protocolos TCP (Transmission Control Protocol) e UDP (User Datagram Protocol) pertencem à camada 4 (camada de transporte). Hoje explicamos os números de sequência e confirmação usados pelo TCP.
O protocolo de comunicação de transporte TCP é o mais usado nas comunicações porque fornece garantia na entrega de todos os pacotes entre um PC emissor e um PC recetor. Além disso, todos os segmentos enviados pelo emissor são confirmados pelo recetor.
Para começar, no estabelecimento de uma ligação entre emissor e recetor, no TCP existe um “pré-acordo” denominado de Three Way Handshake (SYN, SYN-ACK, ACK). Depois do pré-acordo, inicia-se a transferência de dados e é aqui que entram os números de sequência e confirmação.
Números de Sequência (Sequence Numbers) vs Números de Confirmação (Acknowledgment Numbers)
Os números de sequência (SEQ) permitem identificar a posição do primeiro byte de dados no segmento TCP enviado. Existe um número de sequência inicial que é definido no processo de Three Way Handshake. Esse número é totalmente aleatório. À medida que os dados são transmitidos, o número de sequência é incrementado pelo número de bytes enviados. Tal permite que o recetor reordene os segmentos, caso cheguem fora de ordem.
Os números de confirmação (ACK) permitem informar o emissor que os dados até ao byte identificado pelo número de confirmação foram recebidos com sucesso. Este campo é também importante para fazer o controlo de fluxo.
Vamos a um exemplo…
Tendo como base este exemplo, o cliente envia o primeiro segmento com seq=1 e o comprimento do segmento é de 669 bytes. O servidor responde com um ack=670 que informa ao emissor que o próximo segmento esperado terá um número de sequência 670.
O próximo segmento que o cliente envia tem seq=670 e o len agora é de 1460 bytes. Por sua vez, o servidor responde com ack=2130 (670 + 1460). Este ciclo continua até o final da sessão TCP.