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 Nsignifica: “Recebi com sucesso e processei todos os bytes até o númeroN-1. Agora estou aguardando o byteN.” - 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 Numberprincipal 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:
- O receptor recebe o byte
1500. - Ele verifica se
1500é o próximo byte esperado (ou seja, se ele já recebeu tudo até1499). - Se sim, ele envia um segmento de retorno com
ACK Number = 1501(próximo byte esperado).
- O receptor recebe o byte
- No Emissor:
- O emissor recebe o segmento com
ACK 1501. - Ele olha para seu buffer de envio.
- Ele sabe que todos os bytes menores que 1501 estão seguros e podem ser descartados do buffer de retransmissão.
- Ele sabe que precisa se preocupar apenas com os bytes a partir de 1501.
- O emissor recebe o segmento com
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 1000repetido (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).
- O emissor vê o
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 Numberconfirma 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 Numberdiz ao emissor: “Você pode descartar tudo antes desse número, é meu.” - O
Window Sizediz: “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.