インターフェイスMTUは、「ip link show」出力に表示されているものとは異なります。

インターフェイスMTUは、「ip link show」出力に表示されているものとは異なります。

次のように2台のコンピュータが直接接続されています。

PC1[eth1] <-> [eth0]PC2

eth1インターフェイスのMTUはPC19000バイトです。eth0インターフェイスのMTUはPC22000バイトです。

root@PC2:~# ip -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 80:97:41:ae:f7:c9 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    170432     696      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    118126     274      0       0       0       0
root@PC2:~# ip addr show dev eth0                                                                                                                                                                                          
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 80:97:41:ae:f7:c9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.30/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.11.12.2/24 scope global eth0:temporary
       valid_lft forever preferred_lft forever
root@PC2:~#

奇妙なことは、ping -M do -s 4182 -c 1 10.11.12.2で実行するとPC1パケットが受信されPC2、分割された応答が送信されることです。

root@PC1:~# ping -M do -s 4182 -c 1 10.11.12.2
PING 10.11.12.2 (10.11.12.2) 4182(4210) bytes of data.
4190 bytes from 10.11.12.2: icmp_seq=1 ttl=64 time=0.397 ms

--- 10.11.12.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.397/0.397/0.397/0.000 ms
root@PC1:~#

私はPC2がMTUを超えたときにフレームを自動的に削除したいと思います。しかし、ping -M do -s 4183 -c 1 10.11.12.2答えを受け取れませんでした。PC2インターフェイスMTUは、2000バイトではなく4210(4182 + 8 ICMPヘッダ+ 20 IPv4ヘッダ)バイトのようです。eth0inのカーネルドライバはPC2ですe1000e

この行動をどのように説明すべきでしょうか?

答え1

これがMTU(最大送信単位)とMRU(最大受信単位)の違いです。

通常、単一のブロードキャストドメインのすべてのメンバーは、MTU(およびMRU)が同じに設定されているため、違いは重要ではないと予想されますが、設定が正しくない場合する問題。

私はPC2がMTUを超えたときにフレームを自動的に削除したいと思います。

2000バイトより大きいパケットを送信しないようにPC2に指示しましたが、これがより大きなパケットを受信するのを妨げるわけではありません。 Postelの原則はここで機能します(ドライバの設計方法によって異なります)。

しかし、ping -M do -s 4183 -c 1 10.11.12.2答えを受け取れませんでした。

この余分なバイトがMRUより高いようです。 MRUが明示的に構成されていないため、このサイズはハードウェア制限である可能性があり、MTUが2000に設定されている場合は、ネットワークインターフェースハードウェアの内部バッファーが構成された方法の結果である可能性があります。

単一のブロードキャストドメイン内でMTUが正しく設定されていると、この問題は発生しません。 IS-ISなどの一部のルーティングプロトコルでは、ブロードキャストドメイン内の他のすべてのスピーカーが実際にこのパケットを受信できるように、HelloメッセージをMTUに意図的に追加して、次の場合に隣接をまったく設定できなくなります。問題をより簡単に検出できます。

関連情報