私は、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パケットを受信するように仮想ネットワークを設定することはできますか?
ありがとうございました。
はい、あなたは正しいです。それは動作します:)ありがとう。 – Rom098