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

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

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

ip link set dev eth0 mtu 9000

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

Error: mtu greater than device maximum.

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

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

有没有一种方法可以在不尝试的情况下查看接口上的 MTU 可以有多高?

答案1

令人惊讶的是,我发现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答案。

答案2

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

ping -M do -s <mtu-size> <ip-address>

<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

发送大于当前 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

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

[root@centos7 ~]#  ping -M do -s 118972 10.10.10.10
Error: packet size 118972 is too large. Maximum is 65507

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

ip link set <interface name> mtu <mtu value>

编辑:

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

相关内容