Meaning of tcp_delack_min

the current Linux Kernel (e.g. 2.6.36) uses Delayed Acknowledgments (delack).

In /include/net/tcp.h it says:

define TCP_DELACK_MIN ((unsigned)(HZ/25))

So, for a Kernel using a HZ value of 1000, an ACK should be delayed by a minimum of 40 ms.

However, RFC 2581 says a TCP implementation should acknowledge every second full sized segment without further delay.

Does anybody know whether the Linux Kernel follows that 'should' or whether the TCP_DELACK_MIN value means that even after a full sized segment was received, the ACK continues to be delayed until 40 ms have passed?


I researched in the source code. If I read it correctly, Linux follows the SHOULD of RFC 2581.

The relevant piece of code is contained in the function __tcp_ack_snd_check() in tcp_input.c.