当前 Linux 内核(例如 2.6.36)使用延迟确认(delack)。
定义 TCP_DELACK_MIN ((无符号)(HZ/25))
因此,对于使用 HZ 值为 1000 的内核,ACK 应至少延迟 40 毫秒。
但是,RFC 2581 规定 TCP 实现应该立即确认每个第二个全尺寸段。
是否有人知道 Linux 内核是否遵循“应该”或 TCP_DELACK_MIN 值是否意味着即使收到了全尺寸段后,ACK 仍会延迟到 40 毫秒过去?
答案1
我研究了源代码。如果我没有看错的话,Linux 遵循 RFC 2581 的 SHOULD。
相关代码包含在函数中__tcp_ack_snd_check()在 tcp_input.c 中。