ACKs duplicados podem ser gerados de várias maneiras, geralmente devido à perda de pacotes:
- Ao enviar um segmento, o remetente não recebe um ACK em um intervalo configurado (200ms é muito comum, mas geralmente é configurável), ele retransmite esse segmento, duplicando o ACK contido nesse segmento.
- Ao receber, um número de segmento inesperado é recebido; fazendo com que a parte receptora reconheça o número de sequência esperado. Isso notifica a parte de envio que provavelmente é necessário retransmitir. o que acontece a seguir depende de ACKs seletivos, o que está além do escopo desta resposta.
- Ao receber, obtenha um segmento que já foi reconhecido.
O primeiro e o terceiro marcador estão relacionados. Se a razão pela qual o remetente não obteve o seu ACK é porque o ACK foi comido pelos gremlins, a retransmissão baseada no temporizador será a reempacotamento de um segmento quando este é retransmitido. O receptor, tendo já ACKed que, irá Dup-ACK mais uma vez e aguardar o próximo segmento. Se os gremlins não comerem aquele Dup-ACK, o remetente continuará transmitindo.
No seu caso, os tempos dos pacotes sugerem que um dup-ACK baseado em temporizador não está em jogo aqui. O maior RTT é de 14 ms. Isso sugere uma retransmissão errônea por parte do remetente, acionando o Dup-ACK. Eu vi esse comportamento devido a drivers de rede com bugs e até mesmo firmware NIC no caso de mecanismos TCP-offload. Embora nem tudo isso recentemente.