この記事の結論サブネットマスクは、IPアドレスを「ネットワークの住所」と「その中の端末番号」に分ける境界線です。IPアドレスの見た目だけでは境界は決まらず、/24 や /28 のようなCIDR表記によって確定します。

サブネットマスクとは何か

IPアドレスは、ネットワークそのものを表す部分と、そのネットワーク内の端末を表す部分に分けて使います。その境界を示すのがサブネットマスクです。

たとえば、次のIPアドレスとサブネットマスクを考えます。

IPアドレス:       192.168.1.10
サブネットマスク: 255.255.255.0

255.255.255.0 は、先頭3つの区切りまでがネットワーク部分で、最後の数字が端末部分であることを表します。

192.168.1 | 10
-----------+---
ネットワーク 端末

この 255.255.255.0 はCIDR表記では /24 です。つまり 192.168.1.10/24 は、「先頭24bitがネットワーク部分」という意味になります。

なぜサブネットマスクが必要なのか

PCは通信するときに、相手が自分と同じネットワークにいるのか、それともルータを経由する必要があるのかを判断します。

自分のIPアドレスが 192.168.1.10/24 だったとします。相手が 192.168.1.20 なら、同じ 192.168.1.0/24 のネットワークにいるため、直接通信できます。

PC
 ↓
同じネットワーク上の相手

一方で、相手が 192.168.2.20 なら、192.168.1.0/24 とは別ネットワークです。この場合、PCはデフォルトゲートウェイ、つまりルータへ通信を渡します。

PC
 ↓
デフォルトゲートウェイ
 ↓
別ネットワーク

255と0は何を表しているのか

サブネットマスクは2進数で見ると意味がはっきりします。

255 = 11111111
0   = 00000000

255.255.255.0 を2進数にすると、次のようになります。

11111111.11111111.11111111.00000000

1 になっている部分がネットワーク部分です。1 が24個あるので、CIDR表記では /24 になります。

表記意味
255.255.255.0先頭24bitがネットワーク部分
/24同じ意味を短く書いたCIDR表記
192.168.1.10/24192.168.1.0/24 というネットワーク内の端末

IPアドレスだけでは境界は分からない

192.168.1.10 というIPアドレスだけを見ても、どこまでがネットワーク部分かは原則分かりません。同じIPアドレスでも、サブネットマスクによって所属ネットワークは変わります。

192.168.1.10/24 → ネットワークアドレスは 192.168.1.0/24
192.168.1.10/16 → ネットワークアドレスは 192.168.0.0/16

昔はIPアドレスの先頭の値からA、B、Cのようなクラスで区切る考え方がありました。しかし現在はCIDRを使うため、192 から始まるから必ず /24 とは限りません。

見た目で決めない192.168.1.10 と 192.168.1.200 は、/24 なら同じサブネットです。しかし /28 なら別サブネットになります。境界を決めるのはIPアドレスの見た目ではなく、サブネットマスクです。

AWSでよく見る/28も同じ考え方

AWSのVPCやサブネット設計では、/24 より小さな範囲として /28 もよく見かけます。たとえば 10.0.1.0/28 は、先頭28bitがネットワーク部分という意味です。

ネットワーク部分 = 28bit
端末部分         = 4bit

IPv4アドレスは全部で32bitなので、/28 では端末部分が 32 - 28 = 4bit 残ります。4bitで表せる組み合わせは 2^4 = 16 個です。

CIDRIPアドレス数増え方
/24256個大きいサブネット
/25128個/24 の半分
/2664個さらに半分
/2732個さらに半分
/2816個小さいサブネット

/ の数字が大きくなるほど、ネットワーク部分が長くなり、端末部分が短くなります。そのため、1つのサブネットに入るIPアドレス数は少なくなります。

同じサブネットかどうかはAND演算で分かる

コンピュータは、IPアドレスとサブネットマスクをAND演算してネットワークアドレスを求めます。AND演算は、両方が 1 のときだけ結果が 1 になる計算です。

192.168.1.200/28 を例にします。/28 のサブネットマスクは 255.255.255.240 です。最後の8bitだけ見ると、次のようになります。

200 = 11001000
240 = 11110000

これをAND演算します。

  11001000   ← 200
& 11110000   ← サブネットマスク
-----------
  11000000

11000000 は10進数で 192 です。したがって、192.168.1.200/28 のネットワークアドレスは 192.168.1.192/28 になります。

なぜ192がネットワークアドレスになるのか

10進数で見ると、192.168.1.192 はネットワークアドレスとして少しキリが悪く見えるかもしれません。しかし2進数で見ると、192 はきれいな境界です。

192 = 11000000

/28 では最後の8bitのうち、上位4bitがネットワーク部分、下位4bitが端末部分になります。

1100 | 1000   ← 200
^^^^   ^^^^
ネットワーク 端末

ネットワークアドレスは、そのサブネットの先頭を表す住所です。そのため端末部分をすべて 0 にします。

1100 | 1000   ← 200
1100 | 0000   ← 端末部分を0にする
       ↓
192

だから 192.168.1.200/28 は、192.168.1.192/28 というネットワークに所属します。

/28は16個ずつ区切られる

/28 は端末部分が4bitなので、16個ずつIPアドレスをグループ分けします。最後の数字だけ見ると、ネットワークアドレスは16の倍数になります。

192.168.1.0   ~ 192.168.1.15
192.168.1.16  ~ 192.168.1.31
192.168.1.32  ~ 192.168.1.47
...
192.168.1.176 ~ 192.168.1.191
192.168.1.192 ~ 192.168.1.207  ← 200はここ
192.168.1.208 ~ 192.168.1.223
192.168.1.224 ~ 192.168.1.239
192.168.1.240 ~ 192.168.1.255

200 は 192 から 207 の範囲に入っています。そのグループの先頭が 192.168.1.192 なので、これがネットワークアドレスです。

種類192.168.1.192/28 の例
ネットワークアドレス192.168.1.192
使用可能IP192.168.1.193 ~ 192.168.1.206
ブロードキャストアドレス192.168.1.207

つまり、ネットワークアドレスは必ず .0 で終わるわけではありません。.0 で終わることが多く見えるのは /24 の場合です。/28 なら、.16 や .192 も普通にネットワークアドレスになります。

まとめ

サブネットマスクは、IPアドレスのどこまでがネットワーク部分で、どこからが端末部分かを決める境界線です。192.168.1.10 のようなIPアドレスだけでは境界は決まらず、/24 や /28 の指定によって所属ネットワークが決まります。

/24 は最後の8bitが端末部分なので、192.168.1.0 のように見慣れた境界になります。一方、/28 は最後の4bitだけが端末部分なので、16個ずつ区切られ、192.168.1.192 のようなネットワークアドレスも自然に出てきます。

10進数の見た目で判断するより、サブネットマスクで端末部分を 0 にする、と考えると一気に分かりやすくなります。