O campo ACK Number (Acknowledgment Number) é um campo de 32 bits localizado no cabeçalho TCP. 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.

1. 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: O TCP padrão usa ACK cumulativo. Embora existam opções para “ACK Seletivo” (SACK - Selective Acknowledgment) que informam lacunas específicas, o campo ACK Number principal sempre aponta para o próximo byte esperado na sequência contínua.

2. 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.

3. 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.
    • 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).

4. O Bit de Flag ACK

No cabeçalho TCP, existe uma flag dedicada chamada ACK no campo de Flags (offset 4). 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.
  • 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).

5. 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:
$$ \text{Janela de Envio} = [\text{ACK Number}, \text{ACK Number} + \text{Window Size}] $$

6. Resumo

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.