Eu pesquisei no código fonte. Se eu leio corretamente, o Linux segue o DEPUTADO do RFC 2581.
A parte relevante do código está contida na função __tcp_ack_snd_check () em tcp_input.c.
o kernel atual do Linux (por exemplo, 2.6.36) usa reconhecimentos atrasados (delack).
Em /include/net/tcp.h ele diz :
define TCP_DELACK_MIN ((unsigned)(HZ/25))
Assim, para um Kernel usando um valor HZ de 1000, um ACK deve ser atrasado em no mínimo 40 ms.
No entanto, a RFC 2581 diz que uma implementação TCP deve reconhecer cada segundo segmento de tamanho completo sem mais delongas.
Alguém sabe se o Kernel Linux segue aquele 'deve' ou se o valor TCP_DELACK_MIN significa que, mesmo depois que um segmento de tamanho completo foi recebido, o ACK continua atrasado até que 40 ms tenham passado?
Eu pesquisei no código fonte. Se eu leio corretamente, o Linux segue o DEPUTADO do RFC 2581.
A parte relevante do código está contida na função __tcp_ack_snd_check () em tcp_input.c.
Tags linux tcp linux-kernel