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 Number no 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 Number de 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 Number 1100.

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 Timestamps para 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”.