我正在研究一些wireshark捕获。我注意到,尽管由于 TCP ack 延迟而像我预期的那样每隔一个数据包发送一次 Ack,但我注意到有时它每 3 个段就在 ack 一次。
另一个观察结果是,数据段不是以恒定的时间延迟出现的,当这种情况发生时,收到 3 个已确认的数据包的延迟非常小。
我试图找出原因,但似乎无法找到明确的答案。操作系统是否会根据接收它们的速率在发送 ack 时动态调整?为什么会这样?
我正在研究一些wireshark捕获。我注意到,尽管由于 TCP ack 延迟而像我预期的那样每隔一个数据包发送一次 Ack,但我注意到有时它每 3 个段就在 ack 一次。
另一个观察结果是,数据段不是以恒定的时间延迟出现的,当这种情况发生时,收到 3 个已确认的数据包的延迟非常小。
我试图找出原因,但似乎无法找到明确的答案。操作系统是否会根据接收它们的速率在发送 ack 时动态调整?为什么会这样?
RFC 1122 规定 TCP 主机应实现延迟 ACK,但延迟必须小于 500 毫秒。大多数实现使用最多 200 毫秒。
但实际上,大多数系统在延迟确认和确认每个段之间使用动态调整算法。这是因为延迟确认会影响 RTT 测量和发送方的流量。您应该查看慢启动算法以找出延迟 ack 的影响。
此外,延迟确认会导致交互式应用程序的性能下降。