tcp - 发送长 TCP 段时会发生什么?
问题描述
我将一个 txt 文件上传到服务器并使用 Wireshark 捕获了上传。问题是有一个非常长的段,然后我从服务器获得的 ack 序列比我应该的要低。在第 865 行,我的 PC 发送了一个长度为 12240 的段。我应该得到一个大于 12240 的 ack,但事实并非如此。
解决方案
查看帧 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 字节段的细分[]
,这实际上可以在Wire 已经在外部机器上运行了 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 撰写的一篇出色的文章,标题为“本地数据包捕获的缺点”。
推荐阅读
- c# - System.Net.Sockets 中的“资源暂时不可用”错误
- r - 从预测结果中删除分层变量
- git - Arcanist / git 工作流程在代码审查之间具有功能分支延续
- pine-script - 具有独立止盈的金字塔式交易 (Pinescript)
- swift - Swift.Bool 不是 Bool 吗?
- api - 为什么不使用简单的 http 请求而不是 SOAP
- r - R dplyr 与 seq()
- r - 如何将p值添加到ggplot中的分组图表中?
- python - 如何将名称的列列表转换为列后带有双引号的列名称列表?
- reactjs - 如何将打字稿动态类型作为参数传递给自定义钩子?