次のように2台のコンピュータが直接接続されています。
PC1[eth1] <-> [eth0]PC2
eth1
インターフェイスのMTUはPC1
9000バイトです。eth0
インターフェイスのMTUはPC2
2000バイトです。
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ヘッダ)バイトのようです。eth0
inのカーネルドライバは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に意図的に追加して、次の場合に隣接をまったく設定できなくなります。問題をより簡単に検出できます。