Windows 发出去的包 IP 层为什么都设置了禁止分片

250 天前
 tubowen
https://x.imgs.ovh/x/2023/09/06/64f7551c5315b.png
这是一次访问百度的请求,以太帧长是 3409 ,为什么 IP 层会设置禁止分片标志呢,网卡的 MTU 是 1500 ,超过 MTU 又设置了禁止分片,应该会被丢弃,但实际还是能访问百度

https://x.imgs.ovh/x/2023/09/06/64f75795325bb.png

ping -f -l 1500 却不能 ping 通百度
989 次点击
所在节点    问与答
2 条回复
ruimz
250 天前
DF 位是给中间路由看的
把 3409 分成 MTU 大小这一过程发生在网卡里,Wireshark 看不到

现代系统在启用 TSO 后,会把 TCP 发送数据的工作塞给( offload ,卸载)网卡,而不是在系统内核内进行分帧。Wireshark 抓到的数据包是送到网卡硬件之前的数据,是尚未分为 MTU 大小之前的情况,因此 Wireshark 的显示会比 MTU 大。
本机上的网卡或许会忽略本机大于 MTU 且设置了禁止分片的标志位继续分片,因为网卡自己就负责给大包分片。
实际上传输的帧是小于等于 MTU 的,可以从非本机抓包验证

ping1500 发不出去的原因是发送数据大于 MTU ,而且没有人帮他分片
louisxxx
249 天前
网卡的 MTU 是 1500, 数据包从网卡出的时候就会自动按 1500 分片,除非你中间节点 MTU 小于 1500 不然是不会被丢弃的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/971242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX