2台のLinuxPCがルーターとして機能し、2台のLinuxPCが通常のクライアントとして機能するテストネットワークをセットアップしました。 2つのルーターは相互に接続され、各クライアントは1つのルーターに接続されます。クライアントからルーターの1つへのパスでは、MTUは1500ですが、2つのルーター間では1200です。また、IPv6のみを使用しています。
1200バイトを超えるパケットを送信しようとすると、ルーターからICMPv6の「パケットが大きすぎます」というエラーが発生することが予想されます。クライアントはパケットをフラグメント化して再送信する必要があります。ただし、これは発生しません。 Wiresharkを見ると、クライアントがICMPv6エラーを受信していることがわかりますが、クライアントはパッケージをフラグメントとして再送信しようとはしていません。
この動作の理由は何でしょうか?
IPv6は断片化をサポートしていません。
IPv4では、ルーターは、あるリンクから小さいMTUの別のリンクに転送するときにパケットをフラグメント化する場合があります([〜#〜] df [〜#〜]が設定されていない場合)。
IPv6では、エンドポイントはPath MTU Discoveryを使用して実際にそれを検出し、このMTUを相互に使用する必要があります...
編集 @ Patrick Mevzekの高く評価されたコメントの後:
...または、1280バイトのIPv6に対して保証されたMTUを使用することに頼ります(ホスト上のパケットのフラグメント化の有無にかかわらず)。