可変長サブネットマスク

可変長サブネットマスク

 XYZ 社が InterNIC から 160.6.0.0 というネットワークを割り当てられているとします。 世界中のネットワークから見ると、この会社のネットワークは 160.6.0.0 になりますが、XYZ 社内部では、そうではありません。 内部では可変長サブネットマスク( Variable Length Subnet Masks )を使ってネットワークを階層化しているかもしれません。

 VLSM という用語は木構造ネットワークをさらに細かいサブネットにするために使われます。 XYZ 社はいろいろな場所にたくさん事務所をもっており、それは全部で 23 分野にまたがります。 XYZ 社のネットワーク設計者は、255.255.252.0 というマスクを使って、ネットワークを 23 に分割することにしました。 二進数で表現すると以下のようになります。

11111111 11111111 11111100 00000000

 3番目のオクテットの6つの「1」のビットはサブネットを表します。(最初の 16 ビット分はネットワークを表します。) この 6 ビットで 64 個までのサブネットを区別することができます。ここまではどのサブネットマスクでも同じです。

 さて今、それぞれの場所にある事務所内(サイト)に、営業部、経理部、マーケティング、技術支援があるとします。 設計者はルータによってサイト内をさらに細分化したいと思っています。 ホストアドレスフィールド内に、さらにサブネット用のビットが必要にるでしょう。ここまでに問題はありません。 中央にあるメインルータには、255.255.252.0 というサブネットが設定されており、それによって地域毎の事務所を区別しています。 各地域に置かれたルータには、255.255.255.128 というサブネットが設定されています。 二進数で考えてみましょう。

メインルータ:11111111 11111111 11111100 00000000
事務所ルータ:11111111 11111111 11111111 10000000

 地域ルータには 3 ビット分がマスクとして追加されています。この 3 ビット分でさらに 7 つのサブネットを区別することができます。 ( 23 = 8 )この中の「000」と「111」は特別な値なので使用できません。予約アドレスで説明しています。 これらを各地域の事務所にある、営業部、経理部、マーケティング、技術支援に使うことができるでしょう。 次のように割り当てることができるでしょう。
営業部=001
経理部=010
マーケティング=011
技術支援=100
 ある地域の事務所に、「000011」という番号が与えられているとします。つまり、これはこの事務所のネットワークを表します。 すると、4つの部署は次のように表現されます。
営業部=000011 001 XXXXXXX
経理部=000011 010 XXXXXXX
マーケティング=000011 011 XXXXXXX
技術支援=000011 100 XXXXXXX
 「X」はそれぞれの部門のホストを識別するビットになります。この仕組みによるとビットは4つの部分に分けられているのがわかります。 ネットワーク部分( 160.6.0.0 )。サブネット部分( 000011 )。「サブ」サブネット部分( 001、010、011、100 )。そしてノード(ホスト)部分( X )です。 ルータはサブネットマスクを基本に、どのようにアドレスを分けるのかを理解しています。この例では 255.255.0.0 がそのサブネットに当たります。 会社全体では、255.255.252.0 が使われます。それぞれの地域の事務所では、255.255.255.128 が使われます。 ルータはアドレスにマスクをかけ、フレームの転送先をルーティングテーブルの中から探します。ルータが二進数で考える限り、混乱は生じません。 しかし、わたしたちは二進数では考えませんので、以下に二進数をドット付き十進数にした例を示します。
160.6.12.129=10100000 . 00000110 . 00001100 . 10000001
160.6.14.1=10100000 . 00000110 . 00001110 . 00000001
160.6.14.129=10100000 . 00000110 . 00001110 . 10000001
 ドット付き十進数では、すぐに理解することはできません。実際、二進表現を見ても、なかなかわからないものです。 サブネットマスクを理解するためには、32 ビット分を可変長マスクによって定義されたフィールドに分解する必要があります。

 まず、世界標準の 255.255.0.0 を適用してアドレスを作ってみましょう。
マスク=11111111 . 11111111 . 00000000 . 00000000
160.6.12.129=10100000 . 00000110 . 00001100 . 10000001
--------------------------------------------------
結果=10100000 . 00000110 . 00000000 . 00000000
 上の例の3つのアドレスがマスク適用後、すべて 160.6.0.0 になることがわかります。 インターネットから見たら、同じネットワークであると言うことです。 では、後ろの 16 ビット分だけについて考えてみましょう(この3つの場合、最初の 16 ビット分は同じであることがわかっているからです)。

 事務所ルータは 255.255.252.0 というマスクを使います。252.0 の部分を考えてみましょう。マスクは次のようになります。
マスク=11111100 . 00000000
(160.6).12.129=00001100 . 10000001
(160.6).14.1=00001110 . 00000001
(160.6).14.129=00001110 . 10000001
 3つとも、マスク適用後のビットパターンの中に、「000011」という部分があるのがわかりますか? これは事務所ルータ( 255.255.252.0 というマスク値を使用します)が、ルーティングテーブルに従って、この3つのアドレスを同じ方向に向けるということを意味しています。

 階層の最後のルータはマスク 255.255.255.128 を使用します。次に例を示します。
マスク=11111111 . 10000000マスク適用後
(160.6).12.129=00001100 . 10000001-->00001100 . 10000000
(160.6).14.1=00001110 . 00000001-->00001110 . 00000000
(160.6).14.129=00001110 . 10000001-->00001110 . 10000000
 この最後のステップを理解することは重要なことです。マスクに含まれているビットが結果にも含まれているのがわかりますか? マスクとして使われる追加の3ビットが 255.255.252.0 から 255.255.255.128 になっているのがわかりますか? これでやっとアドレスが評価できます。4つの「サブ」サブネットが−( 001、010、011、100 )−あることがわかります。 この3ビットの真ん中が、ドット付き十進数表現のドットで区切られているからといって、惑わされてはなりません。 これが「255」以外のサブネットマスクを使うときに混乱し易い点です。 本当のフィールドはドットで区切られているのではなく、マスクビットによってフィールドが定義されるのです。

 この例では、サブネット上にある3つのステーションは「000011」というビットで始まることがわかります。 追加の3ビットが「サブ」サブネットとして残ります。(この「サブ」サブネットというのは、このページだけの用語で、 普通は階層の違いに関わらず、単に「サブネット」と呼びます。)この3ビットは以下のようになります(明確にするために以下に繰り返します。)
マスク=11111111 . 10000000マスク適用後
(160.6).12.129=00001100 . 10000001-->000011 [00 . 1] 0000000
(160.6).14.1=00001110 . 00000001-->000011 [10 . 0] 0000000
(160.6).14.129=00001110 . 10000001-->000011 [10 . 1] 0000000
 設計書と比べてみましょう。
営業部=000011 001 XXXXXXX
経理部=000011 010 XXXXXXX
マーケティング=000011 011 XXXXXXX
技術支援=000011 100 XXXXXXX
 160.6.14.129 はマスク 255.255.255.128 を適用すると、101 というサブネットを持つことがわかります。 これは設計書にはないアドレスです。ここに可変長サブネットマスクの落とし穴があります。十進数では、こういうことはわかりにくいのです。