第2章 アドレスのしくみ|2-2|コース全体 19本中6本目
IPアドレスの構造 ― 32ビットをどう読むか
IP
前の記事 ・2-1 MACアドレスとIPアドレスの違いと使い分け
IPアドレスは、32ビットの数字1つ
IPアドレスとは、ネットワーク上で機器を特定するために割り当てられる番号です。192.168.10.25 のような表記も、コンピュータの内部では32ビットの2進数1つです。
見た目は、4つの数字をドットで区切った形をしています。これは、人間が読み書きしやすいようにした表示です。32ビットを8ビットずつ4つに区切って、それぞれを10進数に変換しています。
IPアドレスは、機器の「住所」にあたります。MACアドレスとの違いは「MACアドレスとIPアドレスの違いと使い分け」で説明しています。32ビットのどこで区切るかが分かると、宛先が同じネットワークかどうかを自分で判定できます。
32ビットをどう区切るか
32ビットを8ビットずつ4つに分けると、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 を例にすると、次のようになります。
| 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アドレスでも、サブネットマスクの値によってネットワーク部の広さは変わります。
クラスという古い考え方
ネットワーク部とホスト部の境界は、現在は自由に決められます。境界は、/24 のようなプレフィックス長表記で書きます。この仕組みをCIDRと呼びます。
昔は、クラスA・B・Cという仕組みが使われていました。この仕組みでは、IPアドレスの先頭ビットパターンによって境界が固定されます。
クラスは今は使われていませんが、参考書や古い資料には今も登場します。そのため、ここで簡単に説明します。
| クラス | 先頭ビットパターン | 第1オクテットの | デフォルトの |
|---|---|---|---|
| クラスA | 0xxxxxxx | 0 〜 127 | 8ビット(/8) |
| クラスB | 10xxxxxx | 128 〜 191 | 16ビット(/16) |
| クラスC | 110xxxxx | 192 〜 223 | 24ビット(/24) |
たとえば、第1オクテットが210なら、先頭ビットは 110xxxxx です。そのため、クラスCになります。クラスCのデフォルトのネットワーク部は、先頭3オクテットの24ビットと決まっていました。
CIDRは、この固定の区切りをやめたものです。/24 のように、ネットワーク部のビット数をアドレスごとに自由に指定できます。区切りを自由にできるので、サブネットごとに大きさを変えるVLSMも使えます。
クラスAの範囲のうち、0.0.0.0/8 と 127.0.0.0/8 は特別な用途で予約されています。実際に機器へ割り当てられるのは、第1オクテットが 1〜126 の範囲です。127.0.0.0/8 の使いみちは、次の節で説明します。
クラスには、DとEもあります。クラスDは第1オクテットが224〜239の範囲で、マルチキャスト用のアドレスです。クラスEは実験用のアドレスです。どちらも、通常の機器には割り当てません。
マルチキャストの使われ方は、ユニキャスト・ブロードキャスト・マルチキャストの記事にまとめています。
特別な意味を持つアドレス
IPアドレスの中には、通常の用途とは違う特別な意味を持つものがあります。下の表のうち、ネットワークアドレスとブロードキャストアドレスは機器に割り当てません。一方、APIPAは実際に機器へ割り当てられるアドレスです。
| 名称 | 値・範囲 | 意味 |
|---|---|---|
| ループバックアドレス | 127.0.0.1 (127.0.0.0/8 全体が予約) | 自分自身を指すアドレス。ネットワークに出て行かず、自分のマシンの中で折り返します。 |
| APIPA(リンクローカルアドレス) | 169.254.0.0/16 | DHCPサーバが見つからないとき、OSが代わりに自動で割り当てる仮のアドレス。DHCPは、IPアドレスなどを自動で配る仕組みです。 |
| ネットワークアドレス | ホスト部が全部0 | そのネットワーク自体を指す名前。機器には割り当てません。 |
| ブロードキャストアドレス | ホスト部が全部1 | そのネットワーク全員への呼びかけに使う宛先。機器には割り当てません。 |
IPv6では128ビットになる
ここまでの32ビットのアドレスは、IPv4のものです。IPv4で作れるアドレスは2³²個で、約43億個しかありません。そのため、アドレスの枯渇が問題になりました。
IPv6では、アドレス長が128ビットに拡張されました。表記も変わり、16ビットずつの8組をそれぞれ16進数で表します。組と組の間は、コロン : で区切ります。
例は 2001:0db8:0000:0000:0000:0000:1234:5678 です。この表記には、省略のルールが2つあります。
1つは、各グループ先頭の0を省略できることです。たとえば 0db8 は db8 と書けます。もう1つは、0だけのグループが連続するとき、まとめて :: という記号に置き換えられることです。
この2つを使うと、上の例は 2001:db8::1234:5678 と短く書けます。1つのアドレスの中で :: を2回使うと、どちらのグループを何個省略したのか分からなくなります。そのため、:: を使えるのは1回だけです。
IPv6のアドレスの種類やIPv4との違いは、IPv6の記事で説明しています。
自分のIPアドレスを確認する
自分のPCに割り当てられているIPアドレスは、OSごとに次のコマンドで確認できます。
> ipconfig イーサネット アダプター イーサネット: IPv4 アドレス . . . . . . . . . . . : 192.168.10.25 サブネット マスク . . . . . . . . . : 255.255.255.0
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.10.25/24 brd 192.168.10.255 scope global eth0$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.10.25 netmask 0xffffff00 broadcast 192.168.10.255
# 1行だけ欲しい場合は、次のコマンドでも確認できます。
$ ipconfig getifaddr en0
192.168.10.25練習問題(全5問)
正解:180
各ビットは、
正解:クラスC
第1オクテットの
正解:16ビット
クラスBの
正解:DHCPサーバが
169.254.0.0/16は、
正解:2001:db8::1
この
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
この記事の内容を扱っている本です。
