我可以设置接口的 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 字节。