代码之家  ›  专栏  ›  技术社区  ›  tgcloud

MTU 1500:1472字节后的碎片数据包

  •  7
  • tgcloud  · 技术社区  · 10 年前

    我有几个VM在Openstack上运行。我为交换机分配了一个数据网络网关,MTU=1500,VM必须在其中运行。

    同样在Openstack中,我设置了网络的默认MTU=1500。

    我正在尝试从虚拟机ping到1500包大小的交换机的网关(或同一网络上的任何ip),它正在对数据包进行分段。

    localhost:~# ping -M do -s 1500 10.4.14.18 
    PING 10.4.14.18 (10.4.14.18) 1500(1528) bytes of data.
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500)
    From 10.4.14.17 icmp_seq=1 Frag needed and DF set (mtu = 1500
    

    相反,如果我用较小的mtu(1472)发送数据包,

    localhost:~# ping -M do -s 1472 10.4.14.18
    PING 10.4.14.18 (10.4.14.18) 1472(1500) bytes of data.
    1480 bytes from 10.4.14.18: icmp_seq=1 ttl=64 time=0.965 ms
    1480 bytes from 10.4.14.18: icmp_seq=2 ttl=64 time=0.515 ms
    ^C
    --- 10.4.14.18 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1875ms
    rtt min/avg/max/mdev = 0.515/0.740/0.965/0.225 ms
    

    我看得出28个字节的差异,我不明白,这28个字节在哪里被使用?

    2 回复  |  直到 10 年前
        1
  •  14
  •   tnull    5 年前

    1500字节MTU适用于网络层的标准以太网。换句话说:1500字节可以在以太网帧中传输,而不会被分割。然而,以太网之上的进一步协议当然会削减最大负载。

    在您的情况下(ping的情况下),附加协议是IP和ICMP。它们都有长度分别为20字节和8字节的头。

    这意味着您最多可以传输

    1500 bytes (Ethernet mtu) - 20 byte (IP header) - 8 byte (ICMP header) 
    = 1472 byte
    

    另请参见 this question regarding MTU for UDP .

        2
  •  1
  •   ratzip    8 年前

    Ping将添加28字节标头,然后发送。

    因此,如果要发送-s 1500,实际大小为1500+28=1528字节。

    推荐文章