IPプロトコルはカスタマイズと最適化が可能であり、サブネット化により、異なるネットワークのIPアドレス要求を満たし、ネットワークの階層化を実現することで、ネットワークの簡素化とIPアドレスの節約に貢献します。デフォルトのサブネットマスクをさらに分割する手法は、可変長サブネットマスク(VLSM)と呼ばれます。
クラスA、B、Cのネットワークを使用する場合、デフォルトのサブネットマスクではアドレス範囲が大きすぎるか、小さすぎるという問題が生じます。例えば、8台の機器にクラスAアドレスを割り当てる場合、クラスAのアドレス空間は膨大ですが、8台の機器にそれを割り当てるのは非効率的です。サブネット化を用いることで、クラスAアドレスのホスト部分を8台の機器に適合するように調整できます。
サブネットマスクの概要
サブネットマスクは32ビットのバイナリ数値で、IPアドレスのネットワーク部とホスト部を識別するために使用されます。サブネット化を行わず、クラスA、B、Cといったネットワークタイプで分割する場合、各クラスのデフォルトサブネットマスクは、バイナリで連続する1がクラスごとに決まっており、これを10進数に変換した値となります。
| ネットワークタイプ | サブネットマスクのバイナリ表現 |
|---|---|
| クラスAネットワーク(8ビットマスク) | 11111111 00000000 00000000 00000000 |
| クラスBネットワーク(16ビットマスク) | 11111111 11111111 00000000 00000000 |
| クラスCネットワーク(24ビットマスク) | 11111111 11111111 11111111 00000000 |
サブネットマスクは、IPアドレスとのバイナリAND演算に使用され、ネットワーク部とホスト部を分離します。この演算により、各ネットワークセグメントで利用可能なホスト数の最大値も算出できます。サブネットマスクの1はネットワーク部、0はホスト部を示します。
AND演算の規則は1 & 1 = 1、それ以外は0です。例えば、IPアドレス192.168.1.1/24(マスク長24ビット)の場合、計算は以下のようになります。
IPアドレス: 11000000 10101000 00000001 00000001 サブネットマスク: 11111111 11111111 11111111 00000000 ---------------------------------------------------- AND演算結果: 11000000 10101000 00000001 00000000 -> 10進数: 192.168.1.0 (ネットワーク部)
ホスト部は8ビットで構成され、すべてのビットが1の場合、10進数で255となります。これは、このネットワークセグメントで最大255台のホストが利用可能であることを示唆しますが、実際にはネットワークアドレス(すべて0)とブロードキャストアドレス(すべて1)として予約されているため、実際に割り当て可能なホストIPアドレスは254台です。
ホスト部も同様にバイナリ演算で特定できますが、サブネットマスクのビットを反転させたもの(NOT演算)を使用します。サブネットマスクの1を0に、0を1に変換します。
IPアドレス: 11000000 10101000 00000001 00000001 サブネットマスク反転: 00000000 00000000 00000000 11111111 ---------------------------------------------------- AND演算結果: 00000000 00000000 00000000 00000001 -> 10進数: 0.0.0.1 (ホスト部における位置)
実践例:201.222.200.111/18 のホスト数とサブネットマスクの計算
まず、IPアドレスとサブネットマスクをバイナリに変換します。
201.222.200.111 -> 11001001 11011110 11001000 01101111 (IPアドレスのバイナリ) /18 -> 11111111 11111111 11000000 00000000 (サブネットマスクのバイナリ)
サブネットマスクを10進数に変換すると、255.255.192.0となります。32ビットのサブネットマスクのうち、ネットワーク部が18ビットを占めるため、ホスト部は 32 - 18 = 14ビットとなります。
14ビットのホスト部で表現できる値の範囲は、バイナリで00000000000000から11111111111111までです。これは10進数で0から16383に相当します。したがって、表現可能な値の総数は 16384 個です。
このうち、ネットワークアドレス(ホスト部がすべて0)とブロードキャストアドレス(ホスト部がすべて1)は特別な意味を持つため、使用できません。したがって、実際に利用可能なホストIPアドレスの数は 16384 - 2 = 16382 個となります。
利用可能なホストIPアドレスの範囲は、ホスト部の最小値が00000000000001、最大値が11111111111110となる範囲です。
- 最小の利用可能IPアドレス(ネットワーク部 + ホスト部最小値):
201.222.192.1 - 最大の利用可能IPアドレス(ネットワーク部 + ホスト部最大値):
201.222.255.254
まとめ:
- 利用可能IPアドレス数: 16382
- サブネットマスク: 255.255.192.0
- ネットワークアドレス: 201.222.192.0
- IPアドレス利用範囲: 201.222.192.1 ~ 201.222.255.254
- ブロードキャストアドレス: 201.222.255.255
A (10.0.1.1/16) と B (10.0.2.2/24) の通信可能性の判断
同一ネットワークセグメントに属しているかどうかは、IPアドレスとサブネットマスクを用いてネットワークアドレスを比較することで判断できます。両方のIPアドレスとサブネットマスクをバイナリに変換します。
A: IPアドレス: 00001010 00000000 00000001 00000001 サブネットマスク: 11111111 11111111 00000000 00000000 (10進数: 255.255.0.0) B: IPアドレス: 00001010 00000000 00000010 00000010 サブネットマスク: 11111111 11111111 11111111 00000000 (10進数: 255.255.255.0)
それぞれのネットワークアドレスを計算します。
Aのネットワークアドレス: IPアドレス: 00001010 00000000 00000001 00000001 サブネットマスク: 11111111 11111111 00000000 00000000 ----------------------------------- AND演算結果: 00001010 00000000 00000000 00000000 -> 10進数: 10.0.0.0 Bのネットワークアドレス: IPアドレス: 00001010 00000000 00000010 00000010 サブネットマスク: 11111111 11111111 11111111 00000000 ----------------------------------- AND演算結果: 00001010 00000000 00000010 00000000 -> 10進数: 10.0.2.0
AがBに通信しようとする場合、Aは自身のサブネットマスクとBのIPアドレスでAND演算を行います。
BのIPアドレス: 00001010 00000000 00000010 00000010 Aのサブネットマスク: 11111111 11111111 00000000 00000000 ----------------------------------- AND演算結果: 00001010 00000000 00000000 00000000 -> 10進数: 10.0.0.0
Aは、BのIPアドレスを自身のサブネットマスクで処理した結果が自身のネットワークアドレス(10.0.0.0)と一致するため、Bが同一ネットワークセグメントにいると判断し、Pingパケットを送信します。しかし、Bが応答を返す際、Bは自身のサブネットマスクとAのIPアドレスでAND演算を行います。
AのIPアドレス: 00001010 00000000 00000001 00000001 Bのサブネットマスク: 11111111 11111111 11111111 00000000 ----------------------------------- AND演算結果: 00001010 00000000 00000001 00000000 -> 10進数: 10.0.1.0
Bは、AのIPアドレスを自身のサブネットマスクで処理した結果が、自身のネットワークアドレス(10.0.2.0)と一致しない(10.0.1.0になった)ため、Aが異なるネットワークセグメントにいると判断し、Ping応答を返しません。
結論:
- AとBは異なるネットワークセグメントに属しています。
- AとBは直接通信できません。
10.0.0.0/8 を 32 個のサブネットに分割する方法
10.0.0.0/8というネットワークアドレスをバイナリで表現すると、以下のようになります。ここで10.0.0.0はIPアドレスではなくネットワークアドレスです。
ネットワークアドレス: 00001010 00000000 00000000 00000000 デフォルトマスク: 11111111 00000000 00000000 00000000 (10進数: 255.0.0.0)
32個のサブネットを作成するには、デフォルトのマスクに何ビット追加すれば32個のサブネットが表現できるかを計算します。サブネットの数は 2n で表され、ここで n は追加するビット数です。
- 21 = 2
- 22 = 4
- 23 = 8
- 24 = 16
- 25 = 32
したがって、5ビットを追加する必要があります。デフォルトのマスクの8ビットに5ビットを追加すると、合計13ビットのサブネットマスクになります。
新しいサブネットマスクは以下のようになります。
11111111 11111000 00000000 00000000 -> 10進数: 255.248.0.0 (CIDR表記: /13)
ホスト部は 32 - 13 = 19ビットとなります。19ビットで表現できるホストの総数は 219 = 524,288 個です。ネットワークアドレスとブロードキャストアドレスを除くと、各サブネットで利用可能なホスト数は 524,288 - 2 = 524,286 個となります。
サブネットマスク 255.248.0.0 のバイナリ表現は 11111111 11111000 00000000 00000000 です。サブネットを決定する13番目のビット(2番目のオクテットの5番目のビット)の10進数での値は 2(8-5) = 23 = 8 です。これにより、IPアドレスの2番目のオクテットは8ずつ増加することで、各サブネットのネットワークアドレスが決定されます。
各サブネットの情報は以下の表のようになります:
| サブネット番号 | ネットワークアドレス (/13) | 利用可能IPアドレス範囲 | ブロードキャストアドレス |
|---|---|---|---|
| 0 | 10.0.0.0 | 10.0.0.1 - 10.7.255.254 | 10.7.255.255 |
| 1 | 10.8.0.0 | 10.8.0.1 - 10.15.255.254 | 10.15.255.255 |
| 2 | 10.16.0.0 | 10.16.0.1 - 10.23.255.254 | 10.23.255.255 |
| 3 | 10.24.0.0 | 10.24.0.1 - 10.31.255.254 | 10.31.255.255 |
| 4 | 10.32.0.0 | 10.32.0.1 - 10.39.255.254 | 10.39.255.255 |
| 5 | 10.40.0.0 | 10.40.0.1 - 10.47.255.254 | 10.47.255.255 |
| 6 | 10.48.0.0 | 10.48.0.1 - 10.55.255.254 | 10.55.255.255 |
| 7 | 10.56.0.0 | 10.56.0.1 - 10.63.255.254 | 10.63.255.255 |
| 8 | 10.64.0.0 | 10.64.0.1 - 10.71.255.254 | 10.71.255.255 |
| 9 | 10.72.0.0 | 10.72.0.1 - 10.79.255.254 | 10.79.255.255 |
| 10 | 10.80.0.0 | 10.80.0.1 - 10.87.255.254 | 10.87.255.255 |
| 11 | 10.88.0.0 | 10.88.0.1 - 10.95.255.254 | 10.95.255.255 |
| 12 | 10.96.0.0 | 10.96.0.1 - 10.103.255.254 | 10.103.255.255 |
| 13 | 10.104.0.0 | 10.104.0.1 - 10.111.255.254 | 10.111.255.255 |
| 14 | 10.112.0.0 | 10.112.0.1 - 10.119.255.254 | 10.119.255.255 |
| 15 | 10.120.0.0 | 10.120.0.1 - 10.127.255.254 | 10.127.255.255 |
| 16 | 10.128.0.0 | 10.128.0.1 - 10.135.255.254 | 10.135.255.255 |
| 17 | 10.136.0.0 | 10.136.0.1 - 10.143.255.254 | 10.143.255.255 |
| 18 | 10.144.0.0 | 10.144.0.1 - 10.151.255.254 | 10.151.255.255 |
| 19 | 10.152.0.0 | 10.152.0.1 - 10.159.255.254 | 10.159.255.255 |
| 20 | 10.160.0.0 | 10.160.0.1 - 10.167.255.254 | 10.167.255.255 |
| 21 | 10.168.0.0 | 10.168.0.1 - 10.175.255.254 | 10.175.255.255 |
| 22 | 10.176.0.0 | 10.176.0.1 - 10.183.255.254 | 10.183.255.255 |
| 23 | 10.184.0.0 | 10.184.0.1 - 10.191.255.254 | 10.191.255.255 |
| 24 | 10.192.0.0 | 10.192.0.1 - 10.199.255.254 | 10.199.255.255 |
| 25 | 10.200.0.0 | 10.200.0.1 - 10.207.255.254 | 10.207.255.255 |
| 26 | 10.208.0.0 | 10.208.0.1 - 10.215.255.254 | 10.215.255.255 |
| 27 | 10.216.0.0 | 10.216.0.1 - 10.223.255.254 | 10.223.255.255 |
| 28 | 10.224.0.0 | 10.224.0.1 - 10.231.255.254 | 10.231.255.255 |
| 29 | 10.232.0.0 | 10.232.0.1 - 10.239.255.254 | 10.239.255.255 |
| 30 | 10.240.0.0 | 10.240.0.1 - 10.247.255.254 | 10.247.255.255 |
| 31 | 10.248.0.0 | 10.248.0.1 - 10.255.255.254 | 10.255.255.255 |