コンピューターサイエンス入門:理論編
CIDR プレフィックスからネットマスクを作る
この回でやること
CIDRの長さからネットマスクを読み解き、ANDで許可範囲に入るかを確かめます。
- 読む 約 7 分
- 最後にクイズ 1 問
設定に 192.168.0.0/16 と書いたとき、あるIPがこの範囲に入っているかを、どう判定するのでしょうか。IPのビットをANDで絞り、基準と比べます。その道具がネットマスクです。
上から何ビットを比べるか
CIDRの /16 や /24 は、IPv4の32ビットのうち、上から何ビットがネットワークを表すかを示します。この数をプレフィックス長と呼びます。IPそのものを書き換える指示ではありません。
/24 なら上の24ビットが一致する範囲です。残り8ビットでアドレスを区別します。/32 は1つのIPだけ、/0 はすべてのIPv4を対象にします。アドレスの総数と機器に割り当てられる数は別です。
比べる上位ビットだけを1にする
ネットマスクは、ネットワーク側を1、残りを0にした32ビットの値です。/24 なら上から24個の1が並びます。
プレーンテキスト
/24のマスク
11111111 11111111 11111111 00000000
16進数では FF FF FF 00
点で区切ると 255.255.255.08個の1は255です。区切りが8ビットの途中に来ると、そのオクテットは255でも0でもありません。たとえば /20 では3つ目が 11110000 で、128 + 64 + 32 + 16 = 240です。マスクは 255.255.240.0 になります。
下位を1にするマスクは、ハッシュ値を16個の入れ物へ振り分ける場面などで使います。下4ビットを残すマスクは 00001111、値は15です。ネットマスクは逆に、上位から1を並べるので区別します。
/0 は 0.0.0.0、/32 は 255.255.255.255 です。JavaScriptで32ビットずらすと移動量は0扱いになるため、端のマスクは別に考えます。
ANDで下位を消してから比較する
ANDは、両方が1のビットだけを残します。マスクの0の位置は必ず0になるので、ネットワーク部分だけを取り出せます。IPと基準の両方に同じマスクを当て、残った値を比べます。
現場のルーターは宛先IPと経路を照合し、複数が一致すれば最も長いプレフィックスを選びます。比べる桁が多いほど、範囲が狭くなるためです。
例題で確かめる
192.168.1.42 が 192.168.1.0/24 に入るかを考えます。マスクは 255.255.255.0 です。上の3つは残り、最後は0になります。
プレーンテキスト
192.168.1.42 AND 255.255.255.0 → 192.168.1.0
192.168.1.0 AND 255.255.255.0 → 192.168.1.0結果が一致するので範囲内です。192.168.2.42 なら 192.168.2.0 が残り、基準と違うので範囲外になります。