Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - ACK Number

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Campo ACK Number (Acknowledgment Number) do Cabeçalho TCP

1. Definição e Localização

O campo ACK Number (Acknowledgment Number) é um campo de 32 bits localizado no cabeçalho TCP, especificamente nos bytes 9 a 12 (após o campo Sequence Number). Ele funciona como o mecanismo de feedback do receptor para o remetente, informando quais dados foram recebidos com sucesso.

Juntamente com o Sequence Number, o ACK Number forma o coração do sistema de confiabilidade do TCP. Enquanto o Sequence Number diz "de onde vêm estes dados", o ACK Number diz "estou pronto para o que vem depois". Essa troca constante permite que o TCP saiba o que foi entregue e o que precisa ser reenviado.

Características Formais

  • Tamanho: 32 bits (4 bytes)
  • Posição no cabeçalho: Bytes 9-12 (offset 8-11)
  • Endianness: Big-endian (network byte order)
  • Faixa: 0 a 4.294.967.295 (232 - 1)
  • RFC de referência: RFC 793 (1981)

2. O Conceito de Confirmação Cumulativa

A característica mais importante do ACK Number é que ele é cumulativo. Ele não confirma apenas o último segmento recebido, mas sim todos os bytes anteriores a ele.

Semântica

O valor ACK N significa: "Recebi com sucesso e processei todos os bytes até o número N-1. Agora estou aguardando o byte N."

Eficiência

Isso permite que um único ACK confirme o recebimento de múltiplos segmentos de uma só vez. Se o remetente enviou 4 segmentos cobrindo os bytes 1000 a 1999, e todos chegaram, o receptor pode enviar um único ACK 2000. Isso confirma que tudo (1000 a 1999) chegou bem.

Contraste com ACK Seletivo (SACK)

O TCP padrão usa ACK cumulativo. Embora existam opções para "ACK Seletivo" (SACK - Selective Acknowledgment, RFC 2018) que informam lacunas específicas, o campo ACK Number principal sempre aponta para o próximo byte esperado na sequência contínua.

Modo Vantagem Desvantagem
Cumulativo (padrão) Simples, um número basta Ineficiente em perdas múltiplas
Seletivo (SACK) Detalha gaps exatos Exige opção extra no cabeçalho

3. Como Funciona na Prática

O ACK Number é sempre relativo ao fluxo de bytes enviado pelo outro lado.

No Receptor

  1. O receptor recebe o byte 1500.
  2. Ele verifica se 1500 é o próximo byte esperado (ou seja, se ele já recebeu tudo até 1499).
  3. Se sim, ele envia um segmento de retorno com ACK Number = 1501 (próximo byte esperado).

No Emissor

  1. O emissor recebe o segmento com ACK 1501.
  2. Ele olha para seu buffer de envio.
  3. Ele sabe que todos os bytes menores que 1501 estão seguros e podem ser descartados do buffer de retransmissão.
  4. Ele sabe que precisa se preocupar apenas com os bytes a partir de 1501.

Exemplo Numérico Detalhado

Tempo  Emissor                Receptor     ACK enviado
T1     envia seq=1000, len=500              --
T2     --                     recebe 1000   ACK 1500
T3     recebe ACK 1500        --           --
T4     envia seq=1500, len=500              --
T5     --                     recebe 1500   ACK 2000
T6     recebe ACK 2000        --           --

4. Detecção de Perdas (Gaps)

O poder do ACK Number reside em sua capacidade de revelar "buracos" no fluxo de dados sem que o receptor precise explicitamente gritar "perdi o pacote X".

Cenário de Perda

  • Emissor envia byte 1000.
  • Emissor envia byte 1100.
  • O byte 1100 chega, mas o byte 1000 se perde.

Reação do Receptor

  • O receptor recebe o 1100, mas não pode entregá-lo à aplicação porque falta o 1000. Ele guarda o 1100 no buffer fora de ordem.
  • Ele envia de volta um ACK Number = 1000. (Dizendo: "Ainda estou esperando o 1000, não avance").

Reação do Emissor

  • O emissor vê o ACK 1000 repetido (ACK Duplicado).
  • Como ele já havia enviado dados além do 1000, ele deduz: "Enviei até o 1100, mas o receptor ainda está pedindo o 1000. O 1000 deve estar perdido."
  • Isso dispara a Retransmissão Rápida (Fast Retransmit) quando 3 ACKs duplicados são recebidos.

5. ACKs Duplicados e Fast Retransmit

Conceito Significado
ACK normal ACK com número maior que o anterior
ACK duplicado Mesmo ACK Number do segmento anterior
3 ACKs duplicados Trigger para Fast Retransmit

Quando 3 ACKs duplicados são recebidos, o TCP não espera o timer de retransmissão (RTO) expirar — ele retransmite imediatamente, reduzindo significativamente a latência percebida em perdas isoladas.

6. O Bit de Flag ACK

No cabeçalho TCP, existe uma flag dedicada chamada ACK no campo de Flags (offset 4, byte 14). Esta flag deve estar setada (ligada) com valor 1 para que o campo ACK Number seja válido.

Durante o Handshake

No estabelecimento da conexão, as mensagens iniciais (SYN e SYN-ACK) usam a flag ACK para reconhecer o recebimento do SYN do outro lado. Nesse momento, o ACK Number confirma o número de sequência inicial (ISN) + 1.

Cliente -> SYN, Seq=1000                   (SYN flag)
Servidor -> SYN+ACK, Seq=3000, ACK=1001    (ACK flag ligada)
Cliente -> ACK, Seq=1001, ACK=3001         (ACK flag ligada)

Durante a Transferência de Dados

Em quase todos os segmentos após a conexão estabelecida, a flag ACK está ligada. O TCP raramente envia dados sem confirmar o recebimento de dados anteriores (piggybacking).

7. Relação com a Janela Deslizante

O ACK Number trabalha em conjunto com o campo Window Size para controlar o fluxo.

  • O ACK Number diz ao emissor: "Você pode descartar tudo antes desse número, é meu."
  • O Window Size diz: "Você pode enviar mais X bytes além desse número."

Juntos, eles definem a janela de envio atual:

Janela de Envio = [ACK Number, ACK Number + Window Size]

Diagrama de Janela

Bytes enviados e confirmados  |  Bytes enviados, não confirmados  |  Bytes que pode enviar  |  Não pode enviar
[0 .. ACK-1]                  |  [ACK .. ACK+window-1]           |  próximos               |  ...

8. Cálculo do Próximo ACK

A regra geral é:

ACK Number = Maior byte recebido em sequência + 1

Ou equivalentemente:

ACK Number = Seq Number do último segmento recebido em ordem + Length do payload

Casos Especiais

Situação Comportamento
Segmento recebido em ordem ACK avança
Segmento fora de ordem ACK repete (duplicado)
Segmento com payload vazio ACK = Seq + 1 (consome SYN/FIN)
Flags SYN ou FIN Consomem 1 número de sequência cada

9. Wrapping do ACK Number

Como o campo tem 32 bits, ele "wraps" (volta a zero) após 4.294.967.295 bytes (≈ 4 GB). Em links de alta velocidade (10 Gbps), isso ocorre em segundos. Para evitar ambiguidade, o TCP usa timestamps (opção RFC 1323) para distinguir números antigos de novos após o wrap.

10. Detecção de Problemas

Delayed ACK

Para reduzir tráfego, o TCP não envia ACK imediato para cada segmento. Ele "atrasa" o ACK por até 200ms, na esperança de ter dados para enviar de volta (piggybacking). Se nada for enviado nesse intervalo, um ACK standalone é enviado.

Problemas com ACKs Falsos

Atacantes podem forjar ACKs para confundir o emissor. Para evitar isso:

  • Authentication: TCP-AO (RFC 5925) adiciona autenticação.
  • State tracking: Roteadores stateful descartam ACKs para conexões inexistentes.
  • Sequence validation: Receptor só aceita ACKs dentro da janela válida.

11. Resumo Técnico

Atributo Valor
Tamanho do campo 32 bits
Posição Bytes 9-12 do cabeçalho TCP
Semântica Próximo byte esperado
Tipo de ACK Cumulativo (padrão)
Variação SACK (RFC 2018)
Flag associada ACK bit
Endianness Big-endian

12. Conclusão

O ACK Number é o sinal de "vida" da conexão do ponto de vista do emissor. Sem ele, o remetente estaria voando às cegas, sem saber se seus dados estão sendo úteis ou se estão se perdendo no vácuo da rede. Ao confirmar cumulativamente o recebimento até um certo ponto, o ACK Number permite que o TCP descarte com segurança o que já foi entregue e foque seus esforços de retransmissão apenas no que ainda está faltando. Para engenheiros de rede e desenvolvedores de protocolos, entender o comportamento do ACK Number é essencial para diagnosticar problemas de throughput, retransmissões e otimizar parâmetros comoDelayed ACK, SACK e Window Scaling.