サブネットマスクとCIDRの完全ガイド(計算方法付き)
多くのアプリケーション開発者にとって、ネットワークは少し敷居が高く感じられる分野かもしれません。普段はデータベースやAPIと通信するコードを書いていても、いざVPC(Virtual Private Cloud)の設定や接続トラブルのデバッグとなると、「サブネットマスク」や「/24」といった用語に戸惑うこともあるのではないでしょうか。
しかし、**サブネットマスク(Subnet Mask)とCIDR(Classless Inter-Domain Routing)**を理解することは、現代のソフトウェアエンジニアリングにおいて非常に重要です。Kubernetesクラスターの構築、AWSセキュリティグループの設定、あるいはローカルのDockerコンテナがホストと通信できない原因の調査など、これらの概念はあらゆる場面で登場します。
この記事では、IPアドレスの仕組みを紐解き、サブネット化(Subnetting)がどのように機能するのか、そしてネットワーク範囲をどのように計算すればよいのか(あるいは計算機に何を入力すべきか)を詳しく解説します。
IPアドレスの解剖学
サブネットの話に入る前に、IPv4アドレスの実体について簡単におさらいしましょう。192.168.1.1のようなIPアドレスは、実は32ビットの2進数を人間が読みやすいように表現したものです。
ドット(.)で区切られた各数値は**オクテット(Octet)**と呼ばれます。これは8ビットを表しているためです。
192=11000000168=101010001=000000011=00000001
つまり、192.168.1.1はコンピュータにとっては11000000.10101000.00000001.00000001というデータなのです。
これがなぜ重要なのでしょうか?それは、サブネット化が完全に「ビット演算」の世界だからです。ネットワーク機器は10進数の数字ではなく、ビットの並びを見て判断しています。
サブネットマスクとは何か?
IPアドレスには2つの役割があります。1つは自分が属しているネットワークを識別すること、もう1つはそのネットワーク内での特定の**ホスト(機器)**を識別することです。
しかし、ルーターは192.168.1.1のどこまでがネットワークアドレスで、どこからがホストアドレスなのかをどうやって知るのでしょうか?そこで登場するのがサブネットマスクです。
サブネットマスクは一種のフィルターのような役割を果たします。これは1が連続し、その後に0が続く32ビットの数列です。
- 1の部分:ネットワーク部
- 0の部分:ホスト部
例:一般的なクラスCマスク
最もよく目にするサブネットマスクである255.255.255.0を見てみましょう。
これを2進数にすると以下のようになります:
11111111.11111111.11111111.00000000
このマスクをIPアドレス192.168.1.1に適用すると:
- ネットワーク部: 最初の24ビット(1と一致する部分) ->
192.168.1 - ホスト部: 最後の8ビット(0と一致する部分) ->
.1
これはつまり、IPが192.168.1で始まるすべてのデバイスは同じローカルネットワーク(LAN)内にあることを意味します。これらのデバイスはゲートウェイを経由せずに直接通信できます。もし宛先IPが192.168.2で始まる場合は、別のネットワークとなるため、ルーティングが必要になります。
CIDR表記法の登場("/24"のような表記)
毎回255.255.255.0と書くのは面倒です。1993年、IETFは従来の非効率的な「クラスA/B/C」システムを置き換え、ルーティング効率を向上させるために**CIDR(Classless Inter-Domain Routing)**を導入しました。
CIDR表記法は、サブネットマスクを非常にシンプルに表現します。単にマスク内の1の数を数えるだけです。
255.255.255.0は1が24個あります。 ->/24255.0.0.0は1が8個あります。 ->/8255.255.0.0は1が16個あります。 ->/16
したがって、192.168.1.1/24と書かれていれば、「ああ、先頭の24ビットがネットワークアドレスなんだな」とすぐに理解できます。
よく使うCIDRブロック早見表
| CIDR | サブネットマスク | 総IP数 | 使用可能IP数 | 用途 |
|---|---|---|---|---|
| /32 | 255.255.255.255 | 1 | 1 | 特定の単一ホスト(例:ファイアウォールルール) |
| /30 | 255.255.255.252 | 4 | 2 | ルーター間の1対1接続 |
| /24 | 255.255.255.0 | 256 | 254 | 標準的なLAN(家庭/オフィス) |
| /16 | 255.255.0.0 | 65,536 | 65,534 | 大規模な社内ネットワーク / AWS VPC |
| /8 | 255.0.0.0 | 16M+ | 16M+ | クラスAブロック全体(例:10.0.0.0/8) |
注:「使用可能IP数」は常に総IP数から2を引いた数になります。1つはネットワークアドレス(ホストビットがすべて0)、もう1つはブロードキャストアドレス(ホストビットがすべて1)として予約されているためです。
実践!サブネット計算
新しいオフィスのネットワークを設計すると仮定しましょう。10.0.0.0/16の帯域を割り当てられました。これを部署ごとに分割したいとします。
シナリオ1:開発チームに/24を割り当てる
開発チームには余裕を持って/24ブロックを与えることにしました。
- ベース:
10.0.0.0 - サブネット:
10.0.1.0/24
これにより、10.0.1.1から10.0.1.254までのIPを使用できます。
シナリオ2:少し複雑な/28の計算
数台のサーバーしかない小規模なネットワークが必要で、IPは10個程度あれば十分だとします。/24を使うのは無駄が多いですね。/28を使ってみましょう。
/28マスクはネットワーク28ビット、ホスト4ビット(32 - 28 = 4)です。- 総IP数 = 2の4乗 = 16個。
- 使用可能IP数 = 16 - 2 = 14個。
ちょうど良いサイズです。もし10.0.2.0/28から始めるとすると:
- ネットワークアドレス:
10.0.2.0 - 最初の使用可能IP:
10.0.2.1 - ...
- 最後の使用可能IP:
10.0.2.14 - ブロードキャストアドレス:
10.0.2.15
次のサブネットは、その直後の10.0.2.16/28から始まります。
クラウドコンピューティングでの重要性
AWS、Azure、GCPなどのクラウド環境では、VPCを作成する際にCIDRブロックを指定する必要があります。よくある間違いの一つが、小さすぎるブロックを選択してしまうことです。
もし10.0.0.0/24(254 IP)でVPCを作成し、EKS(Kubernetes)クラスターを起動しようとすると、PodごとにIPが1つ必要なため、瞬く間にIPが枯渇してしまいます。通常、VPCは/16(6万5千個)程度で大きく確保し、アベイラビリティーゾーン(AZ)ごとに/20や/24のサブネットを切り出して使用するのが一般的な推奨事項です。
トラブルシューティングのヒント
- "Destination Host Unreachable":これは多くの場合、自分のコンピュータが(サブネットマスクの設定により)宛先がローカルサブネットにあると誤認してARP要求を送っているものの、実際にはデバイスがリモートにある場合に発生します。マスク設定を確認しましょう!
- サブネットの重複(Overlapping):会社のVPNが
192.168.1.0/24を使用しており、自宅のルーターも192.168.1.0/24を使用している場合、ルーティングが競合して通信できません。そのため、社内VPNには10.x.x.xや172.16.x.x帯域を使用して、家庭用ルーターのデフォルト帯域と重ならないようにするのが一般的です。
計算を助けてくれるツール
2進数の計算を暗算で行うのは素晴らしい特技ですが、実務ではツールを使って検証する方が安全です。たった1ビットの間違いがネットワーク全体を停止させる可能性もあります。
IP範囲を素早く計算したり、使用可能なホスト数を確認したり、CIDRブロックを視覚化したい場合は、専用の計算機を使用することをお勧めします。
IPとCIDRマスクを入力するだけで、ネットワークアドレス、ブロードキャストアドレス、そして使用可能なIP範囲を即座に表示します。VPCサブネットの計画やファイアウォールルールのデバッグ時に非常に役立ちます。
まとめ
サブネットマスクとCIDR表記法は、インターネットの「座標系」のようなものです。これらはトラフィックがどこへ流れ、どこで止まるべきかという境界線を定義します。2進数の計算は少し無味乾燥に感じるかもしれませんが、これをマスターすることで、堅牢でスケーラブルなネットワークを設計し、接続の問題を自信を持って解決できる能力が身につきます。
次に/24や/28を目にしたとき、それは単なる数字ではなく、そのネットワークの正確な規模と範囲としてイメージできるようになっているはずです!
関連ツールを見る
Pockitの無料開発者ツールを試してみましょう