10.1.50.10 という4オクテット表記の内側を分解する
MACは機器を識別するL2の番号、IPはネットワーク間の配送を担うL3のアドレスという役割分担まで言葉になっている。同じネットワーク内には MAC で届くが、ネットワーク間にはもう一段、L3 の番地体系が必要だった。
けれど、その L3 のアドレスが具体的にどんな形をしているかは、まだ見ていない。
自席に戻って、コマンドプロンプトで ipconfig を叩いてみると、こんな表示が返ってくる。
IPv4 Address. . . . . . . . . . . : 10.1.50.10
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.1.50.1
真ん中の 10.1.50.10 が、自分のPCに割り当てられているIPv4アドレスだ。設定画面でも、チャットでのやり取りでも、トラブル報告の紙切れにも、同じ形で現れる。
この数字をちゃんと読めているか、自分自身に一度だけ問い直してみてほしい。「10 と 1 と 50 と 10 が並んでいる」以上、何が言えるのか。いざ「この数字、なんですか?」と聞かれると、これ、合ってますか? の手前で止まる。確かめられない、そもそも何を確かめればいいかも、まだ分からない。
IPv4アドレスは32ビットの数字だ。8ビットずつ4つのオクテットに束ね、それぞれを10進で書き、ドットで区切ったのが 10.1.50.10 の正体。
4つの数字はそれぞれ独立した値ではなく、32bitを8bitずつに切った4区画を10進で書いたものだ。ドットは区切りの目印にすぎない。


10.1.50.10 は、本当は 32 個の 0 と 1
コンピュータの内側では、あらゆる数字が 0 と 1 だけで書かれている。IPv4 アドレスも同じで、画面に 10.1.50.10 と見えていても、機械の中では 0 と 1 の並びとして処理されている。
IPv4アドレスの裏側は、32個の 0 と 1 が一列に並んでいる。
1981年9月の RFC 791 という文書で、IPv4 アドレスの長さは「32ビット固定」と決まった。以来、世界中のあらゆる IPv4 アドレスは、内側では必ず 32 個の 0/1 でできている。自分のPCの 10.1.50.10 も、会社のサーバの 10.1.1.1 も、検索で使っている 8.8.8.8 も、全部 32 個だ。


上段が、毎日目にしている人間向けの書き方だ。10、1、50、10 の4つの数字が、ドットで区切られて並んでいる。
下段が、機械が見ている形だ。0 と 1 が合計 32 個並んでいる。上段の 10 は、下段では 00001010。上段の 50 は、下段では 00110010。書き方が違うだけで、指しているものは同じひとつのアドレスだ。
32 個の 0/1 を、8 個ずつ 4 つのオクテットに束ねる
32 個の 0/1 をそのまま書くと、こうなる。
00001010000000010011001000001010
人間がこれを見て意味を読み取るのは無理だ。 どこで区切ればいいのか分からず、途中で位置を正確に追えなくなる。32 個を一息で読む気にもならない。
だから設計者たちは、32 個を 8 個ずつに区切って、4 つの箱に分けた。
4 × 8 = 32 でちょうど収まる。区切った 1 つの箱を、この業界では 「オクテット」 と呼ぶ。意味はシンプルで、「8 ビット分の箱」 のことだ。英語の oct-(「8 の」)という接頭辞から来ている。
1970〜80年代、コンピュータの種類によって「1バイト」が 7 ビットだったり 9 ビットだったりと揺れがあった。曖昧さを避けるために、仕様文書では「必ず 8 ビット」を意味する octet という語が選ばれた。いまでも IP 関係の仕様は octet で書かれている。
箱の区切りが決まれば、次は書き方だ。1 つの箱を 10進数で書いて、箱と箱のあいだを .(ドット) で仕切る。これだけで、ぐっと読める形になる。


画面に出ている 10.1.50.10 は、この変換を最後まで通した結果だ。ドットは、見た目を整えるための記号ではなく、ただの箱と箱の仕切り線として機能する。
RFC 791 と同じ 1981年 9月に出た RFC 790 で、「IPアドレスの表記は、32ビットを 4 つの 8ビットフィールドに分け、それぞれを10進で書き、ピリオドで区切る」という形式が例として示された。それ以来、このドット区切り10進表記が世界中で使われている。10.1.50.10 の形は、40年以上前から変わっていない。
1 つのオクテットに入る数字が 0〜255 である理由
1 つのオクテットには、どんな数字までが入るのか。
1 つのオクテットは 8 個の 0/1 でできている。この箱に入る数字の最大は、いくつだろうか。10秒だけ、自分で予想してから読み進めてほしい。
1 つのオクテットの中には「0 か 1 か」を選ぶビットが 8 個ある。全部 0 が最小、全部 1 が最大だ。


上段、ビットが全部 0 のとき。10進で書いても 0。これが最小だ。
下段、ビットが全部 1 のとき。10進に直すと 255 になる。
8 個の 0/1 で書ける値の総数は 256 通り(0 も含めて数える)。最小が 0 だから、最大は 255 になる。256 通りぴったりで、1 通りのあまりもない。
だから 1 つのオクテットに入る数字は、必ず 0 から 255 までのどれかになる。256 が入ることは絶対にない。もし誰かのメモ用紙に 192.168.1.256 と書かれていたら、末尾が 256 である時点で、IPv4 アドレスとしてあり得ない値だと分かる。256 以上の数字が見えたら、番号を写し間違えているか、別の何かと混同している証拠になる。
RFC 791 が IPv4 アドレスを「32ビット固定」と決めた 1981年当時、2 の 32 乗 = およそ 43 億通りという総数を、設計者たちは「十分な数」と見積もった。見積もりは楽観的だったが、いまのインターネットが 32ビット という枠組みで回っているのは、この 1981年の決断の延長線上にある。
4つのオクテットに隠された境界
毎日見ていた 10.1.50.10 が、内側に 32 個の 0/1 を抱えたひとつながりの住所として違って見え始めたはずだ。
10.1.50.10 のうち、どこまでが「ネットワーク部」で、どこからが「ホスト部」なのか。L3 は異なるネットワークを越えて配送するための層だった。そこに「どのネットワークに属するか」を示す境い目が、4 つのオクテットのどこかで引かれているはずだ。でも、図にも画面にも、その境い目を示す線は直接描かれていない。
その境い目を決めているのが、ipconfig の 2 行目にひっそり並んでいたもう一つの数字、255.255.255.0 だ。サブネットマスクと呼ばれるこの数字が、32ビットのどこに境い目を引いているのか。その仕組みが、ここから残されている。