サブネットマスクは、IPv4 アドレスのうち「どこまでがネットワークを表し、どこからが個々の機器(ホスト)を表すか」を示す 32 ビットの値です。左側に 1 が並び、右側に 0 が並びます。1 の部分がネットワーク部、0 の部分がホスト部です。255.255.255.0 という見慣れた値も、2 進数に直すと「1 が 24 個、0 が 8 個」というだけの意味になります。
この記事では、サブネットマスクを 2 進数で読むところから始めて、CIDR 表記との換算、ネットワークアドレスの求め方、基本情報技術者試験の過去問、/31 と /32 の例外、クラウドで使えるアドレス数までを順に説明します。計算結果はすべて IPサブネット計算ツール で求めた値で、サイトのテストがツールのコードで再計算しています。例のアドレスは RFC 1918 のプライベートアドレスと、RFC 5737 の文書用アドレスです。
サブネットマスクとは:ネットワーク部とホスト部の境目
同じネットワークにいる機器どうしは、ルーターを通さずに直接通信します。別のネットワークあての通信はデフォルトゲートウェイ(ルーター)に渡します。機器がこの判断をするときに使うのがサブネットマスクです。自分の IP アドレスと相手の IP アドレスにそれぞれサブネットマスクで論理積(AND)を取り、結果のネットワークアドレスが同じなら同じネットワークと判断します。
サブネットマスクは 1985 年の RFC 950(Internet Standard Subnetting Procedure)で定められました。RFC 950 は 1 のビットが連続していなくてもよいとしつつ、連続させることを推奨していました。現在の CIDR を定めた RFC 4632 は「マスクは左詰めで連続していなければならない」(the mask must be left contiguous)としています。1 が必ず左から連続するので、マスクは「1 の個数」だけで表せます。これが /24 のような CIDR 表記(プレフィックス長)です。
255.255.255.0 を2進数で読む
PC の IP アドレスが 192.168.1.10、サブネットマスクが 255.255.255.0 の場合を 2 進数で並べます。
IPアドレス 11000000.10101000.00000001|00001010 192.168.1.10
サブネットマスク 11111111.11111111.11111111|00000000 255.255.255.0
ネットワーク 11000000.10101000.00000001|00000000 192.168.1.0
ブロードキャスト 11000000.10101000.00000001|11111111 192.168.1.255
縦線の左側 24 ビットがネットワーク部です。ホスト部 8 ビットをすべて 0 にしたものがネットワークアドレス 192.168.1.0、すべて 1 にしたものがブロードキャストアドレス 192.168.1.255 です。この 2 つは機器に割り当てられないので、使えるのは 192.168.1.1 から 192.168.1.254 までの 254 個です。つまり 255.255.255.0 は「この LAN には最大 254 台」という意味でもあります。
マスクを 255.255.255.192 に変えると、1 が 2 個増えて 26 個になります。
ホスト部は 6 ビットに減り、同じ 192.168.1.10 が属するネットワークは 192.168.1.0〜192.168.1.63、使えるホストは 62 個になります。192.168.1.70 は隣のネットワーク(192.168.1.64〜.127)に入るので、2 台の間の通信はルーターを経由します。見た目が似たアドレスでも、マスクが変われば「同じネットワークかどうか」の答えが変わります。
サブネットマスクとCIDR表記の換算表
1 オクテット(8 ビット)の中でマスクが取りうる値は、次の 9 種類しかありません。この表を覚えておくと、どの換算も暗算できます。
| 1 の個数 | 2 進数 | 10 進数 | そのオクテットでの刻み幅 |
|---|---|---|---|
| 0 | 00000000 | 0 | 256 |
| 1 | 10000000 | 128 | 128 |
| 2 | 11000000 | 192 | 64 |
| 3 | 11100000 | 224 | 32 |
| 4 | 11110000 | 240 | 16 |
| 5 | 11111000 | 248 | 8 |
| 6 | 11111100 | 252 | 4 |
| 7 | 11111110 | 254 | 2 |
| 8 | 11111111 | 255 | 1 |
CIDR 表記からマスクに直すには、8 ビットごとに 255 を置き、余りを表で引いて、残りを 0 で埋めます。/22 は 8 + 8 + 6 なので 255.255.252.0 です。逆に 255.255.255.240 は 8 + 8 + 8 + 4 で /28 です。255.255.255.200(11001000)のように 1 の間に 0 が挟まる値はマスクとして無効です。
よく使う範囲をまとめると次のとおりです。使えるホスト数は「2 のホスト部ビット数乗 − 2」で、/31 と /32 だけは後述の例外です。
| CIDR | サブネットマスク | アドレス数 | 使えるホスト数 |
|---|---|---|---|
| /16 | 255.255.0.0 | 65,536 | 65,534 |
| /22 | 255.255.252.0 | 1,024 | 1,022 |
| /23 | 255.255.254.0 | 512 | 510 |
| /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 |
Cisco 機器の ACL などで使うワイルドカードマスクは、サブネットマスクの 0 と 1 を反転したものです。各オクテットを 255 から引けば求まり、/22 なら 0.0.3.255 になります。
ネットワークアドレスの求め方:基本情報技術者試験の過去問で練習
IPA の基本情報技術者試験では、この計算が午前問題(現在の科目 A)に繰り返し出ています。IPA が公開している平成29年度秋期の問題冊子の午前 問35 は次の問題です。
次の IP アドレスとサブネットマスクをもつ PC がある。この PC のネットワークアドレスとして,適切なものはどれか。IP アドレス:10.170.70.19 サブネットマスク:255.255.255.240 (ア 10.170.70.0 イ 10.170.70.16 ウ 10.170.70.31 エ 10.170.70.255)
2 進数で AND を取るのが正攻法ですが、刻み幅を使うと速く解けます。マスクが変わる第 4 オクテットは 240 なので、刻み幅は 256 − 240 = 16 です。ネットワークは .0、.16、.32…と 16 ごとに区切られ、19 は 16 と 32 の間にあります。したがってネットワークアドレスは 10.170.70.16、正解はイです。ウの 10.170.70.31 は同じネットワークのブロードキャストアドレスです。
ツールで確かめるときは、マスクを CIDR 表記に直して 10.170.70.19/28 と入力します(スラッシュの後ろに 255.255.255.240 は書けません)。ネットワークアドレス 10.170.70.16、ブロードキャストアドレス 10.170.70.31、使えるホスト 14 個と表示されます。
平成31年度春期の午前 問32 は、ホスト数を問う形です。
192.168.0.0/23(サブネットマスク 255.255.254.0)の IPv4 ネットワークにおいて,ホストとして使用できるアドレスの個数の上限はどれか。 (ア 23 イ 24 ウ 254 エ 510)
ホスト部は 32 − 23 = 9 ビットなので 2⁹ = 512 個、ネットワークアドレスとブロードキャストアドレスを除いて 510 個、正解はエです。ツールでも 192.168.0.0/23 の使用可能ホスト数は 510 です。/23 は 192.168.0.0〜192.168.1.255 の 2 つの /24 をまとめた範囲です。
「2を引く」理由と /31・/32 の例外
ホスト部がすべて 0 のアドレスはネットワークそのもの、すべて 1 のアドレスはネットワーク内の全機器あて(ブロードキャスト)を意味します。RFC 950 はこの解釈を引き継ぎ、ホストには割り当てないとしました。これが「2 を引く」理由です。
ただしルーター同士を 1 対 1 でつなぐリンクには相手が 1 台しかおらず、ブロードキャストが要りません。/30 では 4 個のうち 2 個がネットワークとブロードキャストに消えます。RFC 3021(2000 年)はこうしたポイントツーポイントリンクで 31 ビットのマスクを使うことを認め、2 つのアドレスは「ホストアドレスとして解釈しなければならない」(MUST be interpreted as host addresses)と定めています。
ツールも RFC 3021 に従い、203.0.113.9/31 の使用可能ホスト数を 2(203.0.113.8 と 203.0.113.9)と表示します。/31 と /32 のブロードキャストアドレスの欄は「なし」と理由を表示します。/32 は 1 個のアドレスだけを表し、ホストルートやファイアウォールの許可リストで使います。前の節の過去問 2 問も「2 を引く」前提の問題です。/31 は、対応した機器でルーター間リンクを設定するときの選択肢と考えてください。
サブネット分割(VLSM)の手順
1 つのアドレスブロックを部署ごとに分けるときは、必要なホスト数に合わせてプレフィックス長を変えます(VLSM:可変長サブネットマスク)。例として、事務所に割り当てられた 172.16.0.0/24(256 個)を、営業部 100 台、開発部 50 台、会議室 Wi-Fi 20 台、ネットワーク機器の管理用 5 台、ルーター間リンク 1 本に分けます。
- 台数 + 2 が入る最小のブロックを選びます。100 台は
/25(126 個)、50 台は/26(62 個)、20 台は/27(30 個)、5 台は/29(6 個)、リンクは/30です(機器が/31に対応していれば/31)。 - 大きいブロックから順に先頭から割り当てます。2ⁿ 個のブロックは 2ⁿ の倍数から始める必要があるため、大きい順に並べると隙間ができません。
- 割り当てた範囲をツールで確認します。
| 用途 | 必要台数 | 割り当て | 範囲(ネットワーク〜ブロードキャスト) | 使えるホスト |
|---|---|---|---|---|
| 営業部 | 100 | 172.16.0.0/25 | 172.16.0.0〜172.16.0.127 | 126 |
| 開発部 | 50 | 172.16.0.128/26 | 172.16.0.128〜172.16.0.191 | 62 |
| 会議室 Wi-Fi | 20 | 172.16.0.192/27 | 172.16.0.192〜172.16.0.223 | 30 |
| 管理用 | 5 | 172.16.0.224/29 | 172.16.0.224〜172.16.0.231 | 6 |
| ルーター間リンク | 2 | 172.16.0.232/30 | 172.16.0.232〜172.16.0.235 | 2 |
172.16.0.236〜172.16.0.255 の 20 個(/30、/28 の 2 ブロック)が残ります。小さいブロックから割り当てると、たとえば管理用の /29 を先頭に置いた時点で /25 を 172.16.0.0 から始められなくなります。
クラウドでは予約アドレスがさらに増える
AWS や Azure などのクラウドでは、サブネットごとにルーターや DNS 用のアドレスが追加で予約されます。ツールの「使用可能ホスト数」から、さらに次の数を引いてください。
| サービス | サブネットごとの予約 | /24 で使える数 | /28 で使える数 | サブネットの大きさ |
|---|---|---|---|---|
| 一般的な LAN(ツールの表示) | 2:ネットワーク、ブロードキャスト | 254 | 14 | — |
| AWS VPC | 5:先頭 4 個と最後の 1 個 | 251 | 11 | /28〜/16 |
| Azure Virtual Network | 5:ネットワーク、既定ゲートウェイ、Azure DNS 用 2 個、ブロードキャスト | 251 | 11 | 最小 /29、最大 /2 |
| Google Cloud VPC | プライマリ範囲で 4:ネットワーク、ゲートウェイ、最後から 2 番目、ブロードキャスト | 252 | 12 | /29〜/4 |
AWS のドキュメントは 10.0.0.0/24 を例に、.0 がネットワークアドレス、.1 が VPC ルーター、.2 が DNS サーバー、.3 が将来の利用のための予約、.255 は VPC がブロードキャストをサポートしないため予約、と説明しています。AWS の最小サブネット /28 では、16 個のうち 11 個しか EC2 などに割り当てられません。Google Cloud はセカンダリ範囲では全アドレスを使えます。
クラスフルからCIDRへ:RFC 950・RFC 1878・RFC 4632
かつての IPv4 アドレスは、先頭のビットでネットワークの大きさが決まる「クラス」方式でした。クラス A は /8、クラス B は /16、クラス C は /24 に固定され、2,000 台のネットワークにはクラス B(65,536 個)を割り当てるか、クラス C を何個も並べるしかありませんでした。RFC 4632(2006 年、1993 年の RFC 1519 を置き換え)は、すべてのネットワークをプレフィックス長つきで表し、2 のべき乗の大きさなら何でも使えるようにしました。RFC 4632 自身が、旧クラス B の 172.16.0.0 は「プレフィックス 172.16.0.0/16 として定義される」と例示しています。
古い参考書では、サブネットの数からも 2 を引く説明が残っています。これは RFC 950 が「サブネット部がすべて 0 またはすべて 1 の値は実際のサブネットに割り当てるべきではない」としていたためです。1995 年の RFC 1878 はこの慣行について「This practice is obsolete!」と明記し、現在のソフトウェアはすべてのサブネットを使えるとしています。/24 を 3 ビット借りて分ければ、サブネットは 8 個です。
CIDR のもう 1 つの柱は最長一致です(RFC 4632 5.1 節)。ルーティングテーブルに 10.0.0.0/8 と 10.20.1.0/24 の両方があれば、10.20.1.9 あてのパケットは一致するビットが多い /24 に従います。サブネットが重なっていてもエラーにならず、より細かい経路が黙って優先されるため、重複は気づきにくいトラブルになります。
よくある間違い
- ツールや設定画面に
255.255.255.240をそのまま入れる。 このツールはスラッシュの後ろに/28のようなプレフィックス長を求めます。上の換算表で直してから入力してください。 - 先頭に 0 を付ける。
192.168.001.010は、このツールも Python のipaddressも無効として扱います。古い実装には010を 8 進数の 8 と読むものがあり、同じ文字列が別の機器を指すおそれがあります。 - ワイルドカードマスクとサブネットマスクの取り違え。 ACL に
0.0.0.255と書くべきところを255.255.255.0と書くと、まったく別のアドレス群に一致します。 - 重複した範囲で拠点やクラウドをつなぐ。 両方が
10.0.0.0/16を使っていると VPN やピアリングが成立しません。AWS のドキュメントも、IPv4 または IPv6 の CIDR ブロックが一致または重複する VPC 間ではピアリング接続を作成できないとしています。
ツールは IPv4 のサブネットを 1 つずつ計算します。ブロックの分割や範囲の重なりの判定は行わないので、VLSM の表は上の手順で作り、各行をツールで確認する使い方になります。