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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.