发送长 TCP 段时会发生啥?
Posted
技术标签:
【中文标题】发送长 TCP 段时会发生啥?【英文标题】:What happens when a long TCP segment is sent?发送长 TCP 段时会发生什么? 【发布时间】:2021-04-05 13:12:00 【问题描述】:我将一个 txt 文件上传到服务器并使用 Wireshark 捕获了上传。 问题是有一个非常长的段,然后我从服务器获得的 ack 序列比我应该的要低。 在第 865 行,我的 PC 发送一个长度为 12240 的段。 我应该得到一个大于 12240 的 ack,但事实并非如此。
Wireshark capture image
【问题讨论】:
networkdatapedia.com/post/2016/08/11/… 【参考方案1】:查看帧 862。主机 128.119.245.12 正在通告 1360 字节的 MSS。因此,10.0.0.12 发送的 TCP 段的最大大小最多只能包含 1360 个字节,尽管 Wireshark 显示了什么。看起来更大的 TCP 段(12240 和 2720 字节)的原因是因为捕获引擎正在接收数据包在它们被 NIC 分段。如果您在外部设备上捕获流量,例如来自 SPAN 端口或通过 TAP,您将不会看到 12240 字节段,而是会看到 9 个 1360 字节段被发送。所以,这就是接收主机的 ACK 号与 12240 不匹配的原因;它会确认它接收到的每个 1360 字节段。直到第 930 帧,构成明显 12240 段的所有 9 个 1360 字节段都被确认,您可以通过一些 SEQ/ACK 分析轻松计算所有这些。
这里是主机 10.0.0.12 的 SEQ # 以及来自主机 128.119.245.12 的 ACK #,我在括号 []
中包含了 9 个 1360 字节段的细分如果 Wireshark 在外部机器上而不是在 10.0.0.12 主机上运行,实际上已经在网络上看到过:
Frame # 10.0.0.12 128.119.245.12 Comments
SEQ Len ACK
------- ----------- -------------- -----------------------------
822 0 0
862 1 Next expected SEQ # is now 1
863 1 0
864 1 716
865 717 12240 SEQ: 1 + 716 = 717
[865-1 2077 1360 SEQ: 717 + 1360 = 2077]
[865-2 3437 1360 SEQ: 2077 + 1360 = 3437]
[865-3 4797 1360 SEQ: 3437 + 1360 = 4797]
[865-4 6157 1360 SEQ: 4797 + 1360 = 6157]
[865-5 7517 1360 SEQ: 6157 + 1360 = 7517]
[865-6 8877 1360 SEQ: 7517 + 1360 = 8877]
[865-7 10237 1360 SEQ: 8877 + 1360 = 10237]
[865-8 11597 1360 SEQ: 10237 + 1360 = 11597]
[865-9 12957 1360 SEQ: 11597 + 1360 = 12957]
905 717 ACK: The ACK to frame 864
906 12957 1360 SEQ: 717 + 12240 = 12957
907 2077 ACK: The ACK to "frame" 865-1
908 14317 2720 SEQ: 12957 + 1360 = 14317
912 3437 ACK: The ACK to "frame" 865-2
913 17037 2720 SEQ: 14317 + 2720 = 17037
915 4797 ACK: The ACK to "frame" 865-3
916 19757 2720 SEQ: 17037 + 2720 = 19757
917 6157 ACK: The ACK to "frame" 865-4
918 22477 2720 SEQ: 19757 + 2720 = 22477
919 7517 ACK: The ACK to "frame" 865-5
920 25197 2720 SEQ: 22477 + 2720 = 25197
923 8877 ACK: The ACK to "frame" 865-6
924 27917 2720 SEQ: 25197 + 2720 = 27917
925 10237 ACK: The ACK to "frame" 865-7
926 30637 2720 SEQ: 27917 + 2720 = 30637
927 11597 ACK: The ACK to "frame" 865-8
928 33357 2720 SEQ: 30637 + 2720 = 33357
930 12957 ACK: The ACK to "frame" 865-9
------- ----------- -------------- -----------------------------
要进一步阅读有关此主题的信息,请参阅 Jasper Bongertz 撰写的一篇出色的文章,标题为 The drawbacks of local packet captures。
【讨论】:
以上是关于发送长 TCP 段时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
如果您将 dst 端口为 80 的 TCP 数据包发送到在端口 80 处提供 http 请求的主机,会发生啥?
长连接、短连接是啥意思?哪位大神给讲一下,不要太官方了,通俗易懂点,谢谢。