tubowen
V2EX  ›  问与答

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

  •  
  •   tubowen · Sep 6, 2023 · 2196 views
    This topic created in 1161 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
    fbcskpebfr
    Sep 6, 2023 via iPhone❤️4
    1
    DF 位是给中间路由看的
    把 3409 分成 MTU 大小这一过程发生在网卡里,Wireshark 看不到

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

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