next up previous contents
Next: 3.3 静的ルーティング Up: 3. ルーティング Previous: 3.1 経路制御が必要な理由

3.2 ルーティングとネットマスク

第2章で説明したように、IP にはクラスという概念が当初ありました。まず、 クラスを用いたルーティングについて概略を説明した後、簡単にクラスを用いない ルーティングについて説明します。

クラスには、現在の所 A,B,C,D,E の5つがあります。このようなクラスがある理由 は、TCP/IP の歴史の当初において、ルーティングを高速に行なうために少ない 情報で判断しようとした所に起源を持っています。実際、クラス A であるか否か の判断は、IP の最初のビットを見れば分かるからです。以下に、IP の最初の 5ビットとクラスの関係を掲げます。

クラス 先頭のビット
A 0
B 10
C 110
D 1110
E 11110

つまり、クラスの判別を考えるならば、先頭 4 ビットを見れば クラスの判断ができる訳です。クラスの判断ができたならば、どのネットマスクを 適用すれば良いかが分かります。ここでは、仮にクラス C である宛先 IP を考える ことにします。この宛先 IP アドレスをネット部分 X とホスト部分 Y に分けて 考えると(Xが3byte、Y が1byte になっています)。

\begin{displaymath}
\mbox{IP address} = X.Y
\end{displaymath}

これに対して、クラス C のネットマスク 255.255.255.0(/24) でマスクします。

\begin{displaymath}
\mbox{dest net address} = X.Y \;\; \& \;\; 255.255.255.0
\end{displaymath}

結果の dest net address は、X.0 となります。これで、ネット部分が取り出せたので、 後はテーブルと比較して、どこに送出するかを決定するわけです。

ドメイン内部では、このマスクの情報を自分たちの都合の良いように、個々のルータ に覚えさせる事ができるので、ホスト部分の 4bit をネット部分と考える ような設定をしても構いません。つまり、外部からはクラス C としてルーティング されてきた IP パケットを、内部では以下のように考え直します。 ここでは、ホスト部分 Y を前半の 4 bit Y1 と後半の 4bit Y2 に分けて、 Y1_Y2 と表記します。 つまり、

\begin{displaymath}
\mbox{IP address} = X.Y1\_Y2
\end{displaymath}

です。 これに対して、通常のクラスフル・ルーティングアルゴリズムを適用した結果は、 ネット部が X.0 である事が分かり、X.0 はサブネットに切っている事を知っている ので、改めて 255.255.255.240 ($ 240=11110000$ binary, /28) が適用されて、

\begin{displaymath}
\mbox{dest net address} = X.Y1\_Y2 \;\; \&\;\; 255.255.255.240
\end{displaymath}

結果の dest net address は、X.Y1_0 となる訳です。後は、クラスフルの場合と 同じくテーブルと比較することで送出先が決定されます。

クラスフルとクラスレスのルーティングの最大の違いは上に述べた通りですが、 実際にはクラスフルであっても、一致するネット部の行き先がない場合には デフォルトルーティング(0.0.0.0のマスク、つまりは/0)を適用します。 これに対して、クラスレスルーティングではマスクの長い順にテーブルと比較を し、一致しなければ順にマスクを短くしてテーブル比較をする訳です。

一方、こうしたルーティングではインターネットの拡大に伴いルーティング・ テーブルが肥大化すると共に、最低でもクラス C での配置となるのでアドレス 空間に無駄が生じます。これを短期的に解決する方策として登場したのが、 CIDR(Classless Inter-Domain Routing) です。CIDR では、クラスの概念を 廃止し、アドレスとマスクの対によって実現する方法です。ルーティング 情報に関しては、例えば、クラス C 16個を束ねる場合、そのクラスが 202.11.16 から 202.11.31 までであったとすると、3byte 目(16〜31)は 2進法で表記すると、

\begin{displaymath}
0001\;\;0000 〜 0001\;\;1111
\end{displaymath}

となります。そこで、先頭 4bit までをマスクして、

\begin{displaymath}
202.11.16.0/20
\end{displaymath}

をネットワークアドレスとして考えます。 つまり、202.11.(0001) までをネット部分であると考えるわけです。 これによって、クラスフル・ルーティングならば 16個のテーブルを持たなければ ならなかったのが、1個のテーブルで代用できる訳です。勿論、どこかのルータ でこれを小分けにしなければなりませんが、中央のルータに関してだけ言えば、 ルーティングテーブルは飛躍的に小さくなります。

次に、アドレス空間ですが、CIDR のようにマスクを一般に採用すれば、従来の ようにクラス C のサブネット以上に細かい IP の付与が可能になります( 勿論、制約はありますが)。



Noriyo Kanayama