O campo Sequence Number é um campo de 32 bits localizado no cabeçalho TCP. Ele é fundamental para o serviço de confiabilidade do protocolo, pois identifica a posição de cada byte de dados dentro do fluxo de comunicação.
Diferente de outros protocolos que numeram “pacotes” (como o Frame Relay ou X.25), o TCP numera bytes. Isso permite um controle granular e preciso sobre o fluxo de dados, possibilitando a detecção de perdas, a reordenação de pacotes que chegaram fora de ordem e a eliminação de duplicatas.
1. O Conceito de Fluxo de Bytes (Byte-Stream)
O TCP trata os dados não como blocos isolados, mas como um fluxo contínuo e infinito de bytes que flui do remetente para o receptor.
- Numeração Absoluta: O primeiro byte de dados enviado em uma conexão recebe um número de sequência inicial (ISN - Initial Sequence Number). Todos os bytes subsequentes são numerados sequencialmente em relação a esse início.
- Não é Número de Pacote: O
Sequence Numberno cabeçalho de um segmento não identifica “Este é o pacote número 10”. Ele identifica “O primeiro byte deste pacote é o byte número X do fluxo total”. - Exemplo Prático:
- Se o
Sequence Numberde um segmento é 1000 e o segmento carrega 100 bytes de dados: - Este segmento transporta os bytes de número 1000 a 1099.
- O próximo segmento enviado (imediatamente após, sem perdas) terá obrigatoriamente o
Sequence Number1100.
- Se o
2. Funções do Sequence Number
O número de sequência cumpre quatro papéis críticos na arquitetura TCP:
A. Identificação e Ordenação (Reordering)
Como a internet (IP) não garante a ordem de entrega, os pacotes podem chegar fora de ordem. O receptor usa o Sequence Number para saber onde encaixar os dados recebidos.
* Se o receptor tem os bytes até o 2000 e recebe um pacote começando no 3000, ele sabe que existe uma lacuna (bytes 2001-2999). Ele guarda o pacote do 3000 em um buffer e aguarda o pacote faltante chegar para remontar o fluxo na ordem correta.
B. Detecção de Perdas (Loss Detection)
O mecanismo de ACK Cumulativo depende do Sequence Number. O receptor envia de volta um ACK Number que indica o próximo byte que espera.
* Se o emissor enviou até o byte 5000, mas recebe um ACK dizendo “Esperando o byte 4001”, ele sabe imediatamente que tudo de 4001 a 5000 foi perdido ou está em trânsito. O número de sequência permite localizar exatamente onde o buraco está.
C. Eliminação de Duplicatas
Se a rede duplicar um pacote e o receptor receber o mesmo segmento duas vezes, ele usará o Sequence Number para verificar se já processou aqueles bytes. Se o número de sequência for menor ou igual ao último byte confirmado, o segmento é descartado como duplicata.
D. Controle de Fluxo
A janela deslizante (Sliding Window) opera em bytes. O receptor anuncia quantos bytes a mais de espaço ele tem no buffer. Isso é calculado baseado no Sequence Number do último byte recebido com sucesso.
3. O ISN (Initial Sequence Number) e a Segurança
Um detalhe técnico crucial é que o Sequence Number não começa em 0 quando uma conexão é estabelecida.
- Aleatoriedade (ISN): Durante o Three-Way Handshake (SYN, SYN-ACK, ACK), ambos os lados escolhem um Número de Sequência Inicial (ISN) aleatório. Este valor é gerado criptograficamente e é difícil de prever.
- Proteção contra Ataques: Se o ISN fosse sempre 0, um atacante poderia facilmente forjar pacotes TCP para injetar dados ou encerrar conexões (ataques de predição de sequência). Ao usar um ISN aleatório, torna-se computacionalmente inviável para um atacante adivinhar o número de sequência correto para uma conexão ativa.
- Sincronização: O ISN negociado no handshake é o ponto de partida. O primeiro byte de dados enviado após a conexão estabelecida terá o número
ISN + 1.
4. Wrap Around (Retorno ao Zero)
Como o campo tem 32 bits, ele pode contar até aproximadamente 4,29 bilhões ($2^{32}$). Em links de alta velocidade (ex: 10 Gbps), esse número pode ser esgotado em pouco tempo.
- Ciclo: Quando o contador atinge o limite máximo ($2^{32}-1$), ele “volta” para zero e começa a contar novamente (Wrap Around).
- Proteção (PAWS - Protect Against Wrapped Sequences): O TCP moderno utiliza um campo de opção chamado
Timestampspara diferenciar pacotes antigos (da volta anterior) de pacotes novos, evitando confusão quando o número de sequência reseta. O cabeçalho principal não mostra isso, mas é uma consideração vital para a implementação do protocolo em alta velocidade.
5. Relação com o Campo de Dados
O cabeçalho TCP não tem um campo explícito de “tamanho dos dados”. O receptor sabe onde os dados terminam calculando:
$$ \text{Fim dos Dados} = \text{Sequence Number} + \text{Tamanho do Payload} - 1 $$
Isso permite que o receptor saiba exatamente quais bytes aquele segmento específico contribui para o fluxo global. É essa precisão matemática que permite ao TCP oferecer um serviço de entrega “Byte perfeito”.