V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
tubowen
V2EX  ›  问与答

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

  •  
  •   tubowen · 236 天前 · 964 次点击
    这是一个创建于 236 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 通百度
    2 条回复    2023-09-06 06:01:43 +08:00
    ruimz
        1
    ruimz  
       235 天前 via iPhone   ❤️ 4
    DF 位是给中间路由看的
    把 3409 分成 MTU 大小这一过程发生在网卡里,Wireshark 看不到

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

    ping1500 发不出去的原因是发送数据大于 MTU ,而且没有人帮他分片
    louisxxx
        2
    louisxxx  
       235 天前
    网卡的 MTU 是 1500, 数据包从网卡出的时候就会自动按 1500 分片,除非你中间节点 MTU 小于 1500 不然是不会被丢弃的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1744 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:39 · PVG 00:39 · LAX 09:39 · JFK 12:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.