1つの/24を部署ごとに必要な台数だけ切り出すとき、サブネット長は部署によって違って当然です。100台の部署には/25、10台の部署には/28、といった具合に必要なサイズだけ割るのがVLSM(Variable Length Subnet Mask)です。 ここで初めてVLSMをやる人がよく踏む地雷が「割る順番」です。要求が小さい部署から先に割っていくと、途中で必ず詰まります。192.168.1.0/24を100台・50台・20台・10台の4部署に割る例で、なぜ大きい順でなければいけないのかを追ってみます。

必要な台数からサブネット長を決める

ホスト数を収容できる最小のサブネット長を求めるには、「2^n - 2 ≧ 必要台数」を満たす最小のnを探します。 100台なら2^7-2=126なので/25(n=7)、50台なら2^6-2=62なので/26、20台なら2^5-2=30なので/27、10台なら2^4-2=14なので/28になります。

部署 必要台数 サブネット長 総アドレス数 使えるホスト数 A 100 /25 128 126 B 50 /26 64 62 C 20 /27 32 30 D 10 /28 16 14

ここまでは多くの解説に出てくる話です。問題はこの4つを192.168.1.0/24の中にどう配置するかです。

大きい順に割る

部署Aの/25から始めます。/24の中で/25が置けるのは192.168.1.0と192.168.1.128の2箇所しかないので、Aには192.168.1.0/25を割ります。これで192.168.1.0〜192.168.1.127が消費され、残りは192.168.1.128/25です。 次に部署Bの/26です。残った192.168.1.128/25の中で/26が置けるのは192.168.1.128と192.168.1.192の2箇所なので、Bには192.168.1.128/26を割ります。残りは192.168.1.192/26です。 部署Cの/27は、192.168.1.192/26の中の192.168.1.192か192.168.1.224のどちらかなので、Cには192.168.1.192/27を割ります。残りは192.168.1.224/27です。 最後に部署Dの/28は、192.168.1.224/27の中の192.168.1.224か192.168.1.240のどちらかなので、Dには192.168.1.224/28を割ります。192.168.1.240/28はまだ未使用のまま残り、将来の5番目の部署に使えます。

192.168.1.0/25   -> A (100台、/25)
192.168.1.128/26 -> B (50台、/26)
192.168.1.192/27 -> C (20台、/27)
192.168.1.224/28 -> D (10台、/28)
192.168.1.240/28 -> 未使用(将来用)

4部署で消費したのは128+64+32+16=240アドレス、/24の256アドレスのうち16個が手つかずで残り、無駄なく詰まっています。

サブネットの先頭が置ける位置は決まっている

大きい順に割ったとき、各部署の置ける場所が「2箇所しかない」ことに気づいたかもしれません。これは偶然ではなく、サブネットの先頭アドレスはそのサブネットのサイズの倍数でなければならない、というルールがあるためです。 /27のブロックは32個のアドレスを持つので、先頭は0、32、64、96…のように32の倍数の位置にしか置けません。これは「ネットワークアドレスはIPアドレスとサブネットマスクのAND演算で決まり、ホスト部のビットは強制的に0になる」という性質そのもので、ホスト部が0になる位置、つまりブロックサイズの倍数の位置以外にサブネットの先頭は存在しません。以下ではこの「サイズの倍数の位置にしか置けない」というルールを指して、アラインメントと呼びます。 大きいサブネットを先に置くと、残りの空間は常にその時点で最大のブロックサイズの倍数の境界から始まるため、次に置く(より小さい)サブネットのアラインメントは自動的に満たされます。逆に小さいサブネットを先に置くと、残りの空間の境界がより大きいブロックのアラインメントに乗っているとは限らず、乗っていなければ次のブロックを置くために境界まで飛ばす分だけアドレスが浮きます。

小さい順に割ると何が起きるか

同じ4部署を、要求が小さい部署Dの/28から割ってみます。/24の先頭から詰めるとすると、Dには192.168.1.0/28を割ります。 次に部署Cの/27です。192.168.1.0/28の直後は192.168.1.16ですが、/27のブロックが置けるアドレスは192.168.1.0と192.168.1.32の2箇所だけで、192.168.1.16は/27の境界に乗っていません。Cの/27を境界に乗せるには192.168.1.32/27まで飛ばす必要があり、192.168.1.16〜192.168.1.31の16アドレスがDとCの間に挟まれた隙間として浮きます。 さらに部署Bの/26を続けて割ろうとすると、192.168.1.32/27の直後である192.168.1.64は64の倍数なのでそのまま置けます。残った部署Aの/25も、Bの直後である192.168.1.128が128の倍数なので問題なく置けます。 最終的な配置は大きい順と同じ総消費アドレス数(240)に収まりますが、無駄になった16アドレスの位置が違います。大きい順ではこの16アドレスは192.168.1.240/28として末尾にまとまって残るため、5番目の部署が増えたときにそのまま割り当てられます。小さい順では192.168.1.16〜192.168.1.31という、DとCに挟まれた孤立した領域として残ってしまい、隙間の両側がすでに別の部署に使われているため、ここを使い切るには両隣のどちらかを再設計するしかありません。 今回は16、32、64、128というちょうど2倍ずつ大きくなるサイズの組み合わせだったため、小さい順でも全体としては/24に収まりました。サイズの組み合わせがこの通りに揃っていない場合は、小さいサブネットを先に詰めたことで生じる隙間が後から置く大きいサブネットのアラインメント要求を満たせず、/24の中にどう並べても全部は収まらないという事態が起こり得ます。部署が増えるほどこの手戻りのリスクは大きくなるため、最初から大きい順に割っておくのが安全です。

1991年の原案は順序ではなく番号の振り方で解決しようとしていた

VLSMの概念を最初に提示したのはRFC 1219(1991年、Tsuchiya)です。ただしそこで提案されていたのは「大きい順に割る」という運用ルールではなく、サブネット番号を高位ビットから振り、ホスト番号を低位ビットから振るという、ビットの使い方そのものを変える方式でした。 当時の発想は、サブネット数とホスト数のどちらが先に増えるか分からない以上、両方が中央の余白に向かって独立に伸びられるようにビット配置を決めておく、というものです。ホスト数が増えてもサブネット番号の再割り当てが要らないようにする狙いでした。 現在主流になっているのは、このビット配置の工夫そのものではなく、「大きい順に割って境界を自然に合わせる」という運用ルールの方です。サブネットごとに異なるマスク長を経路情報として扱えるルーティングプロトコルが普及した結果、RFC1219が懸念していた再番号化の問題は、ビット配置を工夫せず運用ルールだけで回避できる問題になりました。

部署ごとの台数からサブネット長を逆算したり、割った後のネットワークアドレス・ブロードキャストアドレスを確認したい場合は、以下のツールで計算できます。