サブネットマスクが32ビットのどこに境い目を引いているかを覗く
10.1.50.10 という4つの数字は、裏では32個の0と1を8個ずつ4つのオクテットに束ねたもの、と分解する目はもう手元にある。画面に見えている10進と、機械が扱っている2進、同じアドレスを2つの書き方で行き来できる。
ここで一度、自席に戻って、もう一度 ipconfig を叩いてみてほしい。
IPv4 Address. . . . . . . . . . . : 10.1.50.10
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.1.50.1
ここまでは1行目の 10.1.50.10 だけを見ていた。でも、そのすぐ下に、もう一行並んでいる数字がある。
Subnet Mask . . . . . . . . . . . : 255.255.255.0
毎日視界に入っていたはずだ。設定画面の隅、トラブル報告のスクショ、新人研修の資料。どこでも IPv4 Address とセットで、当たり前のように並んでいた。
でも、この2行目をちゃんと読めているか、自分に一度だけ問い直してみてほしい。255.255.255.0 は何を決めている数字なのか。
一瞬、返事に詰まるはずだ。「なんとなく、ネットワークを区切るやつ」「255 が多いから大事そう」くらいの手触りはあるかもしれない。けれど、これが具体的に IP のどこに、どう効いているのかと聞かれると、まだ手応えがない。
この2行目の役割を、ここから順に解いていく。
サブネットマスクは、IPアドレスの32ビットの上に、ネットワーク部とホスト部の境い目を外から指定する道具。その境い目から左がネットワーク部、右がホスト部。IPアドレス自体は1ビットも書き換わらない。
この境い目を一度そういう目で見られれば、10.1.50.10 と 10.1.50.20 が同じネットワークの端末なのか、10.1.50.10 と 10.1.51.20 が違うネットワークの端末なのか、見るだけで判定できるようになる。


Subnet Mask の 32 ビット — 1 と 0 の切り替わりがネットワーク部とホスト部の線
まず、マスクが IPアドレスに対してどんな立ち位置にいるかを確かめておく。
IPアドレスは内側では 32 個の 0 と 1 でできている。10.1.50.10 は、裏では 00001010 00000001 00110010 00001010 という一列の 32 ビットだ。ここはすでに手元にある。
サブネットマスクも、同じ 32bit だ。IPアドレスと桁数がぴたりと揃う、ペアになる数字だと思っておけばいい。
では 255.255.255.0 の裏側を覗いてみよう。ここが今日いちばん大事な図だ。


上段が、自分のPCの IPアドレス 10.1.50.10 の 32 ビット。ここは前段で、分解して読めるようになった姿だ。
下段が、マスク 255.255.255.0 の 32 ビット。よく見ると、とても素直な形をしている。左端から 1 が並び、途中で 0 に切り替わって、右端まで 0 が続く。この例では、1 が 24 個続いたあと、0 が 8 個続いて終わる。
なぜこんな並びになるのか。各オクテットの10進が何を表しているかを思い出してほしい。
255= 8 個の 1 すべて(=11111111)0= 8 個の 0 すべて(=00000000)
だから 255.255.255.0 は、前半に「全部 1 のオクテット」が 3 つ、後半に「全部 0 のオクテット」が 1 つという形になる。1 の並び = 24 個、0 の並び = 8 個、合わせて 32 個。ぴたり収まる。
一つだけ先に言っておくと、マスクは必ずこの形 — 左側に 1 が並び、右側に 0 が並び、途中で混ざらない — で書かれる。これはルール上そうなっている(RFC 1812 で「連続する 1 と連続する 0、間に他のビットを挟まない」と正式に決まっている)。
だから、マスクを見たときに意識するのは、ただ一つ。
「1 と 0 の切り替わりがどこにあるか」。この切り替わりの位置が、IPアドレスのネットワーク部とホスト部を分ける境界そのものだ。
サブネットマスクは IPアドレスと同じ 32 ビット。裏側を覗くと、左側に 1 がずらっと並び、右側に 0 がずらっと並んだ形をしていて、1 と 0 の切り替わりの位置 — それだけが情報として効いている。
マスクの 1 がネットワーク部、0 がホスト部
境界の位置が見えたら、次は、その境界が IPアドレスに対して何を決めているかだ。
結論から言うと、マスクを IPアドレスに重ねたとき、1 が並んでいる範囲の IPアドレスのビットがネットワーク部、0 が並んでいる範囲のビットがホスト部になる。
もう一度 10.1.50.10 に 255.255.255.0 を重ねた姿を見よう。


マスクの 1 が並んでいる上位 24 個のビットに対応する IP の部分は、00001010 00000001 00110010 — 10進に戻すと 10.1.50。これがネットワーク部だ。
マスクの 0 が並んでいる下位 8 個のビットに対応する IP の部分は、00001010 — 10進に戻すと 10。これがホスト部だ。
つまり、10.1.50.10 はマスク 255.255.255.0 のもとでは、**「ネットワーク 10.1.50.0/24 に属する、ホスト 10」**と読める。
ここで一つ、強調しておきたいことがある。
IPアドレス自体は、何も変わっていない。
10.1.50.10 の 32 個のビットは 1 つも書き換わっていない。マスクが外から「ここまでがネットワーク部、ここからはホスト部」という境界を指定したことで、同じ IPアドレスの読み方が決まっただけだ。
もしこれが 255.255.0.0 のような別のマスクだったら、境界は前に 8 ビット戻り、ネットワーク部は 10.1 まで、ホスト部は 50.10 になる。IPアドレスは同じ 10.1.50.10 のまま、境界の位置だけが動く。マスクは、そういう外から境界を指定する道具だ。
考えてみよう:
10.1.50.10と10.1.50.20は、マスクが255.255.255.0のとき、同じネットワークの端末だろうか、違うネットワークの端末だろうか。10秒だけ、自分で予想してから読み進めてほしい。
予想は持てただろうか。次の章で、その答え合わせをしていく。
マスクの 1 が並ぶ範囲がネットワーク部、0 が並ぶ範囲がホスト部。IPアドレスそのものは変わらず、マスクが外から境界の位置を指定するだけ。同じ IPアドレスでも、マスクが変われば境界の位置は動く。
2つのIPを、マスクを重ねて見比べる
では、さっきの予想の答え合わせをする。
10.1.50.10 と 10.1.50.20、どちらも 255.255.255.0 のマスクで見たとき、同じネットワークか違うネットワークか。
判定の手順は素直だ。2つのIPそれぞれにマスクを重ね、マスクの 1 が並ぶ範囲(= ネットワーク部)を切り出して、見比べる。それだけ。


左側のケースから見ていこう。10.1.50.10 と 10.1.50.20、マスクは 255.255.255.0。
10.1.50.10のネットワーク部: マスクの 1 が並ぶ上位 24 ビットを切り出すと10.1.5010.1.50.20のネットワーク部: 同じく上位 24 ビットを切り出すと10.1.50
ネットワーク部は、どちらも 10.1.50。ぴたり一致している。だから、この2つは同じネットワーク内の端末だ。ホスト部(最後のオクテット)が 10 と 20 で違うのは、同じネットワーク内で別の端末になっているだけのこと。同じL2セグメントに所属している。
続いて右側のケース。10.1.50.10 と 10.1.51.20、マスクは同じ 255.255.255.0。
10.1.50.10のネットワーク部:10.1.5010.1.51.20のネットワーク部:10.1.51
ネットワーク部が 10.1.50 と 10.1.51 で違う。ホスト部(10 と 20)の近さに惑わされそうになるが、そこはもう関係ない。ネットワーク部が違う時点で、別ネットワークの端末だ。
この判定は、慣れると本当に見るだけで済むようになる。IPアドレスを眺めて、マスクの境界位置を意識し、ネットワーク部を頭の中で切り出して見比べる。それで終わりだ。
ここで、歴史的な背景を一つだけ置いておきたい。
このマスクという仕組みが正式に決まったのは、1981年の RFC 791 で IPv4 が 32bit と決まってから、さらに 4 年後の話だ。1985年 8月、Jeffrey Mogul と Jon Postel が RFC 950 を発行し、サブネットマスクがこの世界に公式に登場した。
それ以前、IPv4 のネットワーク単位は、クラス A / B / C という 3 種類の決め打ちしかなかった(クラスそれぞれの中身は、後の話で別途扱う)。組織が社内の LAN をいくつかに分けたいと思っても、クラスの単位では区切り方が荒すぎる場面が増えていった。
RFC 950 の設計者たちは、ここで IPアドレスそのものの形には手を入れなかった。32 ビット・4 オクテットのアドレスはそのまま残し、その横にもう 1 本、同じ 32 ビットの数字(マスク)を添えて、ネットワーク部とホスト部の境界を外から指定するという方式を選んだ。既存の IPアドレスを 1 つも書き換えずに、組織ごとに境界の位置を自由に動かせるようにした、ということだ。
あれから 40 年。255.255.255.0 の形は、1985 年の決定と、そこから 10 年後の RFC 1812 で整えられた「連続する 1、連続する 0」という形式のまま、今日も世界中の IPアドレスの下に並んでいる。自席の ipconfig の2行目も、その延長線上にある。
2つのIPに同じマスクを重ねたとき、ネットワーク部(マスクの 1 が並ぶ範囲)を見比べて一致すれば同一ネットワーク、違えば別ネットワーク。これがマスクを使った判定の型で、1985 年 RFC 950 で決まって以来、インターネットはずっとこの手順で「同じネットワークか別ネットワークか」を判定している。
マスクはネットワーク部とホスト部の境界を決める
ipconfig の2行目に、毎日ひっそり並んでいた 255.255.255.0。これは、IPアドレスの32ビットの上に「ここまでがネットワーク部、ここからがホスト部」という境界を外から指定するだけの道具だった。
マスクも IPアドレスと同じ 32 ビットで、裏では左側に 1 が並び、右側に 0 が並ぶ素直な形をしている。1 の並ぶ範囲に対応する IP のビットがネットワーク部、0 の並ぶ範囲に対応するビットがホスト部だ。
2つの IPアドレスが同じネットワークにいるかどうかを判定したいときは、それぞれにマスクを重ね、ネットワーク部を切り出して見比べる。10.1.50.10 と 10.1.50.20 はマスク 255.255.255.0 のもとでは同一ネットワーク、10.1.50.10 と 10.1.51.20 は別ネットワーク。ホスト部の数字の近さに惑わされず、ネットワーク部の一致だけで決まる。
そして、IPアドレス自体は一度も書き換わっていない。境界の位置だけが、マスクという外からの道具で決まっている。1985 年の RFC 950 から続く、シンプルな設計だ。
さて、ここで一つ、次に出てくる疑問がある。
255.255.255.0 を毎回書くのは、正直、長い。
4 つのオクテットをドットで区切って並べるのは、IPアドレスの書き方と同じ形だから馴染みはある。でも、マスクの主役は「1 と 0 の切り替わりがどこにあるか」だけだったはずだ。切り替わりの位置が 24 ビット目なら、それだけを短く伝える書き方があってもいい気がする。
実はある。10.1.50.10/24 のような短い書き方を、どこかで目にしたことはないだろうか。あの /24 が、いま見てきた境界の位置をどう表しているのか — プレフィックス長表記の仕組みが、ここから残されている。