TCP不';t每隔一段确认一次
我正在阅读[Stevens 1993],在TCP批量数据一章中,显示了“每隔一段确认一次”策略,但在此之后,他给出了如下图: (很抱歉图片质量不高,我不知道如何上传高分辨率图片) 第8段确认了4段,这是否与“每隔一段确认一次”冲突?我确信这与操作系统无关,因为作者在两个示例中使用了相同的机器 我也查了一下,这也表明 ..…在全尺寸段流中,至少应有一个ACK 至少每秒钟一段TCP不';t每隔一段确认一次,tcp,Tcp,我正在阅读[Stevens 1993],在TCP批量数据一章中,显示了“每隔一段确认一次”策略,但在此之后,他给出了如下图: (很抱歉图片质量不高,我不知道如何上传高分辨率图片) 第8段确认了4段,这是否与“每隔一段确认一次”冲突?我确信这与操作系统无关,因为作者在两个示例中使用了相同的机器 我也查了一下,这也表明 ..…在全尺寸段流中,至少应有一个ACK 至少每秒钟一段 您可以为每个PSH/ACK发送一个ACK。我想如果你想使用批量数据,重点是只确认每个窗口(这是向前滑动窗口所必需的)。好的
您可以为每个PSH/ACK发送一个ACK。我想如果你想使用批量数据,重点是只确认每个窗口(这是向前滑动窗口所必需的)。好的,你可以为每个PSH/ACK发送一个确认。我想如果你想使用批量数据,关键是只确认每个窗口(这是向前滑动窗口所必需的)。史蒂文提到,“每隔一段确认一次”非常常见。这不是必须的。引用你提到的同一章: “使用TCP的滑动窗口协议,接收器不必 确认每个接收到的数据包。使用TCP时,ACK 它们确认接收器已正确接收到 通过已确认序列号减去1的所有字节” Steven提到“每隔一段确认一次”非常常见。这不是必须的。引用你提到的同一章: “使用TCP的滑动窗口协议,接收器不必 确认每个接收到的数据包。使用TCP时,ACK 它们确认接收器已正确接收到 通过已确认序列号减去1的所有字节”
所以,既然没有正确的答案。我做了一些测试
很明显,似乎大多数实现在两个相邻的ack之间有最大数量的段,尽管每个实现可能都有自己的值。所以,因为没有正确的答案。我做了一些测试
很明显,似乎大多数实现在两个相邻的ACK之间都有最大数量的段,尽管每个实现可能都有自己的值。Linux将每隔一个完整段进行一次ACK,实际上是MSS值的两倍,并且在执行此操作之前,通常会等待最大延迟。它早在2012年就可配置: 延迟确认可通过TCP_QUICKACK套接字选项关闭。(用于下一次确认) 看起来大多数Windows版本的ACK频率较低,不确定这是否可以控制
我怀疑在这个例子中,他假设的是一个缓慢的发送者,它要么不遵循“每隔一个”的规则,要么是因为它处理传入请求的速度太慢,以至于接收者在确认其他未完成的数据时只是看到了这些数据(或者他没有注意到这个细节)。它肯定只确认4*mss,而这恰好是RWin。Linux将每隔一个完整段确认一次,实际上是mss数据量的两倍,并在执行此操作之前等待最大延迟。它早在2012年就可配置: 延迟确认可通过TCP_QUICKACK套接字选项关闭。(用于下一次确认) 看起来大多数Windows版本的ACK频率较低,不确定这是否可以控制
我怀疑在这个例子中,他假设的是一个缓慢的发送者,它要么不遵循“每隔一个”的规则,要么是因为它处理传入请求的速度太慢,以至于接收者在确认其他未完成的数据时只是看到了这些数据(或者他没有注意到这个细节)。它肯定只确认了4*mss,恰好是RWin。@RyanVincent不,我不是说我看到了8段,这是第八段acks段4、5、6、7。@RyanVincent不,我不是说我看到了8段,这是第八段acks段4、5、6、7。这里的图只确认了每个窗口,并且可以确认每个段,但是作者说它应该每隔一段确认一次,而在这个图中,它一次确认了4段,我只是感到困惑。我认为你实际上必须确认所有的推送,如果推送频繁的话,这会让事情变得很糟糕。这里的图只确认每个窗口,并且有可能确认每一段,但作者说它应该每隔一段确认一次,而在这个图中,它在一段时间内确认了4段,我只是感到困惑。我认为你实际上必须确认所有的推动,如果它们频繁发生,这会让事情变得糟糕。是的,我读到了。但如何解释RFC的“……在全尺寸段流中,至少每秒钟都应该有一个ACK”。我认为Stevens在这里的意思是不必确认每个数据包,而不必“每隔一段确认”,毕竟,“每隔一段确认”恰恰允许我们不确认每个数据包。后者对前者至关重要。是的,我读过。但如何解释RFC的“……在全尺寸段流中,至少每秒钟都应该有一个ACK”。我认为史蒂文斯在这里的意思是不必确认每一个数据包,而不是确认每一个数据包