текущее ядро Linux (например, 2.6.36) использует отложенные подтверждения (delack).
В /include/net/tcp.h он говорит:
определить TCP_DELACK_MIN ((без знака) (HZ / 25))
Таким образом, для ядра, использующего значение HZ, равное 1000, ACK должен быть задержан минимум на 40 мс.
Однако в RFC 2581 говорится, что реализация TCP должна подтверждать каждый второй полноразмерный сегмент без дальнейшей задержки.
Кто-нибудь знает, следует ли ядру Linux этому «следует» или значение TCP_DELACK_MIN означает, что даже после получения полноразмерного сегмента ACK продолжает задерживаться до тех пор, пока не пройдет 40 мс?
Я исследовал исходный код. Если я правильно прочитал, Linux следует СЛЕДУЕТ RFC 2581.
Соответствующий фрагмент кода содержится в функции __tcp_ack_snd_check () в tcp_input.c.