5

Linuxで経路MTU探索を使っていくつかの実験を行っています。RFC 1191から理解した限りでは、ルーターがゼロ以外のDFビットを含むパケットを受信し、そのパケットを断片化せずに次のホストに送信できない場合、ルーターはパケットをドロップして、ICMPメッセージを最初のホストに送信する必要があります。送信者。

コンピューター上にいくつかのVMを作成し、次の方法でそれらをリンクしました。

VM1 (192.168.100.2)

R1  (192.168.100.1, 
     192.168.150.1)

R2  (192.168.150.2, 
     192.168.200.1)

VM2 (192.168.200.2)

Rx-Linuxがインストールされた仮想マシンであり、静的ルートを持つ2つのネットワークインターフェイスがあります。V1からV2にpingを実行し、その逆も成功します。

traceroute from 192.168.100.2 to 192.168.200.2 (192.168.200.2)
 1  192.168.100.1 (192.168.100.1)  0.437 ms  0.310 ms  0.312 ms
 2  192.168.150.2 (192.168.150.2)  2.351 ms  2.156 ms  1.989 ms
 3  192.168.200.2 (192.168.200.2)  43.649 ms  43.418 ms  43.244 ms

tracepath 192.168.200.2
 1:  ubuntu-VirtualBox.local                               0.211ms pmtu 1500
 1:  192.168.100.1                                         0.543ms 
 1:  192.168.100.1                                         0.546ms 
 2:  192.168.150.2                                         0.971ms 
 3:  192.168.150.2                                         1.143ms pmtu 750
 3:  192.168.200.2                                         1.059ms reached

セグメント100.xおよび150.xにはMTU1500があります。セグメント200.xにはMTU750があります。

DFを有効にしてUDPパケットを送信しようとしています。事実、パケットのサイズが750を超える場合、VM1はパケットをまったく送信しません(send()呼び出しでEMSGSIZEエラーを受け取ります)。

ただし、サイズが1500を超えるパケットでは、このような動作が予想されます。また、VM1は750〜1500のサイズのパケットをR1に送信し、R1(またはR2)はそのようなパケットをドロップしてICMPパケットをVM1に返すと予想します。 。しかし、これは起こりません。

2つの質問があります:

1)なぜですか?

2)RFC 1191に従ってICMPパケットを受信するように仮想ネットワークを設定することは可能ですか?

ありがとう。

4

2 に答える 2

8

VM1 が PMTU 情報をキャッシュしている可能性があります。デフォルトでは、これらのキャッシュ エントリのタイムアウトは 10 分です。/proc/sys/net/ipv4/route/mtu_expires (秒) に書き込むことで、タイムアウトを変更できます。

実験のために、1500 バイトのパケットを送信する前に、キャッシュをフラッシュ (PMTU キャッシュを削除) してみてください。

echo "0" > /proc/sys/net/ipv4/route/flush 

この宛先の PMTU エントリを再度設定する ICMP フラグメンテーションが必要なメッセージを受け取ります。したがって、実験を再試行する前に、このキャッシュをフラッシュし続ける必要があります。

于 2011-07-26T20:47:53.963 に答える