Back

サブネットマスクと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 = 11000000
  • 168 = 10101000
  • 1 = 00000001
  • 1 = 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個あります。 -> /24
  • 255.0.0.0は1が8個あります。 -> /8
  • 255.255.0.0は1が16個あります。 -> /16

したがって、192.168.1.1/24と書かれていれば、「ああ、先頭の24ビットがネットワークアドレスなんだな」とすぐに理解できます。

よく使うCIDRブロック早見表

CIDRサブネットマスク総IP数使用可能IP数用途
/32255.255.255.25511特定の単一ホスト(例:ファイアウォールルール)
/30255.255.255.25242ルーター間の1対1接続
/24255.255.255.0256254標準的なLAN(家庭/オフィス)
/16255.255.0.065,53665,534大規模な社内ネットワーク / AWS VPC
/8255.0.0.016M+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から始めるとすると:

  1. ネットワークアドレス: 10.0.2.0
  2. 最初の使用可能IP: 10.0.2.1
  3. ...
  4. 最後の使用可能IP: 10.0.2.14
  5. ブロードキャストアドレス: 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のサブネットを切り出して使用するのが一般的な推奨事項です。

トラブルシューティングのヒント

  1. "Destination Host Unreachable":これは多くの場合、自分のコンピュータが(サブネットマスクの設定により)宛先がローカルサブネットにあると誤認してARP要求を送っているものの、実際にはデバイスがリモートにある場合に発生します。マスク設定を確認しましょう!
  2. サブネットの重複(Overlapping):会社のVPNが192.168.1.0/24を使用しており、自宅のルーターも192.168.1.0/24を使用している場合、ルーティングが競合して通信できません。そのため、社内VPNには10.x.x.x172.16.x.x帯域を使用して、家庭用ルーターのデフォルト帯域と重ならないようにするのが一般的です。

計算を助けてくれるツール

2進数の計算を暗算で行うのは素晴らしい特技ですが、実務ではツールを使って検証する方が安全です。たった1ビットの間違いがネットワーク全体を停止させる可能性もあります。

IP範囲を素早く計算したり、使用可能なホスト数を確認したり、CIDRブロックを視覚化したい場合は、専用の計算機を使用することをお勧めします。

Pockit サブネット計算機を試す

IPとCIDRマスクを入力するだけで、ネットワークアドレス、ブロードキャストアドレス、そして使用可能なIP範囲を即座に表示します。VPCサブネットの計画やファイアウォールルールのデバッグ時に非常に役立ちます。

まとめ

サブネットマスクとCIDR表記法は、インターネットの「座標系」のようなものです。これらはトラフィックがどこへ流れ、どこで止まるべきかという境界線を定義します。2進数の計算は少し無味乾燥に感じるかもしれませんが、これをマスターすることで、堅牢でスケーラブルなネットワークを設計し、接続の問題を自信を持って解決できる能力が身につきます。

次に/24/28を目にしたとき、それは単なる数字ではなく、そのネットワークの正確な規模と範囲としてイメージできるようになっているはずです!

networkingdevopscidrsubnetip-address

関連ツールを見る

Pockitの無料開発者ツールを試してみましょう