IPv4 サブネット計算

任意の IPv4 CIDR または「IP+マスク」からネットワーク・ブロードキャスト・最初と最後の利用可能ホスト・ネットマスク・ホスト総数を計算。

暗算せずにサブネットを設計。 CIDR プレフィックス付きの IPv4(例 192.168.1.10/24)またはドット付きマスクを入力すると、ネットワーク・ブロードキャスト・最初と最後の利用可能ホスト・ネットマスク・収容ホスト数を取得。ローカル計算。

ネットワークアドレス
ブロードキャストアドレス
最初の利用可能ホスト
最後の利用可能ホスト
ネットマスク
利用可能ホスト数

サブネットを読み解く

プレフィックス長が固定しているもの

サブネットはベースアドレスとプレフィックス長の組み合わせです。プレフィックスは 32 ビットのうち何ビットがネットワーク識別子として固定されるかを示し、残りがホストの列挙に使えます。/24 は先頭 24 ビットを固定し、ホストビットが 8 ビット残るので 256 アドレスになります。プレフィックスを 1 ビット増やすたびにブロックは半分になり、/25 は 128、/26 は 64 という具合です。

サブネットマスクは同じ内容をアドレス形式で書いたもので、固定ビットを 1 にします。255.255.255.0 は 1 が 24 個続いたあとに 0 が 8 個並んだ状態です。ワイルドカードマスクはその反転でホスト部を示します。Cisco 機器の ACL はマスクではなくワイルドカードで書くため、ベンダーをまたぐときに混乱しがちです。

ネットワークアドレス、ブロードキャスト、その間のホスト

ホストビットをすべて 0 にするとブロック内で最小のネットワークアドレスになり、すべて 1 にすると最大のブロードキャストアドレスになります。どちらもインターフェースには割り当てられません。ここから「2 を引く」という定番が生まれます。/24 は 256 アドレスありますが、使えるホストは 254 です。

実運用ではもう 1 つ減るのが普通です。ルーターやデフォルトゲートウェイが 1 つ占有し、慣習的に最初か最後の利用可能アドレスを使います。規則ではなく慣習ですが、サブネットの規模を決めるときは見込んでおく価値があります。

/31 と /32 という例外

2 を引く規則は小さい側で破綻します。/32 はホストビットがまったくない単一アドレスで、ループバック、ホストルート、証明書の SAN に使います。/31 はアドレスが 2 つだけで、RFC 3021 はポイントツーポイントリンクで両方を使うことを認めています。端点がちょうど 2 つのリンクにブロードキャストは不要だからです。RFC 3021 以前はリンクごとに /30 を消費し、4 つのうち 2 つを捨てていました。

CIDR 表記かドット付きマスクか

どちらも同じことを表しており、この計算機は両方を受け付けます。192.168.1.0/24192.168.1.0 255.255.255.0 は同じ結果になります。なお正当なマスクは 1 が連続したあとに 0 が続く形でなければなりません。255.0.255.0 のようなものは有効なマスクではなく、これを黙って受け入れる計算機の出力は信用できません。

オープンソースに関する注記:バニラ JavaScript で実装。サードパーティライブラリは使用していません。

よくある質問

なぜ利用可能数から 2 つ引くのですか?
先頭のアドレスはネットワーク自体を表し、末尾はブロードキャストアドレスで、どちらもホストに割り当てられないためです。したがって /24 では 256 − 2 = 254 個が利用可能になります。
プレフィックス長の代わりにドット付きマスクを入力できますか?
できます。192.168.1.0/24 と 192.168.1.0 255.255.255.0 の結果は同一です。マスクを付けないアドレスは /32 として扱われます。
/31 の場合はどうなりますか?
RFC 3021 はポイントツーポイントリンクでの /31 を認めており、両方のアドレスが利用可能でブロードキャストは存在しません。本計算機は 0 ではなく 2 ホストと表示します。
マスクが拒否されたのはなぜですか?
有効なマスクは連続した 1 のビットの後に 0 のビットだけが続く形です。255.255.0.255 のように途中で途切れる値に対応するプレフィックス長は存在しません。
ネットワークアドレスと最初のホストの違いは何ですか?
ネットワークアドレスはブロックの起点で、最初のホストはその次のアドレスです。192.168.1.0/24 ではそれぞれ 192.168.1.0 と 192.168.1.1 になります。
VLSM の設計に使えますか?
使えます。必要なプレフィックス長ごとにブロックを求め、割り当てる前に得られた範囲どうしが重ならないことを確認してください。