/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/24 | 192.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 個です。
| CIDR | IPアドレス数 | 増え方 |
|---|---|---|
/24 | 256個 | 大きいサブネット |
/25 | 128個 | /24 の半分 |
/26 | 64個 | さらに半分 |
/27 | 32個 | さらに半分 |
/28 | 16個 | 小さいサブネット |
/ の数字が大きくなるほど、ネットワーク部分が長くなり、端末部分が短くなります。そのため、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 |
| 使用可能IP | 192.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 にする、と考えると一気に分かりやすくなります。