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 コマンドを使用して、PMTU エントリーの表示または削除を行えます。 以下に、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 ディスカバリーのインプリメンテーションでは、経路のクローン作成は不要です。このことは、経路指定テーブルが小さくなり管理しやすくなることを意味します。