サブネットマスクの計算方法(CIDRを実例で解説)
CIDRのプレフィックス値からサブネットマスクを求めるには、32ビットの数値の左側からその桁数分を1で埋め、残りを0で埋めたうえで、8ビットずつ区切って10進数に変換します。/24なら先頭24ビットが1になるので、255.255.255.0というマスクになります。
CIDRの数字が表しているもの
IPv4アドレスは32ビットで、10進数の8ビットずつのグループ(オクテット)を4つ並べて表記します。192.168.1.0/24のようにアドレスのあとに付くスラッシュと数字がCIDR表記で、32ビットのうち何ビットがネットワーク部として固定されているかを示しています。残りのビットがそのネットワーク内のホスト部にあたります。
/24なら先頭24ビットが固定され、残る8ビットがホスト部です。/26なら26ビットが固定され、ホスト部はわずか6ビットしか残りません。ホスト部のビットが少ないほど、そのネットワークに収容できる機器の数は減ります。この関係は単純な2のべき乗で表され、ホスト部がhビットのネットワークには2^h個のアドレスが存在します。
手計算でマスクを求める: 192.168.1.0/24
CIDRのプレフィックス値24を使って、先頭24ビットを1、残る8ビットを0にした32ビットの数値を書き出します。
11111111.11111111.11111111.00000000
これを8ビットずつ10進数に変換します。1が8個並べば255、0が8個並べば0です。
255 . 255 . 255 . 0
これがサブネットマスク255.255.255.0です。ネットワークアドレスを求めるには、IPアドレスとマスクを2進数のまま並べ、ビットごとにAND演算をかけます。両方が1のときだけ1が残ります。
| 第1オクテット | 第2オクテット | 第3オクテット | 第4オクテット | |
|---|---|---|---|---|
| IPアドレス | 11000000 | 10101000 | 00000001 | 00000000 |
| サブネットマスク | 11111111 | 11111111 | 11111111 | 00000000 |
| ネットワーク(AND) | 11000000 | 10101000 | 00000001 | 00000000 |
結果はネットワークアドレス192.168.1.0です。今回はもとのアドレスのホスト部がすでに全部0だったため、値は変わりませんでした。ブロードキャストアドレスはこの逆で、ネットワークアドレスのホスト部をすべて1にすると求められ、ここでは192.168.1.255になります。その間にある192.168.1.1から192.168.1.254までがホストとして割り当てられるアドレスです。このブロックには合計256個のアドレスがありますが、ネットワークアドレスとブロードキャストアドレスの2つは使えないため、実際にホストへ割り当てられるのは254個です。
/24を4つの/26に分割する
192.168.1.0/24を4つの小さな独立したネットワークに分けたいとします。オフィスのフロアごとに分ける、といった場面を想定してください。/24から/26に変えるということは、ネットワーク部として2ビット借りることを意味します(26−24=2)。2ビットを借りると、必ず2^2=4個の等しいサブネットができます。それぞれの/26サブネットにはホスト部が32−26=6ビット残るため、1サブネットあたり2^6=64個のアドレスがあり、そのうち62個がホストとして使えます。
| サブネット | ネットワークアドレス | 使用可能な範囲 | ブロードキャスト |
|---|---|---|---|
| 1 | 192.168.1.0/26 | 192.168.1.1 – 192.168.1.62 | 192.168.1.63 |
| 2 | 192.168.1.64/26 | 192.168.1.65 – 192.168.1.126 | 192.168.1.127 |
| 3 | 192.168.1.128/26 | 192.168.1.129 – 192.168.1.190 | 192.168.1.191 |
| 4 | 192.168.1.192/26 | 192.168.1.193 – 192.168.1.254 | 192.168.1.255 |
ネットワークアドレスがブロックサイズである64ずつ増えていくことに注目してください。そして各サブネットのブロードキャストアドレスは、次のサブネットのネットワークアドレスよりちょうど1小さい値になります。この規則性はどんなプレフィックスに分割する場合でも同じで、ブロックサイズは残るホスト部のビット数hによって常に2^hとなり、サブネット同士は隙間も重なりもなくアドレス空間を敷き詰めます。
CIDRとサブネットマスクの対応表
実際に目にする機会の多いプレフィックスを、単一ホスト用の/32から/8のブロックまでまとめました。
| CIDR | サブネットマスク | 総アドレス数 | 使用可能ホスト数 |
|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 | 16,777,214 |
| /16 | 255.255.0.0 | 65,536 | 65,534 |
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /27 | 255.255.255.224 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /29 | 255.255.255.248 | 8 | 6 |
| /30 | 255.255.255.252 | 4 | 2 |
| /31 | 255.255.255.254 | 2 | 2(ポイントツーポイント) |
| /32 | 255.255.255.255 | 1 | 1(ホストルート) |
自分のアドレスで計算してみる
IPv4アドレスとCIDRプレフィックスまたはマスクを入力すると、内訳やネットワークアドレス、ブロードキャスト、使用可能な範囲、2進数表記のマスクがリアルタイムで表示されます。
よくある間違いと注意点
ネットワークアドレスとブロードキャストアドレスが使えないことを忘れる。 /24には256個のアドレスがありますが、実際に機器へ割り当てられるのは254個だけです。総アドレス数を基準に容量を見積もってしまい、想定より2台早く割り当て先が尽きるというのはよくある落とし穴です。
/31と/32を他のプレフィックスと同じ扱いにしてしまう。 RFC 3021により、/31はポイントツーポイントリンク向けの特別なケースとされています。2個しかないアドレスの両方が使用可能で、ブロードキャスト用に1個を予約する余地が2アドレスのブロックにはそもそもありません。/32は単独のアドレス1個を表すもので、ホストルートやループバックアドレスとして使われることが多く、そもそもネットワークアドレスやブロードキャストアドレスという概念自体が存在しません。
サブネットマスクとワイルドカードマスクを混同する。 サブネットマスクはネットワーク部を1で示すもので、/24なら255.255.255.0です。ワイルドカードマスクはそのビット反転で、代わりにホスト部を1で示し、同じ/24でも0.0.0.255になります。ワイルドカードマスクはCiscoなどの機器のアクセスコントロールリストでよく登場し、ワイルドカードマスクが必要な場面でサブネットマスクを入力してしまう(あるいはその逆)と、意図しないアドレス範囲に一致してしまいます。
サブネットマスクは常に1が連続した並びだと思い込む。 255.0.255.0のようなマスクは一見それらしく見えますが、実は無効です。1のビットが左端から連続した1つのブロックになっていないため、CIDRプレフィックスとして表すことができません。正しいサブネットマスクは、必ず先頭から連続する1のビットのあとに0のビットが続く形だけです。
よくある質問
サブネットマスクからCIDRプレフィックスに逆算するにはどうすればいいですか?
マスクを2進数にして、左から1のビットの数を数えます。255.255.255.0は11111111.11111111.11111111.00000000で、1が24個並んでいるので/24です。この方法がきれいに使えるのは、マスクが「1が連続したあとに0が続く」という有効な形になっている場合だけです。255.0.255.0のようなマスクは1のビットが連続していないため、対応するCIDRプレフィックスは存在しません。
サブネットに分割するときの数がなぜ必ず2のべき乗になるのですか? ホスト部から1ビット借りるたびに、そのビットが取りうる値(0か1)の分だけ組み合わせが倍になるからです。1ビット借りれば2つ、2ビット借りれば4つ、3ビット借りれば8つのサブネットになります。1バイト(8ビット)が256通りの値を表せるのも同じ理屈で、ビットが1つ増えるたびに表現できる数が倍になっていくためです。
サブネットマスクとデフォルトゲートウェイの違いは何ですか? サブネットマスクは、IPアドレスのうちどこまでがネットワーク部でどこからがホスト部かを機器に伝えるもので、これによって相手のアドレスが自分と同じローカルネットワーク上にあるかどうかを判断できます。デフォルトゲートウェイはこれとは別の設定で、宛先が自分のローカルネットワーク外にあるときに機器が送信先とするルーターのIPアドレスを指します。ローカルネットワークの外に到達するには、両方が正しく設定されている必要があります。
/24を3つのネットワークに分けるような、割り切れない分割はできますか? きっちり3等分することはできません。サブネットの分割は常に2のべき乗単位で行われるためです。/24を分割すると得られるのは2、4、8、16という数であり、3にはなりません。実務上は、2ビット借りて4分割したうえで、1つの/26を未使用のままにしておくか、小規模な部署向けにさらに細かく分割するといった対応になります。無理やり3等分しようとするのではなく、この方法を使うのが現実的です。