TCP/IP: qual a importância dos números de sequência?
Tal como o modelo de referência OSI, a arquitetura protocolar TCP/IP é também representada por camadas (só que são menos). Hoje vamos falar na importância dos números de sequência. Saibam o que são e como funcionam.
No mundo das comunicações há muitos processos que não são tão populares como os protocolos em si. Sabia, por exemplo, que no estabelecimento de uma ligação entre emissor e recetor existe um “pré-acordo” denominado de Three Way Handshake (SYN, SYN-ACK, ACK)? Conhece bem os campos do cabeçalho TCP/IP (imagem seguinte)?
Números de sequência (sequence numbers) no protocolo TCP/IP
Os números de sequência usados pelo protocolo TCP (Transmission Control Protocol) são um valor fundamental para o controlo do fluxo e para garantir a confiabilidade das transmissões de dados. O protocolo TCP utiliza esse número para garantir que os segmentos de dados enviados por uma aplicação cheguem todos ao destino, mesmo que sejam transmitidos em partes.
Com o número de sequência:
- Se o destino detetar que faltam segmentos, solicita-os aos emissor, que os envia com base no número de sequência;
- Se os dados forem recebidos em duplicado, é possível detetar usado o número de sequência;
- Os números de sequência permitem ordenar/reordenar os segmentos no destino
Como funciona o número de sequência no TCP
#1 - Estabelecimento da ligação (Three-way Handshake):
No estabelecimento de ligação entre emissor e recetor existe um “pré-acordo” denominado de Three Way Handshake (SYN, SYN-ACK, ACK). Durante esse processo, o cliente e o servidor trocam números de sequência iniciais (ISN - Initial Sequence Number) para sincronizar a comunicação.
- O processo é o seguinte:
- SYN: O cliente envia um pacote com a flag SYN (synchronize) ativada e um número de sequência inicial (ISN).
- Por exemplo: Cliente envia um pacote SYN com ISN 1000
- SYN-ACK: O servidor responde com um SYN-ACK, que contém o ISN do servidor e confirma que recebeu o ISN do cliente.
- Servidor responde com um SYN-ACK, com ISN 2000 e um ACK para o número 1001 (confirmando o ISN do cliente).
- ACK: O cliente confirma que recebeu o ISN do servidor enviando um ACK.
- Cliente envia um ACK a confirmar o ISN do servidor (2001).
- SYN: O cliente envia um pacote com a flag SYN (synchronize) ativada e um número de sequência inicial (ISN).
#2 - Transferência de dados
O número de sequência indica a posição do primeiro byte do segmento de dados que será transmitido. Cada byte de dados que vai ser transmitido possui um número de sequência.
Conforme os dados são enviados para o destinatário, o número de sequência é incrementado tendo como base a quantidade de dados (em bytes) que foram transmitidos. Por exemplo, se o número de sequência inicial é 1000 e se forem enviados 500 bytes, o próximo número de sequência será 1500.
#3 - Confirmação dos dados (Acknowledgment):
- Tal como referido, o recetor confirma todos os segmentos, respondendo com um número de ACK (Acknowledgment Number), que indica o próximo número de sequência esperado, ou seja, confirma que recebeu todos os bytes até ao recebido.
O número de sequência no TCP é fundamental para a comunicação confiável, ordenada e eficiente entre dispositivos na rede.