我有Windows 7的机器。 我的MTU是1300,因为我使用VPN软件(与我的问题无关)所以我的MSS是1260.我的IP是10.0.0.87。
Wireshark捕获: https://www.cloudshark.org/captures/cef30c54b1b8
我正在发出HTTP GET请求以接收某些网页。 让我们从8号段开始。我的系统向2个先前的数据包发送ACK。 在段号。 13我的系统向4个先前的数据包发送ACK。 对前4个数据包进行8号ACK分段。 对前11个数据包进行30号ACK确认。
我知道延迟ACK等等,但为什么Windows7会以这种方式发送ACK? 有没有关于这方面的文件? 严格使用延迟ACK,我的机器应该在2个未经处理的段之后发送ACK(或者在没有数据在飞行中的500ms之后)
任何人都知道这种以这种方式发送ACK的方案是什么?
答案 0 :(得分:1)
你是对的。它很奇怪。我不确定为什么除了人以外的其他人不理解你的问题。您也应该确定TCP应该每隔一段确认一次,或者在延迟确认计时器到期后为单个段确认。
我认为这可能与卸载和处理数据处理和ACK发送而不是Windows TCP堆栈的NIC有关。尝试禁用TCP Chimney以查看行为是否更改:
http://support.microsoft.com/kb/951037
如果是,那么您可以研究为您的NIC驱动程序卸载。
如果没有,请尝试禁用自动调整作为缩小范围的下一步: