web-dev-qa-db-ja.com

インターフェイスでサポートされている最大MTUサイズを取得する方法

最初に設定することなく、nicが特定のMTUサイズをサポートしているかどうかを確認する方法を見つけようとしています(実際には、すべてのサーバーのすべてのインターフェイスの理論上の最大MTUを見つけたいと思います)。

Ethtoolのすべての機能を調べ、/ sys/class/netなどを調べましたが、見つけることができるのは現在のMTU値だけです。

それを試さずにインターフェイスでMTUがどのくらい高いかを確認する方法はありますか?

2
George Shuklin

pingで特定のmtuサイズを送信できます

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

<ip-address>は、確認するインターフェースのローカルIPです。

このメソッドを使用する場合、ヘッダーとして追加の28バイトがあることに注意してください。

Message too longエラーなどが発生するまで、mtuサイズを(pingコマンドで)増やし続けます。

現在の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

送信が大きすぎます。一部のディストリビューションmayは、実際にはこのメソッドを介して最大値を伝えます。例: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バイトなので、一部のディストリビューションが実際の制限を出力するかどうかはわかりません。
1
RobotJohnny