tubowen
V2EX  ›  问与答

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

  •  
  •   tubowen · Sep 6, 2023 · 1713 views
    This topic created in 986 days ago, the information mentioned may be changed or developed.
    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 replies    2023-09-06 06:01:43 +08:00
    fbcskpebfr
        1
    fbcskpebfr  
       Sep 6, 2023 via iPhone   ❤️ 4
    DF 位是给中间路由看的
    把 3409 分成 MTU 大小这一过程发生在网卡里,Wireshark 看不到

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

    ping1500 发不出去的原因是发送数据大于 MTU ,而且没有人帮他分片
    louisxxx
        2
    louisxxx  
       Sep 6, 2023
    网卡的 MTU 是 1500, 数据包从网卡出的时候就会自动按 1500 分片,除非你中间节点 MTU 小于 1500 不然是不会被丢弃的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3649 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    ♥ Do have faith in what you're doing.