Linuxはホスト固有のMTUテーブルを保持しますか?

Linuxはホスト固有のMTUテーブルを保持しますか?

6番目(6-over-4)ルーターを含むIPv6ルーティングを試していますが、イーサネットを介してプライマリIPv6を実行しているルーティングセグメントに収まるほど小さいパケットサイズを使用する場合、パケットサイズが十分に小さい場合、ルーティングセグメントが大きすぎてIPv4がIPv6カプセル化に対応できない場合(つまり、1481〜1500バイト)、パケットが断片化されていない限り、パスを通過できません。応答ホストがルーティング側の6番目のルーターからPacket Too Bigエラーを受信すると、応答の断片化が始まり、しばらく続行します。

ただし、ICMPv6 はステートレスであるため、Linux には、ある期間、ターゲット ホストの大きすぎるパケット メッセージの MTU 値を格納するテーブルがどこかにあることを意味します。そうですか?それでは、この表を何とか見ることができますか?ipこのコマンドのさまざまなサブコマンドを見ましたが、似たようなものが見つかりませんでした。この表はUDPのようなプロトコルのものですか、それともICMPv6に固有のものですか?

答え1

Linuxは、検索されたMTUがターゲットに接続できるインターフェイスのMTUよりも低い場合、ルートMTU検索(RFC 1191)を介して学習されたリモートターゲットのMTUをキャッシュします。

キャッシュを表示するには、「ip ルート表示キャッシュ」を使用できます。たとえば、次のようになります。

me@server:~$ ip -6 route show cache 
1234:8108:1111:111:1111:1111:ff38:57be via fe80::8243:abcd:4216:a4c0 dev eno12399np0 metric 1024 expires 35sec mtu 1280 hoplimit 64 pref medium

me@server:~$ ip route show cache
1.2.3.4 via 192.0.2.1 dev eno12399np0 
    cache expires 154sec mtu 1420 

答え2

Linux(そして他の場所でも信じています)では、MTUはリモートホストではなくインターフェイスごとに構成されています。実行して確認してください

ip a

これにより、各インターフェイスのMTU番号が表示されます。

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp6s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
    inet 10.0.42.23/24 brd 10.0.42.255 scope global enp8s0
       valid_lft forever preferred_lft forever

私の場合、loMTUは65536バイトでenp6s11500バイトです。

関連情報