我正在阅读 [Stevens 1993],在 TCP 批量数据一章中,显示了“ACK every other segment”策略,但在那之后,他给出了这样一个数字:
(抱歉图片质量不高,我不知道怎么上传高清图片)
段 8 ACKed 4 段,这不会与“ACK every other segment”冲突吗?而且我确信这与操作系统无关,因为作者在两个示例中使用了相同的机器。
我也查了一下RFC 1122这也表明
.....in a stream of full-sized segments there SHOULD be an ACK for at least every second segment.
最佳答案
Linux 将 ACK 每隔一个完整的段,实际上是 MSS 数据的两倍,并且在这样做之前主要等待 MAX_DELAY。它在 2012 年成为可配置的:https://lwn.net/Articles/502585/
可以使用 TCP_QUICKACK 套接字选项关闭延迟的 ACK。 (对于下一个ACK)
看起来大多数 Windows 版本的 ACK 频率较低,不确定这是否可控。
我怀疑在插图中他假设一个慢速发送者,它要么不遵循每个其他应该因为它处理传入请求的速度太慢,以至于接收者在回过头来确认它们时只是看到其他未完成的数据(或者他没有注意这个细节)。它肯定只确认恰好是 RWin 的 4*mss。
关于TCP 不会每隔一个段确认一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39614056/