我试图了解 TCP 行为,尤其是重新传输。
我做了一个小实验,发现了奇怪的东西。
唯一的最后一个数据包被重新传输。为什么会这样?
我认为如果最后一个数据包超时,那么其他数据包必须超时,因为流中的所有数据包都具有相同的 RTT 和 RTO。
起初,我认为是由于delayed ack. 因此,我对setsockopt TCP_QUICKACK做了同样的实验。但我看到了同样的现象。(但我还不确定,这不是原因delayed ack。)
你能给我一点帮助吗?感谢您阅读:)
例如,
[1] H1->H2 发送一个 1500 字节的数据包
[2] H1->H2 发送一个1500字节的数据包
[3] H1->H2 发送一个1500字节的数据包
...
[n] H1->H2 发送一个800字节的数据包[最后一个数据包]
[n+1] H1->H2重新发送一个800字节的数据包[最后一个数据包]
[n+2] H2->H1 发送 ACK。
[来自的原始数据wireshark]
1735203 51.249349738 10.0.0.1 10.0.0.2 TCP 1514 35250 → 50021
[ACK] Seq=16124342 Ack=1 Win=58 Len=1448 TSval=902298 TSecr=902296
1735204 51.249349999 10.0.0.1 10.0.0.2 TCP 1514 35250 → 50021
[ACK] Seq=16125790 Ack=1 Win=58 Len=1448 TSval=902298 TSecr=902296
1735205 51.249350340 10.0.0.1 10.0.0.2 TCP 866 35250 → 50021
[PSH, ACK] Seq=16127238 Ack=1 Win=58 Len=800 TSval=902298 TSecr=902296
1735207 51.258283589 10.0.0.1 10.0.0.2 TCP 866
[TCP Retransmission] 35250 → 50021 [PSH, ACK] Seq=16127238
Ack=1 Win=58 Len=800 TSval=902301 TSecr=902298
1735208 51.258288919 10.0.0.2 10.0.0.1 TCP 66 50021 → 35250
[ACK] Seq=1 Ack=16128038 Win=32766 Len=0 TSval=902301 TSecr=902298
编辑:
** 附加捕获的文件 **
https://www.dropbox.com/s/1mtgtv5xof6octn/host2_data.pcapng?dl=0
https://www.dropbox.com/s/1mtgtv5xof6octn/host2_data.pcapng?dl=0
每个文件都是在每个主机上捕获的数据包。
如果您不介意,请检查文件。