如何获得接口支持的最大 MTU 大小?

Geo*_*lin 11 linux networking ethernet

我可以设置接口的 MTU,例如:

ip link set dev eth0 mtu 9000
Run Code Online (Sandbox Code Playgroud)

然而,不同的接口和不同的机器似乎有不同的限制导致错误:

Error: mtu greater than device maximum.
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来检查 NIC 是否支持特定的 MTU 大小,而无需先尝试设置它;实际上,我想找到我所有服务器上所有接口的理论最大 MTU。

我检查了 ethtool 的所有功能,查看了 /sys/class/net 等,但我能找到的只是当前的 MTU 值。

有没有办法在不尝试的情况下查看接口上的 MTU 有多高?

Geo*_*lin 12

令人惊讶的是,ip如果被问到,我发现会报告此信息。

ip -d link list

21: enxa44cc8aa52bd: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether a4:4c:c8:aa:52:bd brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 9194 addrgenmode none numtxqueues 1 numrxqueues 1 gso_max_size 16354 gso_max_segs 65535

minmtu并且maxmtu是答案。

  • 请注意,“busybox”中包含的简化“ip”命令不支持“-d”选项来显示“minmtu”和“maxmtu”。 (2认同)

Rob*_*nny 3

您可以发送特定的 MTU 大小ping

ping -M do -s <mtu-size> <ip-address>
Run Code Online (Sandbox Code Playgroud)

<ip-address>是您要检查的接口的本地 IP。

请注意,使用此方法时会有额外的 28 个字节作为标头。

只需不断增加 mtu 大小(在ping命令中),直到出现Message too long错误或类似错误。

当前 MTU 设置和 IP:

[root@centos7 ~]# ip l  | grep ens37 | awk '{print $4,$5}'
mtu 1500
[root@dev-worker1 ~]# ip addr show ens37 | grep "inet " | awk '{print $2}'
10.10.10.10/24
Run Code Online (Sandbox Code Playgroud)

发送大于当前 MTU 设置的数据包,但仍被接受:

[root@centos7 ~]#  ping -M do -s 8972 10.10.10.10
PING 10.10.10.10 (10.10.10.10) 8972(9000) bytes of data.
8980 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.103 ms
8980 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.067 ms
Run Code Online (Sandbox Code Playgroud)

发送太大。一些发行版实际上可能会通过这种方法告诉您最大值。例如Centos7:

[root@centos7 ~]#  ping -M do -s 118972 10.10.10.10
Error: packet size 118972 is too large. Maximum is 65507
Run Code Online (Sandbox Code Playgroud)

完成后,如果您想要使用,可以将其设置为最大值ip link

ip link set <interface name> mtu <mtu value>
Run Code Online (Sandbox Code Playgroud)

编辑:

  • 澄清我指的是 ping 本地 IP 并提供了示例。
  • 我不确定某些发行版是否会输出实际限制,因为我的测试环境接口的最大容量为 65535 字节。

  • 这个答案是完全错误的,并且误解了问题的含义及其本身的结果。“65507”限制**不是**硬件 MTU 限制。它是最大 IP 数据包大小减去标头的 28 个字节。这与硬件限制或配置的限制不同。[IPv4](https://en.wikipedia.org/wiki/IPv4) 使用两个字节来显示数据包大小([参见此处](https://en.wikipedia.org/wiki/IPv4#/media/File :IPv4_Packet_-en.svg)) 将总数据包大小限制为 65535 字节。标头少 28 个字节 = 65507 (2认同)