サブネット化と no コマンドの subnetsarelocal オプション

no コマンドの subnetsarelocal オプションを使用して、TCP がリモート・エンドポイントをローカル (同じネットワーク上) またはリモートと見なすタイミングを制御できます。

サブネット化することによって、同じネットワーク番号を共有するには、 幾つかの物理ネットワークを作成します。 subnetsarelocal オプションは、 システム全体にわたって、サブネットがローカル・ネットワークであるかリモート・ネットワークであるかを指定します。 no -o subnetsarelocal=1 コマンド (デフォルト) を使用すると、サブネット 1 上のホスト A は、サブネット 2 上のホスト B を同じ物理ネットワーク上にあると見なします。

結果として、ホスト A とホスト B が接続を確立するときに、同じネットワーク上にあるものとして MSS をネゴシエーションします。 各ホストは、そのネットワーク・インターフェースの MTU に基づいた MSS を通知するので、通常は最適な MSS が選択されることになります。

この方法の利点は、次のとおりです。

  • 静的割り当ての必要がない。MSS は自動的にネゴシエーションされます。
  • 隣接するサブネット間の MTU の小さな相違点が適切に処理されるようにするため、TCP MSS のネゴシエーションを使用不可にしたり、 変更したりしない。

この方法の欠点は、次のとおりです。

  • 2 つの MTU が大きいネットワークが MTU の小さいネットワークを介してリンクされると、IP ルーターのフラグメント化が起きる可能性がある。 次の図は、この問題を示しています。
    図1: サブネット間のフラグメント化。 この図に示したデータ・パスは、ホスト A から MTU=4352 の FDDI を経由し、 ルーター 1 を経由して、MTU=1500 のイーサネットに至ります。 そこからデータ・パスはルーター 2 に進み、他の MTU=4352 の FDDI に進み、ホスト B に到達します。この例でどのようにフラグメント化が起きるかについては、図のすぐ下の本文で説明します。
    サブネット間でのフラグメント化
  • このシナリオでは、ホスト A と B が、共通の 4352 という MTU に基づいて接続を確立する。 A から B へ送られるパケットは、 ルーター 1 によって分割され、ルーター 2 によって再組み立てされます。 B から A へ送られるときは、これが逆になります。
  • 送信元と宛先がどちらも、サブネットをローカルと見なす。
注: tcp_pmtu_discover 値が 1 の場合、MSS 値は発信インターフェース MTU に基づいて計算されます。 subnetsarelocal 値が考慮されるのは、tcp_pmtu_discover ネットワーク・オプション値が 0 の場合のみです。