原文: Subnet Cheat Sheet – 24 Subnet Mask, 30, 26, 27, 29, and other IP Address CIDR Network References

開発者、またはネットワークエンジニアなら、サブネットマスクの値を調べたりその意味を理解する必要があったりするでしょう。

その作業を楽にするために、freeCodeCamp コミュニティはこのシンプルなチートシートを作成しました。このまま読み進めるか、Ctrl/Cmd + F でお探しの値を見つけてください。

一覧表は下記の通りです。意味は後ほど説明します。

CIDR サブネットマスク ワイルドカードマスク IP アドレスの数 利用可能なIP アドレスの数
/32 255.255.255.255 0.0.0.0 1 1
/31 255.255.255.254 0.0.0.1 2 2*
/30 255.255.255.252 0.0.0.3 4 2
/29 255.255.255.248 0.0.0.7 8 6
/28 255.255.255.240 0.0.0.15 16 14
/27 255.255.255.224 0.0.0.31 32 30
/26 255.255.255.192 0.0.0.63 64 62
/25 255.255.255.128 0.0.0.127 128 126
/24 255.255.255.0 0.0.0.255 256 254
/23 255.255.254.0 0.0.1.255 512 510
/22 255.255.252.0 0.0.3.255 1,024 1,022
/21 255.255.248.0 0.0.7.255 2,048 2,046
/20 255.255.240.0 0.0.15.255 4,096 4,094
/19 255.255.224.0 0.0.31.255 8,192 8,190
/18 255.255.192.0 0.0.63.255 16,384 16,382
/17 255.255.128.0 0.0.127.255 32,768 32,766
/16 255.255.0.0 0.0.255.255 65,536 65,534
/15 255.254.0.0 0.1.255.255 131,072 131,070
/14 255.252.0.0 0.3.255.255 262,144 262,142
/13 255.248.0.0 0.7.255.255 524,288 524,286
/12 255.240.0.0 0.15.255.255 1,048,576 1,048,574
/11 255.224.0.0 0.31.255.255 2,097,152 2,097,150
/10 255.192.0.0 0.63.255.255 4,194,304 4,194,302
/9 255.128.0.0 0.127.255.255 8,388,608 8,388,606
/8 255.0.0.0 0.255.255.255 16,777,216 16,777,214
/7 254.0.0.0 1.255.255.255 33,554,432 33,554,430
/6 252.0.0.0 3.255.255.255 67,108,864 67,108,862
/5 248.0.0.0 7.255.255.255 134,217,728 134,217,726
/4 240.0.0.0 15.255.255.255 268,435,456 268,435,454
/3 224.0.0.0 31.255.255.255 536,870,912 536,870,910
/2 192.0.0.0 63.255.255.255 1,073,741,824 1,073,741,822
/1 128.0.0.0 127.255.255.255 2,147,483,648 2,147,483,646
/0 0.0.0.0 255.255.255.255 4,294,967,296 4,294,967,294
  • /31 は、RFC 3021 で定められている特殊なケースです。このタイプのサブネットマスクを使用するネットワークは、2 つの IP アドレスをポイント・ツー・ポイントリンクとして割り当てることができます。

そしてこちらが、サブネットマスクとワイルドカードのオクテットの 10 進数から 2 進数への変換表です。

サブネットマスク ワイルドカード
0 00000000 255 11111111
128 10000000 127 01111111
192 11000000 63 00111111
224 11100000 31 00011111
240 11110000 15 00001111
248 11111000 7 00000111
252 11111100 3 00000011
254 11111110 1 00000001
255 11111111 0 00000000

ワイルドカードはサブネットマスクを反転させたものとなっています。

ネットワークエンジニアリングの初心者であれば、この記事で、コンピューターネットワークの仕組みについて理解を深めると良いでしょう。(英語版)

最後に、このチートシートとこれ以降の説明は、より新しい IPv6 プロトコルではなく IPv4 アドレスにフォーカスしています。IPv6 について詳しく学びたい場合も、上記、コンピューターネットワークの仕組みについての記事を参考にしてください。

IP アドレスブロックの仕組み

192.168.0.1 のような IP アドレスは、2 進数のブロック 4 組を 10 進数で表したものです。

各ブロックは 8 ビットで、0~255 の数字を表現できます。ブロックは 8 ビットのかたまりなので、それぞれのブロックは オクテット と呼ばれます。そして、8 ビットのブロックが 4 組あるので、IPv4 アドレスはすべて 32 ビットです。

例えば IP アドレス 172.16.254.1 を 2 進数で表すと次のようになります。

1125px-Ipv4_address
引用元: IPv4

IP アドレスの 10 進数と 2 進数の変換を行うには下記の表を利用できます。

128 64 32 16 8 4 2 1
x x x x x x x x

この表は 1 組、8 ビットのオクテットを表しています。

ではここで、IP アドレス 168.210.225.206 を変換したいとしましょう。そのためにはアドレスを 4 つのブロックに分け (168, 210, 225, 206)、それぞれ上の表を使用して 2 進数に変換します。

2 進数では 1 が「オン」、0 が「オフ」を表すことを思い出してください。つまり、最初のブロック 168 を 2 進数に変換するには、表の左端からスタートして、合計が 168 となるように、それぞれのセルに 1 か 0 を入れていきます。

例:

128 64 32 16 8 4 2 1
1 0 1 0 1 0 0 0

128 + 32 + 8 = 168 なので、変換後の 2 進数は 10101000 となります。

残りのブロックにも同じ手順を繰り返すと 10101000.11010010.11100001.11001110 という値が得られます。

サブネットとは

上の表を見ると IP アドレスの数は事実上無限のように思えます。結論から言うと、利用可能な IPv4 アドレスは約 42 億通りです。

しかし、インターネットがどれだけ拡大したか、現在どれだけのデバイスが接続されているかを考えてみれば、すでに IPv4 アドレスの枯渇が発生していると聞いてもそう驚かないことでしょう。

IPv4 アドレスの枯渇は何年も前から懸念されていたので、IP アドレスを「サブネット」と呼ばれるさらに小さなネットワークに分割する方法が考案されました。

「サブネット化」と呼ばれるこの方法は、IP アドレスのホスト部を使用して、1 つの IP アドレスをより小さいネットワーク、サブネットに分割します。

通常、IP アドレスはネットワーク部とホスト部で構成されています。

network-and-host-bits
引用元: What is IPv4

大まかに言うと、サブネット化の役割は 2 つあります。1 つはネットワークをサブネットに分割する方法を提供し、もう 1 つは、あるデバイスと他方のデバイス (IP アドレス) が同じローカルネットワーク内にあるかどうかを判別できるようにします。

サブネット化を理解する良い方法は、あなたの家の無線ネットワークを思い浮かべることです。

サブネット化がなければ、インターネットに接続されているすべてのデバイスにそれぞれ固有の IP アドレスが必要になります。

しかし、無線ルーターがあるおかげでルーター用に 1 つの IP アドレスがあるだけで済みます。このパブリック (外部) IP アドレスは通常、ISP (インターネットサービスプロバイダー) によって自動で割り当てられます。

そして、そのルーターに接続されているすべてのデバイスが、それぞれ固有のプライベート (内部) IP アドレスを持ちます。

home-network-diagram
引用元: What Is My IP Address?

ここで、内部 IP アドレス 192.168.1.101 を持つデバイスが他のデバイスと通信しようとする場合、他方のデバイスの IP アドレスとサブネットマスクが必要になります。

IP アドレスとサブネットマスクの組み合わせにより、192.168.1.101 のデバイスは、他方のデバイスが同じネットワーク内のデバイス (例えば 192.168.1.103 のデバイス) か、あるいはインターネットのどこかにある全く別のネットワークのデバイスかを判断できます。

面白いことに、ISP によってあなたのルーターに割り当てられた外部 IP アドレスも、おそらくは近隣の家庭や職場の IP アドレスを含むサブネットの一部です。そして内部 IP アドレスと同じようにサブネットマスクを利用して動作しています。

サブネットマスクの仕組み

サブネットマスクは IP アドレスのフィルターのような役割を果たします。サブネットマスクを使うことで、デバイスは IP アドレスのネットワーク部とホスト部を判断できます。

そしてその情報を利用してデバイス同士が通信するベストな方法を判断します。

あなたのルーターやコンピューターのネットワーク設定を調べたことがあれば、255.255.255.0 という数字に見覚えがあるかもしれません。

これはシンプルなホームネットワークによく使われるサブネットマスクです。

IPv4 アドレスと同様に、サブネットマスクも 32 ビットです。そして IP アドレスを 2 進数に変換したのと同じように、サブネットマスクでも同じことができます。

例を見てみましょう。先ほどの表をもう一度使います。

128 64 32 16 8 4 2 1
x x x x x x x x

では、最初のオクテット 255 を変換してみましょう。

128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1

とてもシンプルですね。255 というオクテットは、2 進数では 11111111 です。つまり 255.255.255.0 は、2 進数では 11111111.11111111.11111111.00000000 となります。

では次に、サブネットマスクと IP アドレスを組み合わせて IP アドレスのどの部分がネットワーク部か、ホスト部かを計算してみます。

サブネットマスクと IP アドレスをそれぞれ 10 進数と 2 進数で表記したものがこちらです。

種別 10 進数表記 2 進数表記
IP アドレス 192.168.0.101 11000000.10101000.00000000.01100101
サブネットマスク 255.255.255.0 11111111.11111111.11111111.00000000

2 つの値をこのように並べれば 192.168.0.101 をネットワーク部とホスト部に分けるのは簡単です。

2 進数表記のサブネットマスクのとあるビットが 1 の時、2 進数表記の IP アドレスの同じビットはネットワーク部のビットです。

255 というオクテットは 2 進数では 11111111 なので、そのオクテットは全体がネットワーク部です。したがって、最初の 3 つのオクテット 192.168.0 は IP アドレスのネットワーク部にあたり、101 がホスト部にあたります。

言い換えると、192.168.0.101 のデバイスが他のデバイスと通信しようとする場合、サブネットマスクを見ると、IP アドレスが 192.168.0.xxx のデバイスならばどれも同じローカルネットワークにあると分かります。

この情報を表現するもう一つの方法は、ネットワーク ID を使う方法です。ネットワーク ID とは、IP アドレスのネットワーク部にあたる部分です。つまり、サブネットマスクが 255.255.255.0 の場合、IP アドレス 192.168.0.101 のネットワーク ID は 192.168.0.0 です。

同じローカルネットワーク内の他のデバイス (192.168.0.102, 192.168.0.103 など) についても同様です。

CIDR、CIDR 表記とは?

CIDR とは「Classless Inter-Domain Routing」の略です。IPv4 で使われていましたが、最近では IPv6 ルーティングでも使われています。

1920px-IP_Address_Match.svg
引用元: Classless Inter-Domain Routing

インターネットが構築された当初のクラスフル IP アドレッシングシステムの下では、IPv4 アドレスが急速に使い果たされようとしていました。そこで、IPv4 アドレスの消費を減速させる方法として、1993 年に CIDR が発表されました。

CIDR には主要な概念がいくつか含まれます。

一つ目は可変長サブネットマスク (Variable Length Submasking, VLSM) です。これによりサブネット内にさらにサブネットを作成できるようになりました。そしてサブネットごとにサイズを変えることもできるため、使用されない IP アドレスを減らすことができます。

二つ目の主要な概念は CIDR 表記です。

CIDR 表記とはサブネットマスクの簡略表記で、IP アドレスに使用可能なビット数を表します。例えば 192.168.0.101/24/24 は、IP アドレス 192.168.0.101 とサブネットマスク 255.255.255.0 に相当します。

CIDR 表記の計算方法

あるサブネットマスクを CIDR 表記にするには、サブネットマスクを 2 進数に変換し、「1」、つまり「オン」の桁数を数えます。例えば下記の場合:

種別 10 進数表記 2 進数表記
サブネットマスク 255.255.255.0 11111111.11111111.11111111.00000000

最初の 3 つのオクテットがすべて 1 なので、24 個の「オン」のビットがあります。したがって CIDR 表記は /24 となります。

どちらの表記で書いても構いませんが、255.255.255.0 よりも /24 の方が書きやすいですよね。

この表記は通常、IP アドレスと一緒に表記されます。同じサブネットマスクを IP アドレスと組み合わせた場合を見てみましょう。

種別 10 進数表記 2 進数表記
IP アドレス 192.168.0.101 11000000.10101000.00000000.01100101
サブネットマスク 255.255.255.0 11111111.11111111.11111111.00000000

サブネットマスクの最初の 3 つのオクテットがすべて「オン」なので、IPアドレスの、対応する 3 つのオクテットがネットワーク部であることを意味しています。

最後の 4 つ目のオクテットを詳しく見てみましょう。

種別 10 進数表記 2 進数表記
IP アドレス 101 01100101
サブネットマスク 0 00000000

サブネットマスクを見ると、このオクテットのすべてのビットが「オフ」になっているので、IP アドレスの対応するビットはホスト部であると分かります。

CIDR 表記を記述する際、通常はネットワーク ID を使用して記述します。したがって、IP アドレス 192.168.0.101 とサブネットマスク 255.255.255.0 の CIDR 表記は 192.168.0.0/24 となります。

ある IP アドレスとサブネットマスクの CIDR 表記とネットワーク ID を計算する方法の例をもっと見るにはこちらの動画をどうぞ。

クラスフル IP アドレッシング

サブネット化と CIDR の基本的な例をいくつか見てきたので、少し範囲を広げて、今度はクラスフル IP アドレッシングと呼ばれる方式を見ていきましょう。

サブネット化が開発される以前は、すべての IP アドレスは決まったクラスに分けられていました。

subnetting
引用元: Subnetting for dummies

クラス D や E もありますが、これについては後ほど詳しく説明します。

クラスフル IP アドレスにより、ネットワークエンジニアはさまざまな組織に合わせて有効な IP アドレスの範囲を提供することができるようになりました。

ただこのアプローチには多くの問題があり、結果としてサブネット化へとつながりました。しかしその前に、それぞれのクラスを詳しく見てみましょう。

クラス A IP アドレス

クラス A IP アドレスでは、最初のオクテット (8 ビット / 1 バイト) がネットワーク ID、残りの 3 つのオクテット (24 ビット / 3 バイト) がホスト ID を表します。

クラス A IP アドレスの範囲は 1.0.0.0 から 127.255.255.255 です。デフォルトマスクは 255.0.0.0 (CIDR 表記では /8) です。

つまり、クラス A のアドレスは合計 128 個 (27) のネットワークと、各ネットワークに 16,777,214 個 (224-2) の利用可能なアドレスを持つことができます。

また、クラス A の範囲内のうち 127.0.0.0 から 127.255.255.255 はホストループバックアドレス用に予約されていることに注意してください。(RFC5735 を参照)

クラス B IP アドレス

クラス B IP アドレスでは、最初の 2 つのオクテット (16 ビット / 2 バイト) がネットワーク ID、残りの 2 つのオクテット (16 ビット / 2 バイト) がホスト ID を表します。

クラス B IP アドレスの範囲は 128.0.0.0 から 191.255.255.255 です。デフォルトマスクは 255.255.0.0 (CIDR 表記では /16) です。

クラス B のアドレスは 16,384 個 (214) のネットワークと、各ネットワークに 65,534 個 (216-2) の利用可能なアドレスを持つことができます。

クラス C IP アドレス

クラス C IP アドレスでは、最初の 3 つのオクテット (24 ビット / 3 バイト) がネットワーク ID、最後のオクテット (8 ビット / 1 バイト) がホスト ID を表します。

クラス C IP アドレスの範囲は 192.0.0.0 から 223.255.255.255 です。デフォルトマスクは 255.255.255.0 (CIDR 表記では /24) です。

クラス C のアドレスは 2,097,152 個 (221) のネットワークと、各ネットワークに 254 個 (28-2) の利用可能なアドレスを持つことができます。

クラス D、クラス E IP アドレス

最後の 2 つのクラスはクラス D とクラス E です。

クラス D IP アドレスはマルチキャスト用に予約されています。IP アドレスの範囲は 224.0.0.0 から 239.255.255.255 です。

クラス E IP アドレスは実験用とされており、240.0.0.0 以上のすべての範囲です。

クラスフル IP アドレスの問題

クラスフル IP アドレスの主な問題は、効率が悪く、多くの IP アドレスを無駄にする可能性があることです。

例えば、あなたが大きな組織の一員だと想像してみてください。あなたの会社には 1,000 人の従業員がいます。つまりクラス B に該当する規模です。

しかし上の説明を見てみると、クラス B のネットワークは最大 65,534 個のアドレスを利用できることが分かります。これはあなたの組織が必要とするであろう数よりずっと多いですね。もし各従業員が固有のアドレスを持つデバイスを複数持っていたとしても、この数に達する可能性は低そうです。

そして、代わりにクラス C を利用することもできません。利用可能な IP アドレスの数が足りないからです。

このように、IPv4 アドレスが普及する頃まではクラスフル IP アドレスが使われていましたが、じきに、利用可能な 42 億個のアドレスを使い果たさないためにはより良いシステムが必要であることが明らかになりました。

クラスフル IP アドレスは、1993 年に CIDR に置き換えられてからは使われなくなりました。現在これを学ぶ目的としては、初期のインターネットアーキテクチャについて学んだり、サブネット化が重要である理由を理解するためであることがほとんどです。

このチートシートがお役に立てば幸いです。

この記事がお役に立ちましたら、もっと多くの人々が恩恵を受けられるように、ぜひ周りの友人にシェアしてください。

また、Twitter でお気軽に、筆者までご意見をお聞かせください。