第2章 アドレスのしくみ|2-2|コース全体 19回中6本目
IPアドレスの構造 ― 32ビットをどう読むか
192.168.10.25 のような見慣れた表記が、実際には何を表しているのか。32ビットの数字1つを、オクテット・ネットワーク部・ホスト部の観点から整理します。
IPアドレスの正体は、32ビットの数字1つ
192.168.10.25 のようなIPアドレス(IPv4)は、見た目は4つの数字がドットで 区切られていますが、コンピュータの内部では32ビットの2進数1つです。人間が読み書きしやすいように、 8ビットずつ4つに区切り、それぞれを10進数に変換して表示しているだけです。
32ビットをどう区切るか
32ビットを8ビットずつ4つに分けた、それぞれのかたまりをオクテットと呼びます。203.0.113.45 というアドレスを例に、各オクテットの2進数と10進数の対応を見てみます。
| オクテット | 2進数 | 10進数 |
|---|---|---|
| 第1オクテット | 11001011 | 203 |
| 第2オクテット | 00000000 | 0 |
| 第3オクテット | 01110001 | 113 |
| 第4オクテット | 00101101 | 45 |
なぜ0〜255の範囲になるのか
1オクテットは8ビットです。8ビットで表せるパターンは 2⁸ = 256 通りで、 0から数え始めるので範囲は 0〜255 になります。10進数への変換は、 各桁(ビット)に割り当てられた重みを、1が立っている位置だけ足し合わせるだけです。 第4オクテットの 00101101(10進数で45)を例にすると、次のようになります。
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |
1が立っているのは重み32・8・4・1の位です。32 + 8 + 4 + 1 = 45。 これが10進数表記の45と一致します。最大値の 11111111 は128+64+32+16+8+4+2+1 = 255 となり、これが1オクテットの上限です。
ネットワーク部とホスト部
32ビットのIPアドレスは、さらに2つの役割に分かれています。住所を「地域」と「号室」に分けるように、 IPアドレスもネットワーク部(どのネットワークに属すか。地域にあたる)とホスト部(そのネットワーク内の何番目の機器か。号室にあたる)に分かれます。
どこまでがネットワーク部で、どこからがホスト部かという境界を決めるのがサブネットマスクです。 同じIPアドレスでも、サブネットマスクの値によってネットワーク部の広さは変わります。
クラスという古い考え方
ネットワーク部とホスト部の境界は、現在はCIDR(/24 のようなプレフィックス長表記)で 自由に決められます。しかし昔は、IPアドレスの先頭ビットパターンによって境界が固定されるクラスA・B・Cという仕組みが使われていました。今は使われていませんが、試験や古い資料には今も登場するため、 歴史的な経緯として簡潔に触れておきます。
| クラス | 先頭ビットパターン | 第1オクテットの範囲 | デフォルトのネットワーク部 |
|---|---|---|---|
| クラスA | 0xxxxxxx | 0 〜 127 | 8ビット(/8) |
| クラスB | 10xxxxxx | 128 〜 191 | 16ビット(/16) |
| クラスC | 110xxxxx | 192 〜 223 | 24ビット(/24) |
たとえば第1オクテットが210なら先頭ビットは 110xxxxx なのでクラスC、 デフォルトのネットワーク部は24ビット(先頭3オクテット)と決まっていました。 CIDRはこの固定の区切りをやめ、/24 のようにネットワーク部のビット数を アドレスごとに自由に指定できるようにしたものです。
特別な意味を持つアドレス
IPアドレスの中には、機器に割り当てず特別な用途のために予約されているものがあります。
| 名称 | 値・範囲 | 意味 |
|---|---|---|
| ループバックアドレス | 127.0.0.1 (127.0.0.0/8 全体が予約) | 自分自身を指すアドレス。ネットワークに出て行かず、自分のマシンの中で折り返します。 |
| APIPA(リンクローカルアドレス) | 169.254.0.0/16 | DHCPサーバーが見つからないとき、OSが代わりに自動で割り当てる仮のアドレス。 |
| ネットワークアドレス | ホスト部が全部0 | そのネットワーク自体を指す名前。機器には割り当てません。 |
| ブロードキャストアドレス | ホスト部が全部1 | そのネットワーク全員への呼びかけに使う宛先。機器には割り当てません。 |
IPv6では128ビットになる
ここまで扱ってきた32ビットのアドレスはIPv4のものです。IPv4は約43億個(2³²個)しかアドレスを作れず 枯渇が問題になったため、IPv6ではアドレス長が128ビットに拡張されました。表記も変わり、 16ビットずつ8組に区切って16進数で表し、コロン(:)で区切ります (例:2001:0db8:0000:0000:0000:0000:1234:5678)。表記には省略ルールが2つあります。 1つは各グループ先頭の0を省略できること(0db8 → db8)、 もう1つは連続する0だけのグループを :: という記号でまとめて1回だけ省略できることです。 この2つを使うと、上の例は 2001:db8::1234:5678 と短く書けます。1つのアドレスの中で:: を2回使うと、どちらのグループを何個省略したのか分からなくなるため、使えるのは1回だけです。
練習問題(全5問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:180
左から128・64・32・16・8・4・2・1の重みを持ちます。1が立っているのは128・32・16・4の位なので、128+32+16+4 = 180です。
正解:クラスC
第1オクテットの210は192〜223の範囲に入り、先頭ビットパターンは110xxxxxです。これはクラスCの条件に一致します。
正解:16ビット
クラスBの先頭ビットパターンは10xxxxxxで、第1オクテットと第2オクテットの合計16ビットがデフォルトのネットワーク部になります。
正解:DHCPサーバーが見つからず、OSが自動でAPIPAアドレスを割り当てた
169.254.0.0/16はAPIPA(リンクローカルアドレス)の範囲です。DHCPサーバーに接続できないとき、OSが暫定的に割り当てます。
正解:2001:db8::1
連続する0のグループ(0000が5組)をまとめて「::」に置き換えられます。「::」で省略できるのはアドレス中で1回だけなので、"2001::db8::1" のように2回使うのは誤りです。