インターフェイスでサポートされている最大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バイトが追加されます。

エラーなどがping発生するまで、コマンドのmtuサイズを増やしてください。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>

編集する:

  • 明確にするために、ローカルIPへのpingについて言及し、例を提供しました。
  • 私のテスト環境インターフェイスの最大容量は65535バイトなので、一部のディストリビューションで実際の制限を出力するかどうかはわかりません。

関連情報