7

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

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

我正在尝试使用 1500 个数据包大小从 VM ping 到交换机的网关(或同一网络上的任何 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 个字节在哪里被使用?

4

2 回答 2

13

1500 字节的 MTU 用于网络层的标准以太网。换句话说:1500字节可以在以太网帧中传输而不会被分片。但是,以太网之上的其他协议当然会削减最大有效负载。

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

这意味着您最多可以传输

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

另请参阅有关 MTU for UDP 的这个问题

于 2016-07-04T08:11:59.453 回答
0

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

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

于 2017-10-26T13:27:56.840 回答