2011-07-22 16 views
4

私は、LinuxでパスMTUの検出に関するいくつかの実験を行っています。私がRFC 1191から理解している限り、ルータが非ゼロのDFビットを持つパケットを受信し、そのパケットをフラグメンテーションせずに次のホストに送ることができない場合、ルータはパケットを廃棄し、ICMPメッセージを最初の送信者。パスMTU検出 - 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し、その逆もうまくいきます。 MTU 1500セグメント200.xを持っ150.xおよび100.x

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 

セグメントは、MTU 750

は私が有効になってDFとのUDPパケットを送信しようとしています。実際、VM1はパケットのサイズが750より大きい場合にパケットを送信しません(send()呼び出しでEMSGSIZEエラーが発生します)。

しかし、私は、サイズが1500を超えるパケットに対してこのような動作を期待しています。そして、VM1が750から1500までのパケットをR1に送信し、R1(またはR2)がパケットを破棄してICMPパケットをVM1に送信する。しかし、これは起こりません。

二つの質問があります。

1)なぜ?

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

ありがとうございました。

答えて

6

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

、1500個のバイトのパケットを送信する前にキャッシュ(PMTUキャッシュを削除)を紅潮してみてください:

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

あなたが再びこの宛先のPMTUエントリーを移入うICMPの断片化必要なメッセージが表示されます!したがって、実験をやり直す前にこのキャッシュをフラッシュしておく必要があります。

+0

はい、あなたは正しいです。それは動作します:)ありがとう。 – Rom098

関連する問題