てぶら

CIDR表記とサブネットの計算方法 — /24の意味と使えるホスト数

公開日:

クラウドのVPCやファイアウォールの設定、Dockerのネットワークなどで「10.0.0.0/16」や「192.168.1.0/24」といった表記を目にします。これがCIDR表記です。末尾の「/24」が何を意味するのかがわかると、そのネットワークにいくつのIPアドレスがあり、どこからどこまでが使えるのかを自分で計算できるようになります。この記事ではIPv4を対象に、CIDR表記の読み方とサブネットの計算方法を解説します。

CIDR表記とは

IPv4アドレスは32ビットの数値で、8ビットずつ4つに区切って「192.168.1.10」のように10進数で表します。このうち、先頭の何ビットが「ネットワーク部」(どのネットワークか)を表すかを、スラッシュの後ろの数字(プレフィックス長)で示すのがCIDR(Classless Inter-Domain Routing)表記です。残りのビットは「ホスト部」で、ネットワーク内の個々の機器を区別するのに使います。

例えば「192.168.1.0/24」は、先頭24ビット(192.168.1)がネットワーク部で、残り8ビットがホスト部という意味です。ホスト部が8ビットなので、このネットワークには2^8 = 256個のアドレスがあります。

かつてはアドレスをクラスA(/8)・クラスB(/16)・クラスC(/24)の固定の大きさで割り当てていましたが、アドレスを無駄なく使うため、1993年に任意の長さで区切れるCIDRが導入されました。現在は「クラスC」という言葉が「/24」の意味で慣用的に使われる程度です。

  • /8 → サブネットマスク 255.0.0.0、アドレス数 16,777,216
  • /16 → 255.255.0.0、65,536
  • /24 → 255.255.255.0、256
  • /25 → 255.255.255.128、128
  • /26 → 255.255.255.192、64
  • /27 → 255.255.255.224、32
  • /28 → 255.255.255.240、16
  • /29 → 255.255.255.248、8
  • /30 → 255.255.255.252、4

2進数で考えるサブネットマスク

サブネットマスクは、ネットワーク部のビットを1、ホスト部のビットを0にした32ビットの値です。/26なら先頭26ビットが1なので、最後のオクテットは「11000000」= 192になり、255.255.255.192です。

IPアドレスとサブネットマスクのビットごとのAND(両方が1のときだけ1)を取ると、ネットワークアドレスが求まります。例として「192.168.1.130/26」を計算してみます。

text
IPアドレス       192.168.1.130   11000000.10101000.00000001.10000010
サブネットマスク 255.255.255.192 11111111.11111111.11111111.11000000
                                 ------------------------------------ AND
ネットワーク     192.168.1.128   11000000.10101000.00000001.10000000
ブロードキャスト 192.168.1.191   ホスト部(末尾6ビット)をすべて1にした値

最初の3オクテットはマスクがすべて1なのでそのまま残り、最後のオクテットだけを計算すればよいことがわかります。130 = 10000010 の上位2ビット「10」だけを残すと 10000000 = 128 です。

サブネットマスクのビットを反転させた値(/26なら0.0.0.63)は「ワイルドカードマスク」と呼ばれ、CiscoのACLやOSPFの設定で使われます。10進数と2進数の変換に慣れないうちは、進数変換ツールで1オクテットずつ確かめると理解しやすくなります。

ネットワークアドレス・ブロードキャストと使えるホスト数

サブネットの中の最初のアドレス(ホスト部がすべて0)は「ネットワークアドレス」でネットワーク自体を表し、最後のアドレス(ホスト部がすべて1)は「ブロードキャストアドレス」でネットワーク内の全機器への一斉送信に使います。この2つは機器に割り当てられないため、使えるホスト数は次の式で求めます。

text
使えるホスト数 = 2^(32 - プレフィックス長) - 2

/24 → 2^8 - 2 = 254(192.168.1.1 〜 192.168.1.254)
/26 → 2^6 - 2 = 62
/30 → 2^2 - 2 = 2(ルーター同士の接続などに使われてきた)

ただし、/31と/32は例外です。

  • /31: アドレスは2つだけ。通常の計算では使えるホストが0になるが、RFC 3021により、2台を直結するポイントツーポイント回線では両方のアドレスを機器に割り当てられる。/30より2つ多くのアドレスを節約できる
  • /32: アドレス1つだけを表す。ファイアウォールやセキュリティグループで「この1台だけを許可する」ときや、ループバックインターフェースのアドレス指定に使う

クラウドでは、さらに予約されるアドレスがあります。例えばAWSのVPCやAzureの仮想ネットワークでは、各サブネットの先頭4つと最後の1つ、合計5つのアドレスが予約されるため、/24のサブネットで実際に使えるのは251個です。クラウドでサブネットを設計するときは、各サービスのドキュメントで予約数を確認しておきましょう。

サブネットを分割するときの考え方

1つのネットワークを小さなサブネットに分けることを「サブネット分割」と呼びます。プレフィックス長を1増やすごとに、ネットワークは半分の大きさ2つに分かれます。例えば192.168.1.0/24を/26で分割すると、64個ずつの4つのサブネットになります。

  • 192.168.1.0/26(.0〜.63)
  • 192.168.1.64/26(.64〜.127)
  • 192.168.1.128/26(.128〜.191)
  • 192.168.1.192/26(.192〜.255)

サブネットの開始位置は、そのサイズの倍数でなければなりません。/26(64個)なら .0・.64・.128・.192 のいずれかから始まり、「192.168.1.100/26」と書いても、そのアドレスが属するネットワークは192.168.1.64/26です。設定ファイルにネットワークアドレス以外の値を書くと、エラーになったり、意図と違う範囲として解釈されたりするので注意してください。

サブネットを設計するときは、各サブネットで必要な台数に余裕を持たせることと、ほかのネットワークと範囲が重ならないようにすることが大切です。特にVPN接続やVPCピアリングで別のネットワークとつなぐ予定がある場合、アドレス範囲が重複しているとルーティングできません。後から範囲を変えるのは大変なので、最初の段階で全体の割り当て計画を立てておきましょう。

プライベートIPアドレスの範囲と特別なアドレス

社内ネットワークや家庭のLAN、クラウドのVPCでは、インターネット上で使われない「プライベートIPアドレス」を使います。範囲はRFC 1918で次の3つが定められています。

  • 10.0.0.0/8(10.0.0.0 〜 10.255.255.255)
  • 172.16.0.0/12(172.16.0.0 〜 172.31.255.255)
  • 192.168.0.0/16(192.168.0.0 〜 192.168.255.255)

172.16.0.0/12は「172.16.x.x」だけでなく、172.31.255.255までを含む点を見落としがちです。Dockerは既定でこの範囲(172.17.0.0/16など)を使うため、社内ネットワークやVPNと範囲が重なって通信できなくなるトラブルがよく起こります。

このほかにも、用途が決まっている特別なアドレス範囲があります。

  • 127.0.0.0/8: ループバック(自分自身)。127.0.0.1 が localhost
  • 169.254.0.0/16: リンクローカル。DHCPでアドレスを取得できなかったときに自動で割り当てられる。クラウドのメタデータサービス(169.254.169.254)もこの範囲
  • 100.64.0.0/10: キャリアグレードNAT(CGNAT)用の共有アドレス(RFC 6598)
  • 192.0.2.0/24・198.51.100.0/24・203.0.113.0/24: ドキュメントや例示用(RFC 5737)
  • 0.0.0.0/0: すべてのIPv4アドレス。ルーティングのデフォルトルートや「どこからでも許可」の指定に使う

このサイトのIPアドレス計算ツールでは、「192.168.1.10/24」のようにIPv4アドレスとプレフィックス長を入力すると、ネットワークアドレス・ブロードキャストアドレス・サブネットマスク・ワイルドカードマスク・使えるホストの範囲と数を計算し、IPアドレスとマスクの2進数表記も表示します。/31と/32も上記の特例に従って計算されます。