CIDR 表記の読み方: サブネット・マスク・ホスト数
CIDR 表記の読み方を整理します。/n の意味、プレフィックスからネットマスクへの変換、利用可能なホスト数の計算、ネットワークアドレスとブロードキャストアドレスの求め方、そして /31 と /32 の特殊ケースまで扱います。
192.168.1.0/24 のような CIDR ブロックは、1 つの文字列に 2 つの事実を
詰め込んでいます。開始アドレスとプレフィックス長です。スラッシュの後ろの
数字は、ほとんどの人が読み違える唯一の部分です。それはホスト数でも、
アドレスでも、掛け合わせる 2 のべき乗でもありません。ネットワーク部として
固定される先頭ビットの個数です。残りはすべて、その 1 つの数字から導かれ
ます。CIDR (Classless Inter-Domain Routing) は RFC 4632 で定義されて
います。
/n の意味
IPv4 アドレスは 32 ビットです。プレフィックス長 /n は、先頭 n ビットが
ネットワークを識別し、ブロック内のすべてのアドレスで同じであることを表し、
残りの 32 − n ビットはホストビットとして自由に変化します。
192.168.1.0/24 は先頭 24 ビットを固定します。最初の 3 オクテット
(192.168.1) がロックされ、最後のオクテットがホスト部となって、取りうる
256 個の値を動きます。プレフィックスが大きいほど固定ビットが多く、ホスト
ビットが少なく、ブロックが小さくなります。/25 は /24 の 2 倍ではなく
半分のサイズです。ここで多くの人がつまずきます。プレフィックスを上げると、
アドレス空間は下がります。
プレフィックスからネットマスクへ
ドット 10 進のネットマスクは、プレフィックスを 32 ビットに書き下した
ものにすぎません。n 個の 1 の後に 32 − n 個の 0 が続き、4 つの
オクテットにまとめられます。
| プレフィックス | ネットマスク | ホストビット | 全アドレス |
|---|---|---|---|
/8 |
255.0.0.0 |
24 | 16,777,216 |
/16 |
255.255.0.0 |
16 | 65,536 |
/24 |
255.255.255.0 |
8 | 256 |
/25 |
255.255.255.128 |
7 | 128 |
/26 |
255.255.255.192 |
6 | 64 |
/27 |
255.255.255.224 |
5 | 32 |
/28 |
255.255.255.240 |
4 | 16 |
/29 |
255.255.255.248 |
3 | 8 |
/30 |
255.255.255.252 |
2 | 4 |
/31 |
255.255.255.254 |
1 | 2 |
/32 |
255.255.255.255 |
0 | 1 |
中途半端なオクテット値は、ビットを左から埋めた結果です。/26 は最後の
オクテットからホストビットを 2 つ奪い、6 ビットが固定されます。11000000
= 192 です。/30 はホストビットが 2 つだけ残ります。11111100 = 252 です。
ネットマスクのオクテットを手で求めるなら、固定ビットを左から 1 として
書き、変換してください。128・192・224・240・248・252・254・255 が、部分的な
オクテットが取りうる唯一の値です。
利用可能なホスト数の計算
ブロックの全アドレスは 2^(32 − n) です。通常のサブネットでは、そのうち
2 つがホストアドレスとして使えません。最初がネットワークアドレス、最後が
ブロードキャストアドレスです。したがって利用可能なホストは
2^(32 − n) − 2 です。
/24 — 2^8 = 256 全体、256 − 2 = 254 利用可能。典型的な家庭・
小規模オフィスのサブネットです。.0 がネットワーク、.255 が
ブロードキャスト、.1 から .254 までがホスト分です。
/26 — 2^6 = 64 全体、64 − 2 = 62 利用可能。/24 は /26
ブロック 4 つにきれいに分かれます (64 + 64 + 64 + 64 = 256)。各ブロックに
62 個の利用可能アドレスがあります。1 つのサブネットを 4 つの VLAN に
切り分けるときによく使います。
/30 — 2^2 = 4 全体、4 − 2 = 2 利用可能。4 つのアドレスのうち
2 つだけが使え、伝統的に両端だけにアドレスが必要な 2 台のルータ間の
ポイントツーポイントリンクに使います。「無駄になる」2 つのアドレス
(ネットワーク + ブロードキャスト) がブロックの半分であり、だからこそ
/31 が存在します。
ネットワークアドレスとブロードキャストアドレス
ネットワークアドレスはホストビットがすべて 0 のブロックで、ブロードキャスト アドレスはホストビットがすべて 1 です。2 つが一緒になって範囲を囲みます。
ある IP がどのブロックに入るかを求めるには、アドレスをネットマスクで
マスクします。192.168.1.137/26 を見てみましょう。ブロックサイズは
2^6 = 64 なので、ブロックは最後のオクテットで 64 の倍数から始まります。
.0・.64・.128・.192 です。アドレス .137 は .128 と .191 の
間に入るので、次のようになります。
- ネットワークアドレス:
192.168.1.128 - 最初の利用可能ホスト:
192.168.1.129 - 最後の利用可能ホスト:
192.168.1.190 - ブロードキャストアドレス:
192.168.1.191 - 次のブロックの開始:
192.168.1.192
近道として、当該オクテットのブロックサイズは 256 − (ネットマスクの オクテット) です。/26 なら 256 − 192 = 64 で、64 アドレスごとに
ブロックが始まることを確認できます。ネットワークアドレスは、ホストの
オクテット以下でブロックサイズの最大の倍数です。
/31 と /32: 特殊ケース
/31 はホストビットが 1 つなので 2^1 = 2 全アドレスです。通常の
ルールどおりなら、ネットワークとブロードキャストを引いた後に利用可能
ホストが 0 になり、役に立ちません。RFC 3021 は /31 をポイントツー
ポイントリンク用に再定義します。両方のアドレスがホストアドレスとして
使え、ネットワークやブロードキャストを予約しません。これにより /30 が
無駄にする 2 つのアドレスを取り戻し、これをサポートするハードウェアの
ルータ間リンクで今や標準となっています。利用可能な 2 つのアドレスが、
ちょうどリンクの 2 つの端点です。
/32 はホストビットが 0 なので 2^0 = 1 アドレスです。ブロック自体が
単一のホストです。/32 はホストルート、1 台のマシンだけにマッチする
ファイアウォールルール、ループバックアドレス、アクセスリストで見かけます。
203.0.113.5/32 はちょうど 203.0.113.5 だけを意味します。
この 2 つは「ネットワークとブロードキャストで 2 つ引く」ルールがもう 当てはまらない場所です。一般式で覆おうとせず、例外として覚えてください。
プライベート範囲
3 つの IPv4 範囲が RFC 1918 によってプライベート用に予約されており、 公開インターネットではルーティングされません。
| CIDR | 範囲 | アドレス数 |
|---|---|---|
10.0.0.0/8 |
10.0.0.0 – 10.255.255.255 |
16,777,216 |
172.16.0.0/12 |
172.16.0.0 – 172.31.255.255 |
1,048,576 |
192.168.0.0/16 |
192.168.0.0 – 192.168.255.255 |
65,536 |
172.16.0.0/12 ブロックが、人々が最もよく間違えるものです。プレフィックス
が /16 ではなく /12 なので、172.16 から 172.31 までを含みます。
172.16 1 つではなく、/16 ブロック 16 個です。3 番目のオクテットの
ニブルの固定ビット 4 つが、なぜ 255 ではなく 31 で止まるのかの理由です。
IPv6 CIDR についてのメモ
IPv6 も同じスラッシュ表記を使いますが、アドレスが 32 ビットではなく
128 ビットなので、ホスト数の計算はスケールがまったく変わります。典型的な
エンドサイトのサブネットは /64 で、ホストビットが 64 個残ります。
2^64、単一サブネットにおよそ 1,800 京個のアドレスです。/64 の「利用
可能ホスト」を計算する人はいません。サブネット内のアドレス枯渇が計画上の
懸念にならないほど大きな数であり、IPv6 にはそもそも引くべきブロードキャスト
アドレスもありません。
知っておくとよい慣習として、先頭 64 ビットはネットワークプレフィックス
(ISP やレジストリが多くは /48 や /56 として割り当て) で、下位 64 ビット
はインターフェース識別子です。IPv6 のサブネット化は通常、IPv4 のように
きつきつのブロックからホスト数を絞り出すことではなく、/64 より上の
プレフィックスをどう切るかという問題です。
手作業 vs ツール
上の計算は、ブロックがなぜその範囲を持つのかを教えてくれるので理解する
価値があります。しかし日々の作業で、任意のブロックのネットワークアドレス・
ブロードキャスト・利用可能範囲・ホスト数を求めるのは、障害対応中の午前
2 時に頭の中でやるより、ツールに任せたほうがよい固定幅の 2 進演算です。
私たちの CIDR 計算機 は 192.168.1.137/26 の
ようなブロックを受け取り、ネットワークアドレス・ブロードキャスト・最初と
最後の利用可能ホスト・全数と利用可能数・ドット 10 進のネットマスクを
一度に返し、/31 と /32 の特殊ケースも含みます。
手で解くときは、3 つだけをはっきり覚えてください。プレフィックスはホスト
ではなくネットワークビットを数えること、全アドレスは 2^(32 − n) である
こと、そして 2 つ引くルールは /31 と /32 を除いてどこにでも適用される
ことです。残りはすべて、その 3 つの事実の上での単純な計算です。