TCP パス MTU ディスカバリー
AIX® では、TCP パス MTU 検出プロトコル オプションがデフォルトで有効になっています。このオプションにより、プロトコル スタックは、現在 2 つのホスト間のパスにあるネットワーク上の最小 MTU サイズを判別できます。このオプションは、 tcp_pmtu_discover=1 ネットワーク オプションによって制御されます。
TCP パス MTU ディスカバリーの実装には、ICMP ECHO メッセージではなく、接続そのものの TCP パケットが使用されます。 TCP/IP カーネル・エクステンションは、PMTU ディスカバリー関連情報を保管するための、PMTU テーブルというテーブルを維持します。 宛先への TCP 接続が確立されると、PMTU テーブルにその宛先のエントリーが作成されます。 PMTU 値は、発信インターフェースの MTU 値です。
TCP パケットは、IP ヘッダーの「Don't Fragment」(DF) ビットを設定して送信されます。 MTU 値が TCP パケットのサイズより小さいネットワーク・ルーターに TCP パケットが到達した場合、そのルーターは、フラグメント化できないためにメッセージを転送できないことを示す ICMP エラー・メッセージを送り返します。 エラー・メッセージを送信するルーターがコンパイルに RFC 1191 を使用していれば、ICMP エラー・メッセージにネットワークの MTU 値が含められます。 そうでない場合、TCP パケットを再送するには、 AIX TCP/IP カーネル・エクステンション内の既知の MTU 値のテーブルから、より小さい MTU サイズの値を割り当てる必要があります。 それから PMTU テーブル内の宛先の PMTU 値が、小さくした新しい MTU サイズに更新され、TCP パケットが再送されます。 以降のその宛先への TCP 接続では、更新された PMTU 値が使用されます。
# pmtu display
dst gw If pmtu refcnt redisc_t exp
-------------------------------------------------------------------------
10.10.1.3 10.10.1.5 en1 1500 2 9 0
10.10.2.5 10.10.2.33 en0 1500 1 0 0
使われていない PMTU エントリー (値が 0 の refcnt エントリー) は、PMTU テーブルが大きくなるのを防ぐために削除されます。 未使用のエントリーは、 refcnt 値が 0 になってから pmtu_expire 分後に削除されます。 pmtu_expire ネットワーク・オプションのデフォルト値は 10 分です。 PMTU エントリーが期限切れにならないようにするには、pmtu_expire 値を 0 に設定します。
この TCP パス MTU ディスカバリーのインプリメンテーションでは、経路のクローン作成は不要です。このことは、経路指定テーブルが小さくなり管理しやすくなることを意味します。