前回は「IPアドレス」について、その表記方法・クラス分け・ネットワークへの割り当て方法について紹介しました。今回は、そのIPアドレスの約束ごとを拡張するために定められた、サブネットマスクとクラスレスの考え方を説明します。

クラス分けによるネットワーク割り当ての限界

IPアドレスのクラス「A」「B」「C」は、ネットワークの規模に合わせて3つの中から選択し、アドレス割り当てを行います。しかし、インターネットの発展とともにIPネットワークが全世界へ広がっていくと、クラスによる割り当ての限界が予想されるようになります。前回に説明したクラス分類について振り返りながら、その理由を考えてみましょう。以下の図1の「クラスとアドレスの範囲」を参照してください。

  • 図1:クラスとアドレスの範囲

    図1:クラスとアドレスの範囲

アドレスの範囲は、ネットワーク部であれば、ネットワーク部のビット数、ホスト部であればホスト部のビット数で決まります。例えば、3ビットの場合は2進数で表すと、000から111となり、これを順番に並べると図2のようになります。

  • 図2:3ビットの場合の範囲

    図2:3ビットの場合の範囲

アドレスの個数を調べたい場合、10進数に直すことで、その範囲からいくつあるかを導くことができます。3ビットであれば0~7までの8通り(8個のアドレス)であることが容易にわかります。

しかし、ビット数がもっと増えた場合はどうでしょう。クラスBのネットワーク部は16ビットありますので、00000000 00000000から11111111 11111111までとなり、10進数に直すのに少々手間がかかってしまいます。

そこで、2進数の1桁が0と1の2通りあることから、2を桁数(ビット数)分累乗することで、全部で何通りあるか(0から数えた個数)を計算することが可能になります。2ビットであれば2×2= 4(2の2乗) 、3ビットであれば2×2×2=8(2の3乗)のように計算します。これを踏まえて、各クラスのネットワーク数を確認してみましょう。

クラスAのネットワーク部は8ビットで先頭の1ビットは0固定であるため、その数は2の7乗の128個。 10進数では0~127までの範囲となります。そのうちの先頭(0)と最後(127)のネットワークは例外として割り当てできないことは前回に説明しました。

つまり、「インターネットにおいて、クラスAのネットワークは1から126までの126個しか割り当てできない」ということになります。図3で、クラスAのネットワーク部の範囲を確認してみましょう。

  • 図3:クラスAアドレスのネットワーク範囲

    図3:クラスAアドレスのネットワーク範囲

同じように考えると、クラス「B」はネットワーク部16ビットから固定の先頭2ビットを引いて、14ビット分のネットワーク数、2の14乗=16384。そこから先頭と最後のネットワーク2つ分を引いて、1万6382個、クラス「C」については24ビットから固定の先頭3ビットを引いて、21ビット分のネットワーク数、2の21乗=2097152。そこから2を引いて、209万7150個のネットワークを割り当てることができます。

  • 図4:クラスBアドレスのネットワーク範囲

    図4:クラスBアドレスのネットワーク範囲

クラス「C」は約200万個あるので、数が多いと考えがちですが、逆にホスト部については2の8乗=256から2を引いて254個しかありません(この引き算する2つ分は、前回説明したホストアドレスの例外分です)。従って、1000人の組織で1人につき1個のアドレスを割り当てる場合、クラス「C」のネットワークを使用すると少なくとも4つ必要になります。

  • 図5:クラスCアドレスのネットワーク範囲

    図5:クラスCアドレスのネットワーク範囲

現代のようにインターネットが世界中に普及する環境では、世界の人口や、利用したい企業や世帯、組織の数を想像すると、クラス「A」から「C」まで合わせても約210万個では、足りなくなることが想像できるのではないでしょうか。

「クラスレス」の考え方と「サブネットマスク」

このような、クラスによるネットワークアドレスの割り当てで生じるアドレス不足を解消するために、「ネットワーク部のビット数を自由に決めて、組織の規模に合ったアドレス範囲を割り当てたい」という考えで生まれたのが「クラスレス」です。

例えば、クラス「A」のアドレスをクラス「B」や「C」のようにたくさんのネットワークに分割できれば、もっと多くのネットワークアドレスの割り当てができると考えたわけです。

「クラスレス」の考えを実現するには、先頭のビット列によってクラス、つまりネットワーク部とホスト部の境界が決まる、という考えを捨てる必要があります。そのためには、IPアドレスとは別に、ネットワーク部とホスト部の境界を判断する方法が必要になります。

アドレスのネットワーク部とホスト部のそれぞれを何ビットとするかを表記し、それらの境界を示す方法が「サブネットマスク」です。サブネットマスクは、ネットワーク部のビットに1、ホスト部のビットに0を記載することで境界を表現します。これを、IPアドレスと同じ方法で10進数表記します。

クラスで定義されているネットワーク部とホスト部について、サブネットマスクを使って表してみましょう。図6の「各クラスにおける基本のサブネットマスク」の表を見てください。

  • 図6:各クラスにおける基本のサブネットマスク

    図6:各クラスにおける基本のサブネットマスク

クラスの考え方では、クラス「A」の場合は先頭8ビットがネットワーク部と決まっているので、サブネットマスクは 255.0.0.0となります。例えば、10.0.0.0のクラス「A」のネットワークのサブネットマスクは、255.0.0.0、172.16.0.0 のクラス「B」のネットワークのサブネットマスクは、255.255.0.0 になります。

また、サブネットマスクの表記方法にはもうひとつあり、「プレフィックス長表記」といいます。これは、ネットワーク部のビット数を“/"を付けて表すもので、通常IPアドレスに連続させて記述します。上記の例では「10.0.0.0/8」、「172.16.0.0/16」、「192.168.1.0/24」のように使用します。

サブネットマスク表記による指定で、「172.16.0.0/17」や「172.16.0.0/24」、「172.16.0.0/15」のように、ネットワーク部の境界をクラスの定義から前後にずらすことができるようになります。このようなネットワークの割り当てを「クラスレス」と呼びます。