IPアドレスのスラッシュ表記(CIDR)の意味とは?基礎から徹底解説
インターネットは、世界中の無数のコンピューターやデバイスが相互に通信することで成り立っています。この通信を可能にしているのが、それぞれの機器に割り当てられた「住所」にあたるIPアドレスです。IPアドレスは、情報をどこに送るか、どこから情報が来たのかを特定するために不可欠な情報です。
初期のインターネットでは、IPアドレスは比較的単純なルールに基づいて管理されていました。しかし、インターネットが爆発的に普及するにつれて、そのルールには限界が見えるようになります。その限界を克服し、現在の柔軟かつ効率的なネットワークを実現するために導入されたのが、「サブネット化」という考え方、そしてそれをさらに発展させた「CIDR(Classless Inter-Domain Routing)」です。
この記事では、IPアドレスの基本的な仕組みから、なぜサブネット化やCIDRが必要になったのか、そして現代のネットワーク設計に不可欠なCIDR(スラッシュ表記)が具体的に何を意味するのかを、豊富な計算例を交えながら基礎から徹底的に解説します。
この記事を読めば、
- IPアドレスがどのように構成されているか
- ネットワーク部とホスト部の違い
- 過去のクラスフルアドレッシングの課題
- サブネットマスクの役割
- CIDR(スラッシュ表記)の意味するところ
- CIDR表記からネットワーク範囲やホスト数を計算する方法
- CIDRがネットワークに与えるメリット
といった、ネットワークの基礎から応用までにつながる重要な知識を習得できます。さあ、IPアドレスとCIDRの世界を深く探求していきましょう。
1. IPアドレスの骨格:IPv4アドレスの構造と表現
まず、現在でも広く使われているIPv4アドレスの基本的な構造から見ていきます。IPv4アドレスは、32ビットの二進数で表現される数値です。32ビットというのは、0か1かの情報が32個並んだものです。
例:11000000 10101000 00000001 00000001
(これはあるIPアドレスの二進数表現です)
この32ビットの羅列では人間には非常に扱いにくいため、一般的には「ドット区切り10進数表記」という形式が使われます。これは、32ビットを8ビットずつ4つのまとまりに区切り、それぞれの8ビットの値を10進数に変換し、ドット(.)で区切って表示する形式です。この8ビットのまとまりを「オクテット (Octet)」と呼びます。
各オクテットは8ビットなので、表現できる値は2^8 = 256通りです。二進数の 00000000
が10進数の0、11111111
が10進数の255に対応します。したがって、ドット区切り10進数表記のIPアドレスは、0から255までの4つの数値がドットで区切られた形式になります。
例:前述の二進数 11000000 10101000 00000001 00000001
をドット区切り10進数に変換してみましょう。
- 最初のオクテット
11000000
:12^7 + 12^6 + 02^5 + 02^4 + 02^3 + 02^2 + 02^1 + 02^0 = 128 + 64 = 192 - 2番目のオクテット
10101000
:12^7 + 02^6 + 12^5 + 02^4 + 12^3 + 02^2 + 02^1 + 02^0 = 128 + 32 + 8 = 168 - 3番目のオクテット
00000001
:02^7 + … + 12^0 = 1 - 4番目のオクテット
00000001
:02^7 + … + 12^0 = 1
したがって、この二進数IPアドレスは 192.168.1.1
となります。
IPv4アドレスは32ビットで表現されるため、約43億個(2^32)のアドレスを割り当てることができます。一見非常に多いように思えますが、インターネットに接続されるデバイス(パソコン、スマートフォン、サーバー、ルーター、IoT機器など)の数が爆発的に増加した現在では、このアドレス空間は枯渇しつつあります。これが、IPv6という新しい規格(128ビットアドレス)が登場した大きな理由の一つですが、この記事ではまずIPv4を深く掘り下げます。
2. ネットワークとホストを分ける考え方:ネットワーク部とホスト部
IPアドレスは、単なる機器を識別するためのユニークな番号ではありません。それは、その機器がどの「ネットワーク」に所属しているかと、そのネットワーク内でその機器がどのような「識別番号」を持っているかという、二つの情報を組み合わせたものです。この二つの情報が、「ネットワーク部」と「ホスト部」です。
- ネットワーク部 (Network Portion / Network ID): そのIPアドレスが所属するネットワーク全体を識別する部分です。同じネットワークに所属するすべてのデバイスは、IPアドレスのネットワーク部が共通しています。
- ホスト部 (Host Portion / Host ID): そのネットワーク内で、個々のデバイス(ホスト、インターフェース)を識別する部分です。同じネットワーク部を持つアドレスブロックの中で、ホスト部はそれぞれのデバイスにユニークに割り当てられます。
なぜこのように分かれているのでしょうか?それは、インターネット上のルーターが効率的に通信を転送するためです。ルーターは、パケット(データの小さな塊)を受け取ると、その宛先IPアドレスを見て、パケットを次にどのネットワークに転送すれば良いかを判断します。この判断は、IPアドレス全体の個々のホストを見ているのではなく、IPアドレスの「ネットワーク部」を見て行われます。
例えるなら、郵便の住所のようなものです。「東京都千代田区千代田1-1」という住所があったとき、郵便局はまず「東京都」を見て東京に運び、次に「千代田区」を見て千代田区の郵便局に運び、最後に「千代田1-1」を見て具体的な建物やポストに配達します。IPアドレスも同様に、ルーターはまずネットワーク部を見て大まかな経路を決定し、そのネットワークに到着したパケットは、ホスト部を見て最終的な宛先デバイスに届けられるのです。
同じネットワーク部に属するデバイス間では、ルーターを介さずに直接通信できます(厳密にはスイッチなどを介します)。異なるネットワーク部に属するデバイス間での通信には、必ずルーターが必要になります。
3. 過去の遺産:クラスフルアドレッシングの世界
インターネットの初期、IPアドレスのネットワーク部とホスト部の境界は、IPアドレスの先頭ビットによって「クラス」として固定的に定められていました。これが「クラスフルアドレッシング (Classful Addressing)」です。主なクラスはA、B、Cの三つでした。
-
クラスA:
- 先頭ビットが
0
で始まるアドレス。 - アドレス範囲:
0.0.0.0
~127.255.255.255
- 二進数で見ると、最初の8ビットがネットワーク部、続く24ビットがホスト部として扱われます。
- デフォルトのネットワーク部ビット長: 8ビット
- デフォルトのホスト部ビット長: 24ビット
- ネットワーク数: 2^7 = 128 個(先頭ビット0は固定、
0xxxxxxx
.…となるため、00000000
~01111111
の範囲。ただし、いくつかの予約済みアドレス空間があるため、実際に使える数はそれより少ない) - 1つのネットワークに収容できるホスト数: 2^24 – 2 = 約1670万個(ホスト部すべて0がネットワークアドレス、ホスト部すべて1がブロードキャストアドレスとして予約されているため、-2となります。この理由は後述します)
- 超大規模ネットワーク向けに設計されていました。
- 先頭ビットが
-
クラスB:
- 先頭ビットが
10
で始まるアドレス。 - アドレス範囲:
128.0.0.0
~191.255.255.255
- 二進数で見ると、最初の16ビットがネットワーク部、続く16ビットがホスト部として扱われます。
- デフォルトのネットワーク部ビット長: 16ビット
- デフォルトのホスト部ビット長: 16ビット
- ネットワーク数: 2^14 = 約16000 個(先頭ビット10は固定、
10xxxxxx xxxxxxxx
.…となるため) - 1つのネットワークに収容できるホスト数: 2^16 – 2 = 65534 個
- 大規模~中規模ネットワーク向けに設計されていました。
- 先頭ビットが
-
クラスC:
- 先頭ビットが
110
で始まるアドレス。 - アドレス範囲:
192.0.0.0
~223.255.255.255
- 二進数で見ると、最初の24ビットがネットワーク部、続く8ビットがホスト部として扱われます。
- デフォルトのネットワーク部ビット長: 24ビット
- デフォルトのホスト部ビット長: 8ビット
- ネットワーク数: 2^21 = 約200万 個(先頭ビット110は固定、
110xxxxx xxxxxxxx xxxxxxxx
.…となるため) - 1つのネットワークに収容できるホスト数: 2^8 – 2 = 254 個
- 小規模ネットワーク向けに設計されていました。
- 先頭ビットが
-
クラスD:
- 先頭ビットが
1110
で始まるアドレス。 - アドレス範囲:
224.0.0.0
~239.255.255.255
- マルチキャスト通信(特定のグループ全体に同時にデータを送信する通信)に使用されます。個々のホストに割り当てるアドレスではありません。
- 先頭ビットが
-
クラスE:
- 先頭ビットが
1111
で始まるアドレス。 - アドレス範囲:
240.0.0.0
~255.255.255.255
- 実験用や将来のために予約されており、現在のインターネットでは使用されません。
- 先頭ビットが
クラスフルアドレッシングでは、IPアドレスを見ただけで(特に最初のオクテットを見れば)、そのアドレスがクラスA, B, Cのどれに属するかが分かり、自動的にネットワーク部とホスト部の境界が決まりました。例えば、10.1.1.1
はクラスA(10は0~127の範囲)、172.16.1.1
はクラスB(172は128~191の範囲)、192.168.1.1
はクラスC(192は192~223の範囲)と判断できます。
4. クラスフルアドレッシングの限界と問題点
クラスフルアドレッシングはシンプルで分かりやすい仕組みでしたが、インターネットの急速な発展とともに深刻な問題を引き起こしました。
-
IPアドレスの割り当て効率の悪さ:
- クラスAネットワークは、1つのネットワークに約1670万台ものホストを収容できます。しかし、そこまで大規模な単一ネットワークを必要とする組織はごくわずかです。多くの組織では、割り当てられたクラスAアドレス空間のごく一部しか使用せず、残りの大部分のアドレスが無駄になってしまいました。
- 逆に、クラスCネットワークはホスト数が254台しか収容できません。中規模の組織(例えば数百台のPCを持つ会社)がクラスCアドレスを割り当てられると、複数のクラスCネットワークが必要になります。これは管理の手間を増やすだけでなく、後述するルーティングの問題にもつながります。
- クラスBネットワークは65534台収容可能で、多くの組織にとって適切に見えましたが、クラスBアドレスの数はクラスAほど多くなく、すぐに枯渇の危機に瀕しました。
- このように、クラスの境界が固定されているために、組織が必要とするホスト数と割り当てられるアドレスブロックのサイズが一致せず、アドレス空間の非効率な利用が進みました。これは、限りあるIPv4アドレス空間の早期枯渇を招く大きな要因となりました。
-
ルーティングテーブルの肥大化:
- クラスフルルーティングでは、ルーターはIPアドレスのクラスを見てネットワーク部を判断し、ルーティングテーブルにそのネットワーク部に対応する経路情報を登録します。
- もしある組織が複数のクラスCネットワークを持つ場合、例えば
192.168.1.0
,192.168.2.0
,192.168.3.0
といったネットワークが割り当てられたとします。クラスフルなルーターは、これらのネットワークをそれぞれ個別の宛先としてルーティングテーブルに登録しなければなりません。ネットワークの数が増えれば増えるほど、ルーターが保持すべき経路情報が増え、ルーティングテーブルが肥大化します。 - インターネット全体で見ると、世界中の各組織が割り当てられたクラスフルなネットワークごとに経路情報が広告されるため、インターネットのバックボーンルーターのルーティングテーブルが処理能力の限界を超える勢いで増大し、インターネットのスケーラビリティに深刻な問題が生じました。
これらの問題を解決し、限りあるIPアドレス空間をより有効に活用し、インターネットのルーティング効率を向上させるための技術が必要となりました。そこで登場したのが「サブネット化」と、それを基盤とする「CIDR」です。
5. アドレス空間を賢く使う技術:サブネット化
クラスフルアドレッシングの非効率性を改善するために、まず組織の内部ネットワークで広く使われるようになった技術が「サブネット化 (Subnetting)」です。
サブネット化とは、IPアドレスの「ホスト部」の一部を「ネットワーク部」として再定義することで、一つの大きなネットワークアドレス空間を、より小さな複数のネットワーク(サブネット)に分割する手法です。
例えば、ある組織にクラスBアドレス 172.16.0.0
が割り当てられたとします。クラスフルではこれは1つのネットワーク(ホスト数65534)と見なされます。しかし、この組織内に複数の部署があり、それぞれを独立したネットワークとして管理したい場合、サブネット化を行います。
サブネット化を実現するために導入されたのが「サブネットマスク (Subnet Mask)」です。
サブネットマスクの役割
サブネットマスクは、IPアドレスと同様に32ビットの値です。二進数で表記したときに、ネットワーク部に相当するビット位置はすべて 1
に、ホスト部に相当するビット位置はすべて 0
に設定されます。
-
例:クラスCのデフォルトサブネットマスクは
255.255.255.0
です。- 二進数では
11111111.11111111.11111111.00000000
となります。 - これは、最初の24ビットがネットワーク部、最後の8ビットがホスト部であることを示しています。これはクラスCのデフォルトのネットワーク部ビット長と一致します。
- 二進数では
-
例:クラスAのデフォルトサブネットマスクは
255.0.0.0
です。- 二進数では
11111111.00000000.00000000.00000000
となります。 - 最初の8ビットがネットワーク部、続く24ビットがホスト部です。これはクラスAのデフォルトのネットワーク部ビット長と一致します。
- 二進数では
-
例:クラスBのデフォルトサブネットマスクは
255.255.0.0
です。- 二進数では
11111111.11111111.00000000.00000000
となります。 - 最初の16ビットがネットワーク部、続く16ビットがホスト部です。これはクラスBのデフォルトのネットワーク部ビット長と一致します。
- 二進数では
サブネットマスクを使うことで、IPアドレスのどの部分がネットワーク部で、どの部分がホスト部なのかを明確に区別できます。
あるIPアドレスがどのネットワーク(サブネット)に属しているかを判断するには、そのIPアドレスとサブネットマスクの間で「論理積 (AND演算)」を行います。論理積は、二つのビットが両方とも1の場合にだけ結果が1になる演算です。
IPアドレス AND サブネットマスク = ネットワークアドレス
ネットワークアドレスは、そのネットワーク(サブネット)全体を代表するアドレスであり、ホスト部のビットがすべて0のアドレスになります。このアドレスは、通常、特定のホストには割り当てられず、ネットワークを識別するために使用されます。
サブネット化では、デフォルトのサブネットマスクよりもネットワーク部を長くします。つまり、ホスト部のビットをいくつかネットワーク部として「借りる」のです。これにより、ホスト部に使えるビット数が減りますが、その分、より多くのサブネットを作成できます。
サブネット化の計算例(クラスCアドレスの場合)
例えば、クラスCアドレス空間 192.168.1.0
を割り当てられたとします。デフォルトのサブネットマスクは 255.255.255.0
(ネットワーク部24ビット、ホスト部8ビット) です。これにより、192.168.1.0
から 192.168.1.255
までの範囲で、ホスト数 2^8 – 2 = 254台のネットワークが1つできます。
これをサブネット化してみましょう。ホスト部の8ビットのうち、1ビットをネットワーク部として借ります。
- デフォルト: ネットワーク部 24ビット, ホスト部 8ビット (
. . . . . . . .
) - サブネット化 (1ビット借りる): ネットワーク部 25ビット, ホスト部 7ビット (
. . . . . . .
)
サブネットマスクは、最初の25ビットが1になります。
11111111.11111111.11111111.10000000
これを10進数に変換すると、255.255.255.128
となります。
このサブネットマスク 255.255.255.128
を使うと、元の 192.168.1.0
のネットワークアドレス空間は二つのサブネットに分割されます。ホスト部の最初の1ビットがネットワーク部として使われるため、そのビットが0の場合と1の場合でサブネットが分かれます。
-
サブネット1: ホスト部の借りたビットが0
- ネットワークアドレス:
192.168.1.0
(...0000000
– ホスト部すべて0) - ブロードキャストアドレス:
192.168.1.127
(...01111111
– 借りたビットの次からホスト部すべて1) - 利用可能なホストアドレス範囲:
192.168.1.1
~192.168.1.126
- ホスト数: 2^7 – 2 = 126台 (ホスト部7ビットなので)
- このサブネットの範囲:
192.168.1.0
から192.168.1.127
まで。
- ネットワークアドレス:
-
サブネット2: ホスト部の借りたビットが1
- ネットワークアドレス:
192.168.1.128
(...10000000
– 借りたビットが1、残りのホスト部すべて0) - ブロードキャストアドレス:
192.168.1.255
(...11111111
– 借りたビットが1、残りのホスト部すべて1) - 利用可能なホストアドレス範囲:
192.168.1.129
~192.168.1.254
- ホスト数: 2^7 – 2 = 126台 (ホスト部7ビットなので)
- このサブネットの範囲:
192.168.1.128
から192.168.1.255
まで。
- ネットワークアドレス:
このように、サブネット化によって、元の1つのネットワーク (192.168.1.0/24
) を、より小さな2つのネットワーク (192.168.1.0/25
と 192.168.1.128/25
) に分割できました。
ネットワークアドレスとブロードキャストアドレスについて:
- ネットワークアドレス: サブネット内でホスト部がすべて0のアドレスです。これはネットワーク自体を識別するために予約されており、特定のホストには割り当てられません。
- ブロードキャストアドレス: サブネット内でホスト部がすべて1のアドレスです。このアドレス宛に送信されたパケットは、そのサブネット内のすべてのホストに届けられます。これも特定のホストには割り当てられません。
これが、ホスト数計算で「2^H – 2」とネットワークアドレスとブロードキャストアドレスの2つを引く理由です(Hはホスト部のビット数)。
さらに多くのサブネットを作成することも可能です。例えば、ホスト部の8ビットのうち2ビットをネットワーク部として借りると、サブネットマスクは 11111111.11111111.11111111.11000000
、つまり 255.255.255.192
になります。これにより、2^2=4つのサブネットが作成できます。各サブネットのホスト部ビット数は6ビットになるため、ホスト数は2^6-2=62台になります。
このように、サブネット化は組織内のネットワークを効率的に分割・管理するための強力な手段でした。しかし、これは主に組織内部の話であり、インターネット全体のルーティング効率の問題(ルーティングテーブルの肥大化)は解決できませんでした。クラスフルなルールでは、ルーターはあくまでクラスの境界 (/8
, /16
, /24
) でしか経路集約できなかったからです。
6. クラスの壁を越える革新:CIDR(Classless Inter-Domain Routing)の誕生
サブネット化の考え方をさらに発展させ、インターネット全体のルーティング効率を改善するために開発されたのが、CIDR(Classless Inter-Domain Routing)です。CIDRは1993年に標準化され、インターネットの基盤技術として広く採用されています。
CIDRの最も重要なポイントは、「クラスレス (Classless)」であることです。これは、IPアドレスのクラスA, B, Cといった固定的な概念を廃止し、ネットワーク部とホスト部の境界を、クラスの境界に縛られずに任意のビット位置で定義できるようにしたことを意味します。
CIDRでは、IPアドレスのネットワーク部の長さを明示的に示すために、IPアドレスの後にスラッシュ(/)と数字を付け加える表記法が導入されました。これが「スラッシュ表記」あるいは「CIDR表記」と呼ばれるものです。
例:192.168.1.0/24
例:10.0.0.0/8
例:172.16.0.0/16
例:192.168.1.32/27
7. CIDR表記法の核心:スラッシュの後の数字の意味
CIDR表記におけるスラッシュ(/)の後の数字は、そのIPアドレスブロックのネットワーク部のビット長、またはプレフィックス長を示します。
例:192.168.1.0/24
の場合、/24
はネットワーク部が最初の24ビットであることを意味します。
これは、サブネットマスクの二進数表現で、左から数えて指定された数だけ1が並び、残りがすべて0であることと同じです。
-
/24
は、ネットワーク部が24ビットなので、サブネットマスクは二進数で左から24個の1が並びます。
11111111.11111111.11111111.00000000
これを10進数に変換すると、255.255.255.0
となります。これはクラスCのデフォルトサブネットマスクと同じですね。 -
/16
は、ネットワーク部が16ビットなので、サブネットマスクは二進数で左から16個の1が並びます。
11111111.11111111.00000000.00000000
これを10進数に変換すると、255.255.0.0
となります。これはクラスBのデフォルトサブネットマスクと同じです。 -
/8
は、ネットワーク部が8ビットなので、サブネットマスクは二進数で左から8個の1が並びます。
11111111.00000000.00000000.00000000
これを10進数に変換すると、255.0.0.0
となります。これはクラスAのデフォルトサブネットマスクと同じです。
このように、CIDR表記はサブネットマスクの情報をより簡潔に表現するだけでなく、クラスの境界(8, 16, 24ビット)に縛られずに、任意の1から32までの数字を使ってネットワーク部の長さを指定できます。
例えば、/25
という表記は、ネットワーク部が25ビットであることを示し、サブネットマスク 255.255.255.128
に対応します。/27
ならネットワーク部が27ビット、サブネットマスク 255.255.255.224
に対応します。
重要なのは、クラスフルアドレッシングのようにIPアドレスを見ただけではクラスが判断できない(クラスレス)ため、IPアドレスとスラッシュ表記(ネットワーク部のビット長)は常にセットで扱われるという点です。192.168.1.10
というIPアドレスだけでは、それが /24
のネットワークの一部なのか、/25
のネットワークの一部なのか、あるいは /26
の一部なのかは分かりません。ネットワークを正確に識別するためには、192.168.1.10/24
のように、ネットワーク部ビット長が明記される必要があります。
8. CIDRブロックの計算と理解:IPアドレス範囲とホスト数
CIDR表記が与えられたとき、そのネットワークブロック(CIDRブロック)に含まれるIPアドレスの範囲、ネットワークアドレス、ブロードキャストアドレス、そして利用可能なホスト数を計算できるようになることは非常に重要です。ここでは、具体的な計算例を通して理解を深めます。
計算のステップは以下の通りです。
- 対象のIPアドレス(通常はネットワークアドレスの最初のIPアドレスが使われることが多いですが、ブロック内の任意のアドレスでも計算できます)とスラッシュの後の数字(ネットワーク部ビット長 /n)を確認します。
- IPアドレスを32ビットの二進数に変換します。
- スラッシュの後の数字
/n
で示される位置で、ネットワーク部とホスト部を区切ります(左からnビットがネットワーク部、残りの 32-n ビットがホスト部)。 - ネットワークアドレスを計算します。これは、元のIPアドレスのネットワーク部はそのままに、ホスト部のビットをすべて
0
にしたアドレスです。 - ブロードキャストアドレスを計算します。これは、元のIPアドレスのネットワーク部はそのままに、ホスト部のビットをすべて
1
にしたアドレスです。 - 利用可能なホストアドレス範囲は、ネットワークアドレスの次のアドレスから、ブロードキャストアドレスの直前のアドレスまでです。
- 利用可能なホスト数は、ホスト部のビット数を H (= 32-n) とすると、2^H – 2 で計算できます(ネットワークアドレスとブロードキャストアドレスを除くため)。ただし、
/31
と/32
の場合は例外です(後述)。
では、いくつかの計算例を見ていきましょう。
計算例1:192.168.1.0/24
- 対象IPアドレス:
192.168.1.0
- ネットワーク部ビット長:
/24
-
ホスト部ビット長: 32 – 24 = 8ビット
-
IPアドレスを二進数に変換:
192.168.1.0
->11000000.10101000.00000001.00000000
- ネットワーク部とホスト部を区切る (/24なので最初の24ビット):
[11000000.10101000.00000001].00000000
ネットワーク部:11000000.10101000.00000001
(24ビット)
ホスト部:00000000
(8ビット) - ネットワークアドレス: ホスト部をすべて0にする
11000000.10101000.00000001.00000000
->192.168.1.0
- ブロードキャストアドレス: ホスト部をすべて1にする
11000000.10101000.00000001.11111111
->192.168.1.255
- 利用可能なホストアドレス範囲: ネットワークアドレスの次からブロードキャストアドレスの前まで
192.168.1.1
~192.168.1.254
- 利用可能なホスト数: ホスト部8ビットなので 2^8 – 2 = 256 – 2 = 254台
これはクラスCのデフォルトネットワークと同じです。
計算例2:192.168.1.32/27
ここでは、ネットワークアドレスが192.168.1.32
であるとは限りません。このアドレスが/27
のネットワークブロック内の任意のアドレスであるとして、そのブロックの情報を計算します。
- 対象IPアドレス:
192.168.1.32
- ネットワーク部ビット長:
/27
-
ホスト部ビット長: 32 – 27 = 5ビット
-
IPアドレスを二進数に変換:
192.168.1.32
->11000000.10101000.00000001.00100000
- ネットワーク部とホスト部を区切る (/27なので最初の27ビット):
[11000000.10101000.00000001.001]00000
ネットワーク部:11000000.10101000.00000001.001
(27ビット)
ホスト部:00000
(5ビット) - ネットワークアドレス: ホスト部をすべて0にする
ネットワーク部はそのままで、ホスト部5ビットを00000
にする。
11000000.10101000.00000001.00100000
->11000000.10101000.00000001.00100000
これは元のIPアドレスのホスト部がすでにすべて0になっているので、ネットワークアドレスは192.168.1.32
です。 - ブロードキャストアドレス: ホスト部をすべて1にする
ネットワーク部はそのままで、ホスト部5ビットを11111
にする。
11000000.10101000.00000001.00111111
二進数の最後のオクテット00111111
を10進数に変換: 0128 + 064 + 132 + 116 + 18 + 14 + 12 + 11 = 32+16+8+4+2+1 = 63
ブロードキャストアドレスは192.168.1.63
- 利用可能なホストアドレス範囲: ネットワークアドレスの次からブロードキャストアドレスの前まで
192.168.1.33
~192.168.1.62
- 利用可能なホスト数: ホスト部5ビットなので 2^5 – 2 = 32 – 2 = 30台
この例からわかるように、CIDR表記ではネットワークアドレスは必ずしもオクテットの境界で始まるわけではありません。/27
のネットワークは、192.168.1.0/24
のような大きなブロックをさらに細かく分割したサブネットの一つである可能性が高いです。
計算例3:172.30.10.64/26
- 対象IPアドレス:
172.30.10.64
- ネットワーク部ビット長:
/26
-
ホスト部ビット長: 32 – 26 = 6ビット
-
IPアドレスを二進数に変換:
172.30.10.64
->10101100.00011110.00001010.01000000
- ネットワーク部とホスト部を区切る (/26なので最初の26ビット):
[10101100.00011110.00001010.01]000000
ネットワーク部:10101100.00011110.00001010.01
(26ビット)
ホスト部:000000
(6ビット) - ネットワークアドレス: ホスト部をすべて0にする
ネットワーク部そのまま、ホスト部6ビットを000000
に。
10101100.00011110.00001010.01000000
->172.30.10.64
(このアドレスはすでにホスト部がすべて0になっています) - ブロードキャストアドレス: ホスト部をすべて1にする
ネットワーク部そのまま、ホスト部6ビットを111111
に。
10101100.00011110.00001010.01111111
二進数の最後のオクテット01111111
を10進数に変換: 0128 + 164 + 132 + 116 + 18 + 14 + 12 + 11 = 64+32+16+8+4+2+1 = 127
ブロードキャストアドレスは172.30.10.127
- 利用可能なホストアドレス範囲: ネットワークアドレスの次からブロードキャストアドレスの前まで
172.30.10.65
~172.30.10.126
- 利用可能なホスト数: ホスト部6ビットなので 2^6 – 2 = 64 – 2 = 62台
計算例4:203.0.113.0/30
- 対象IPアドレス:
203.0.113.0
- ネットワーク部ビット長:
/30
-
ホスト部ビット長: 32 – 30 = 2ビット
-
IPアドレスを二進数に変換:
203.0.113.0
->11001011.00000000.01110001.00000000
- ネットワーク部とホスト部を区切る (/30なので最初の30ビット):
[11001011.00000000.01110001.000000]00
ネットワーク部:11001011.00000000.01110001.000000
(30ビット)
ホスト部:00
(2ビット) - ネットワークアドレス: ホスト部をすべて0にする
11001011.00000000.01110001.00000000
->203.0.113.0
- ブロードキャストアドレス: ホスト部をすべて1にする
11001011.00000000.01110001.00000011
->203.0.113.3
- 利用可能なホストアドレス範囲: ネットワークアドレスの次からブロードキャストアドレスの前まで
203.0.113.1
~203.0.113.2
- 利用可能なホスト数: ホスト部2ビットなので 2^2 – 2 = 4 – 2 = 2台
/30
のブロックは、利用可能なホストアドレスが2つしかありません。これは、ルーター間のポイントツーポイント接続など、両端の2台のデバイスにだけIPアドレスが必要な場合によく使われます。
例外:/31と/32
/31
の場合: ホスト部1ビット (32-31=1)。ホスト数は 2^1 – 2 = 0台…ではなく、RFC 3021で、ポイントツーポイントリンク用に特別に使用が認められています。ネットワークアドレスとブロードキャストアドレスの概念を適用するとアドレスがなくなってしまうため、この2つのアドレスをそのままそれぞれの端点のホストアドレスとして使用します。例えば192.168.1.0/31
では、192.168.1.0
と192.168.1.1
がそれぞれホストに割り当てられます。/32
の場合: ホスト部0ビット (32-32=0)。これは単一のIPアドレスを指します。例えば192.168.1.1/32
は、まさに192.168.1.1
という1台のホストだけを指します。ネットワークアドレスもブロードキャストアドレスも存在せず、ホスト数は 2^0 = 1台です。これは特定のホストへのルーティングエントリやファイアウォールルールなどで使用されます。
このように、CIDR表記とホスト部のビット数によって、ネットワークブロックのサイズとホスト数が決まります。スラッシュの後の数字が大きいほど、ネットワーク部は長く、ホスト部は短くなるため、ネットワークブロックは小さくなり、収容できるホスト数も少なくなります。逆に、スラッシュの後の数字が小さいほど、ネットワーク部は短く、ホスト部は長くなるため、ネットワークブロックは大きくなり、より多くのホストを収容できます。
9. CIDRがもたらした恩恵:メリットの詳細
CIDRは、インターネットの持続的な成長に不可欠な技術であり、いくつかの重要なメリットをもたらしました。
-
IPアドレスの有効活用(アドレス枯渇の緩和):
- クラスフルアドレッシングのような固定的なクラスの境界に縛られないため、組織が必要とするホスト数に応じて、より適切なサイズのIPアドレスブロックを割り当てることが可能になりました。
- 例えば、ホストが30台必要な組織には
/27
(ホスト数30台)、60台必要な組織には/26
(ホスト数62台)、100台必要な組織には/25
(ホスト数126台)のように、無駄の少ない割り当てができます。 - これにより、割り当て済みのIPアドレス空間に対する利用効率が向上し、IPv4アドレスの枯渇を遅らせることに貢献しました。
-
ルーティングテーブルの効率化(スーパーネット化):
- CIDRによって、複数の連続した小さなネットワークブロックを、それらを包含するより大きな単一のCIDRブロックとしてルーティングテーブルに登録できるようになりました。これを「ルート集約」または「スーパーネット化 (Supernetting)」と呼びます。
- 例えば、あるプロバイダが顧客に
203.0.113.0/24
,203.0.114.0/24
,203.0.115.0/24
, …,203.0.127.0/24
といった連続する複数の/24
ブロックを割り当てたとします。クラスフルなルーターはこれらを個別のルートとして登録する必要があります。しかし、CIDR対応ルーターは、これらのアドレスがすべて203.0.112.0
から203.0.127.255
の範囲に含まれることを利用し、これらを包含する単一の/20
ブロック (203.0.112.0/20
) として経路情報を広告できます。 /20
の二進数を見ると、最初の20ビットがネットワーク部です。203.0.112.0
を二進数にすると11001011.00000000.01110000.00000000
です。/20
で区切ると[11001011.00000000.0111]0000.00000000
となります。ネットワーク部は11001011.00000000.0111
です。このネットワーク部を持つアドレスの範囲は、ホスト部をすべて0にした11001011.00000000.01110000.00000000
(203.0.112.0
) から、ホスト部をすべて1にした11001011.00000000.01111111.11111111
(203.0.127.255
) までとなります。- このように、複数の
/24
ルートを1つの/20
ルートに集約することで、インターネットバックボーンのルーターが覚えるべき経路情報の数を大幅に削減できます。これは、インターネットのスケーラビリティを維持する上で極めて重要な効果をもたらしました。
-
柔軟なネットワーク設計:
- 組織は、部署、拠点、用途(サーバー用、クライアント用、VPN用など)に応じて、必要なサイズのサブネットを自由に設計・配置できるようになりました。
- 例えば、本社には少し大きめの
/22
ブロック、支店には/24
や/25
ブロック、ルーター間の接続には/30
ブロックといったように、目的に合わせて最適なアドレス空間を割り当てられます。 - これにより、ネットワークの管理が容易になり、セキュリティ境界を明確にしたり、ブロードキャストドメインを適切に分割したりといった設計上のメリットが得られます。
10. スーパーネット化のメカニズム:CIDRによるルート集約
CIDRによるスーパーネット化(ルート集約)のメカニズムをもう少し詳しく見てみましょう。
複数のネットワークブロックを一つに集約するには、それらのブロックがアドレス空間上で連続しており、かつ、集約後の大きなブロックの境界が二進数のビット境界に合っている必要があります。
例:192.168.1.0/24
, 192.168.2.0/24
, 192.168.3.0/24
の3つのネットワークを考えます。
* 192.168.1.0/24
: 11000000.10101000.00000001
.00000000 ~ 11000000.10101000.00000001
.11111111
* 192.168.2.0/24
: 11000000.10101000.00000010
.00000000 ~ 11000000.10101000.00000010
.11111111
* 192.168.3.0/24
: 11000000.10101000.00000011
.00000000 ~ 11000000.10101000.00000011
.11111111
これらのアドレス範囲を二進数で見ると、最初の22ビットまでは共通しています。
11000000.10101000.000000
xxx….
共通部分の長さは22ビットです。したがって、これら3つのネットワークを包含する一番小さいCIDRブロックは /22
になります。この/22
ブロックのネットワークアドレスは、共通の22ビットの後ろをすべて0にしたアドレスです。
11000000.10101000.00000000.00000000
-> 192.168.0.0
つまり、192.168.1.0/24
, 192.168.2.0/24
, 192.168.3.0/24
は、192.168.0.0/22
というより大きなブロックの一部に含まれます。厳密には、192.168.0.0/22
は 192.168.0.0
から 192.168.3.255
までの範囲のアドレスを含みます(ネットワークアドレス 192.168.0.0
、ブロードキャストアドレス 192.168.3.255
)。この例では、/24
が4つ(192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24)をまとめて一つの/22
として広告できます。もしプロバイダがこの4つの/24
ブロックをすべて同じ顧客や地域に割り当てているなら、インターネット上の他のルーターに対しては「192.168.0.0/22
宛てのパケットはここに送ってください」と一つの経路情報だけを広告すれば済みます。
このように、CIDRはアドレスの集約を可能にし、グローバルなルーティングテーブルの管理を現実的なものにしました。
11. ネットワーク設計におけるCIDRの実践的な利用
現代のネットワーク設計において、CIDRは欠かせないツールです。
- 企業ネットワーク: 部署や拠点ごとに必要なホスト数を予測し、それに合わせたサイズのサブネット(CIDRブロック)を割り当てます。例えば、IT部門には
/26
、営業部門には/25
、サーバー群には/24
といったように、きめ細やかなアドレス設計が可能です。これは、アドレスの無駄をなくすだけでなく、各サブネットのブロードキャストドメインを適切に制限し、ネットワークのパフォーマンスやセキュリティを向上させる効果もあります。 - データセンター: サーバーセグメント、ストレージセグメント、管理セグメントなどを明確に分け、それぞれに専用のCIDRブロックを割り当てます。これにより、トラフィックの流れを制御しやすくなり、ファイアウォールルールやアクセスリストによるセキュリティ対策を効率的に適用できます。
- ISP (Internet Service Provider): 顧客にIPアドレスブロックを割り当てる際にCIDRを使用します。小規模顧客には
/29
や/30
、大規模顧客には/24
や/22
といったブロックを割り当て、これらの顧客向けブロック全体をスーパーネットとしてまとめて上位ルーターに広告します。 - クラウド環境 (AWS VPC, Azure VNet, GCP VPCなど): クラウドプロバイダの仮想ネットワークサービスでは、ネットワークを作成する際に必ずCIDRブロックを指定します。例えばAWS VPCでは、まずVPC全体にプライベートIPアドレス空間のCIDRブロック(例:
10.0.0.0/16
)を割り当て、その中に複数のサブネット(例:10.0.1.0/24
,10.0.2.0/24
など)をCIDRブロックで区切って作成します。これにより、クラウド上でも柔軟かつ効率的なネットワーク設計が実現できます。
12. 特殊なIPアドレスブロックとCIDR
CIDR表記は、特定の用途に予約されているIPアドレスブロックを表現する際にも利用されます。
-
プライベートIPアドレス (RFC 1918): インターネット上ではルーティングされない、組織内部でのみ自由に使えるアドレス範囲です。
10.0.0.0/8
(10.0.0.0 ~ 10.255.255.255) – クラスA相当の広大な範囲172.16.0.0/12
(172.16.0.0 ~ 172.31.255.255) – クラスBの第2オクテットが16~31の範囲。これはクラスB相当の範囲をいくつかまとめて指定したものです(172.16.0.0/16 から 172.31.0.0/16 までの16個のクラスBネットワーク)。192.168.0.0/16
(192.168.0.0 ~ 192.168.255.255) – クラスC相当の範囲が256個(192.168.0.0/24 から 192.168.255.0/24 まで)をまとめて指定したものです。
これらのプライベートIPアドレス空間は、NAT (Network Address Translation) 技術と組み合わせて、限られたグローバルIPアドレスを複数のプライベートIPアドレスを持つデバイスで共有するために広く利用されています。
-
ループバックアドレス:
127.0.0.0/8
(127.0.0.0 ~ 127.255.255.255)。特に127.0.0.1
は localhost として知られ、自分自身のコンピュータを指すために使われます。これはネットワークテストやローカルサービスへの接続に利用される特別なアドレス範囲です。 -
リンクローカルアドレス:
169.254.0.0/16
(169.254.0.0 ~ 169.254.255.255)。DHCPサーバーからIPアドレスを取得できなかった場合に、WindowsなどのOSが自動的に割り当てるアドレス範囲です(APIPA: Automatic Private IP Addressing)。同じリンクローカルアドレスを持つデバイス間でのみ通信が可能です。
これらの予約済みアドレス空間も、CIDR表記によってその範囲が明確に定義されています。
13. 次世代IP、IPv6とCIDR
IPv4アドレスの枯渇問題を抜本的に解決するために開発されたIPv6は、128ビットのアドレス空間を持ちます。これにより、事実上無限と言えるほど膨大な数のアドレスが利用可能になりました。
IPv6アドレスは、IPv4のようなドット区切り10進数ではなく、16ビットずつをコロン(:)で区切り、16進数で表記されます。
例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
IPv6においても、IPv4のCIDRと同様に、アドレス空間をネットワーク部とホスト部に分割する考え方があります。IPv6ではネットワーク部は「ネットワークプレフィックス」、ホスト部は「インターフェースID」と呼ばれます。
そして、IPv4と同様にCIDR表記(スラッシュ表記)が使われます。IPv6アドレスの後にスラッシュ(/)と数字を付け、ネットワークプレフィックスのビット長を示します。
例:2001:0db8:abcd::/48
この例では、/48
がネットワークプレフィックスのビット長を示しています。128ビットのうち最初の48ビットがネットワークプレフィックス、残りの128-48=80ビットがインターフェースIDとして扱われます。
IPv6では、ISPから組織には通常 /48
や /56
といった単位でアドレス空間が割り当てられます。組織内では、その割り当てられたアドレス空間をさらにサブネット化して利用します。IPv6のサブネット化では、通常インターフェースIDの先頭64ビットをサブネットIDとして利用することが推奨されており、多くのネットワークでは /64
というプレフィックス長が標準的に使われます。これにより、ステートレスアドレス自動設定(SLAAC)などの機能が効率的に利用できます。
IPv4とIPv6のCIDR表記の基本的な考え方(スラッシュの後の数字がネットワーク部のビット長を示す)は共通しています。ただし、アドレス長が32ビットから128ビットに増えたことで、割り当てられるブロックのサイズや、一般的なプレフィックス長の値は大きく異なります。
14. よくある間違いと理解を深めるためのヒント
- スラッシュの数字とオクテット数の混同:
/24
が3つのオクテットに対応すると考えがちですが、そうではありません。/24
は「左から24ビット」を意味します。たまたま24ビットがちょうど3オクテット分なので、255.255.255.0
というオクテット境界のサブネットマスクになります。しかし、/25
は左から25ビットであり、これは3オクテットと1ビットなので、サブネットマスクは255.255.255.128
となります。スラッシュの数字は常に「ビット長」であることを意識しましょう。 - ホスト数計算での-2忘れ:
/31
や/32
の特殊な場合を除き、利用可能なホスト数は2^(ホスト部ビット数) - 2
です。ネットワークアドレスとブロードキャストアドレスはホストには割り当てられないことを忘れないようにしましょう。 - 異なるCIDRブロックは別のネットワーク: たとえIPアドレスが連続して見えても、CIDRブロックが異なればそれらは別のネットワークです。例えば、
192.168.1.0/25
と192.168.1.128/25
は、同じ192.168.1.x
という第3オクテットを持っていても、/25
という境界で見ると異なるネットワークです。これらの間を通信するにはルーターが必要です。 - 計算練習の重要性: CIDR表記からネットワークアドレス、ブロードキャストアドレス、ホストアドレス範囲、ホスト数を素早く正確に計算できるようになるためには、繰り返し練習することが一番です。様々なCIDR値やIPアドレスで計算を試みましょう。二進数と10進数の相互変換にも慣れておくと理解が深まります。
15. まとめ:現代ネットワークにおけるCIDRの重要性
IPアドレスのスラッシュ表記、すなわちCIDRは、現代のIPネットワークにおいて基礎中の基礎であり、同時に非常に重要な概念です。
- クラスフルアドレッシングの限界(アドレス枯渇、ルーティングテーブル肥大化)を克服するために導入されました。
- 「クラスレス」であることにより、IPアドレスのネットワーク部とホスト部の境界を任意のビット長で定義できるようになりました。スラッシュの後の数字がそのビット長を示します。
- これにより、組織は必要なホスト数に応じて柔軟かつ効率的にIPアドレス空間を利用(サブネット化)できるようになり、IPアドレスの枯渇を遅らせることができました。
- 複数の小さなネットワークを一つの大きなアドレスブロックとして扱うスーパーネット化(ルート集約)を可能にし、インターネット全体のルーティング効率を大幅に向上させました。
- 企業ネットワーク設計、データセンター構築、ISPの運用、そして現在のクラウド環境におけるネットワーク設計(VPCやサブネットの定義)など、あらゆる場面でCIDRは不可欠な技術として活用されています。
IPアドレス、サブネット化、そしてCIDRは密接に関連した概念です。これらをセットで理解することで、なぜ現在のネットワークがこのような仕組みになっているのか、なぜ特定のIPアドレス構成が採用されるのかといった点がクリアになります。
ネットワークエンジニア、サーバーエンジニア、クラウドインフラ担当者など、ネットワークに関わるすべての技術者にとって、CIDRを正確に理解し、使いこなせることは必須スキルと言えます。この記事が、その理解の一助となれば幸いです。
インターネットは今も進化を続けており、IPv6への移行も進んでいます。しかし、IPv4とそれに付随するCIDRの知識は、既存の多くのシステムやネットワークを理解し、運用していく上でまだまだ非常に重要です。
ぜひ、ここで学んだ知識を活かして、さらなるネットワークの探求を進めてください。