IPv6とは ― アドレスの見方と省略のルール
IPv6とは、
IPv6とは、インターネットで通信するための規則(IP)のバージョン6
IPv6とは、インターネットで通信するための規則(IP)のバージョン6です。現在主流のIPv4の後継として普及が進んでいます。読み方は「アイピーブイろく」です。
いちばんの違いはアドレスの長さです。IPv4は32ビットでアドレスを表しますが、IPv6は128ビット使います(RFC 8200)。IPv4では約43億個しか作れなかったアドレスも、IPv6なら事実上枯渇しない数だけ作れます。
IPv6アドレスは、128ビットの数字を16ビットずつ8組に区切って書きます。各組は16進数で表します。組と組の間は、コロン(:)でつなぎます。このままでは長くて読みにくいため、2つの省略ルールで短く書けます。
なぜ必要になったか:IPv4アドレスの枯渇
NATの記事で説明したように、IPv4アドレスは32ビットで、2³² = 約43億個しか作れません。インターネットに接続するスマホ・PC・IoT機器は、世界的に急増しました。その結果、この数では足りなくなりました。
IPアドレスは、IANAという組織が管理しています。IANAが各地域に配る中央在庫は、2011年に配り終えています。
IPv4が足りなくなった経緯と、IPv4からIPv6へ移る方式はIPv4アドレス枯渇の記事にまとめています。
この不足を補うため、プライベートIPアドレスとNATが広く使われています。ただし、これはその場しのぎの技術です。根本的な解決として作られた規格が、IPv6です。IPv6では、アドレスの長さを32ビットから128ビットへ大きく広げました。
128ビット・16進数・コロン区切り
IPアドレスの構造の記事で説明したとおり、IPv4は32ビットを8ビットずつ4つのオクテットに区切ります。表記は、10進数のドット区切りです。
IPv6は、128ビットを16ビットずつ8組に区切ります。それぞれの組は16進数で表します。組の間は、コロン(:)で区切ります。
次のアドレスは、8組すべてを4桁の16進数で書いた形です。これを展開形と呼びます。
2001:0db8:0000:0000:0000:0000:1234:5678
16進数は、0〜9とa〜fの16種類の文字で0〜15を表す書き方です。1桁で4ビットぶんの2⁴=16通りを表せるので、16ビットの組はちょうど4桁の16進数になります。IPv4のオクテットは、2⁸=256通りを2〜3桁の10進数で表します。桁数と表し方が変わっただけで、考え方は同じです。
省略表記の2つのルール
展開形は長く読み書きしにくいため、次の2つのルールで短く省略できます(RFC 5952)。この2つを組み合わせると、先ほどの展開形は2001:db8::1234:5678と短く書けます。
- 1
各組の
先頭の 0は 省略する 組ごとに、先頭の0を取り除きます。たとえば 0db8 は db8 になります。すべて0の組の 0000 は、0 と書きます。
- 2
連続する
0の 組は 「::」で まとめる (1回だけ) 0の組が2組以上連続するときは、そのかたまりを::にまとめます。0の組が1組だけのときは、そのまま0と書きます。
::は1つのアドレスに1回しか使えません。2回使うと、それぞれが何組の0を省略しているのか決まらなくなるためです。
1組だけを::にしても、読み手には意味が一意に決まります(RFC 4291 §2.2)。ただし、正規の表記では、2組以上連続するときだけ::を使うと決めています(RFC 5952 §4.2.2)。書き方を1通りに揃えるためです。
連続する0の組が複数箇所にあるときは、より長いほうを::にします。同じ長さなら、より左側を優先します(RFC 5952 §4.2.3)。
実際のアドレスを入力すると、展開形と省略形をその場で確かめられます。
- 展開形(省略なし・8組・4桁ずつ)
- 2001:0db8:0000:0000:0000:0000:1234:5678
- 正規の省略形(RFC 5952)
- 2001:db8::1234:5678
- アドレスの種別
- 文書用の予約範囲(2001:db8::/32)
上の図は、展開形と省略形のどちらを入力しても両方の形に変換します。連続する0の組が複数箇所にある場合や、0の組が1組しかない場合も試してください。どちらが::にまとまるかを確かめられます。
省略表記の練習問題
2つのルールを、実際の問題で確かめます。自分で省略・展開してから答え合わせをします。
Q12001:0db8:0000:0000:0000:0000:0000:0001 を省略して書くと?
答え:2001:db8::1
- ルール1:各組の先頭の0を取ります。0db8はdb8になります。
- ルール2:2組以上連続する0の組を探します。ここでは0000が5組連続しています。db8の後ろから0001の手前までです。
- その5組を::1回にまとめます。答えは2001:db8::1です。
Q2fe80:0000:0000:0000:0000:0000:0000:0001 を省略して書くと?
答え:fe80::1
- 先頭の組は、そのままfe80です。すでに先頭に0がありません。
- 2組目から7組目まで、0000が6組連続しています。これを::1回にまとめます。
- 答えはfe80::1です。
Q32001:db8::1234:5678 を、省略しない展開形(8組・4桁ずつ)で書くと?
答え:2001:0db8:0000:0000:0000:0000:1234:5678
- ::は、「8組になるように、0の組を必要な数だけ補う」という意味です。
- すでに書かれているのは、2001 db8 1234 5678の4組です。8組にするには、残り4組ぶんの0が必要です。
- 4組ぶんの0を、0000で補います。先頭の0も省略せず、4桁に戻します。答えは2001:0db8:0000:0000:0000:0000:1234:5678です。
Q42001:0db8:0000:0001:0000:0000:0000:0001 を省略して書くと?
答え:2001:db8:0:1::1
- このアドレスには、0が連続する箇所が2か所あります。3組目の0000は1組だけで、5〜7組目の0000は3組連続です。
- ルール2では、もっとも長い連続だけを::にします。1組だけの連続は、正規の表記(RFC 5952 §4.2.2)では::にしません。
- 3組連続している5〜7組目だけを::にします。1組だけの3組目は、そのまま0と書きます。答えは2001:db8:0:1::1です。
Q52001:0db8:0000:0001:0001:0001:0001:0001 を省略して書くと?
答え:2001:db8:0:1:1:1:1:1(::は使わない)
- 0の組は、3組目の0000だけです。前後は0以外なので、連続していません。
- 「::」で1組だけを置き換えても、読むときに何組省略したかは一意に決まります。RFC 4291 §2.2の上では、有効な表記です。ただし正規の表記(RFC 5952 §4.2.2)では、2組以上連続するときだけ::を使うと決めています。書き方を1通りに揃えるためです。
- この場合は::を使わず、各組の先頭の0だけを省略します。答えは2001:db8:0:1:1:1:1:1です。
Q62001:0000:0000:0001:0000:0000:0001:0001 を省略して書くと?
答え:2001::1:0:0:1:1
- 0が連続する箇所は2か所あります。2〜3組目と5〜6組目で、どちらも2組連続です。
- 同じ長さの連続が複数あるときは、より左側を::にします(RFC 5952 §4.2.3)。
- より左側の2〜3組目を::にします。5〜6組目は、そのまま0:0と書きます。答えは2001::1:0:0:1:1です。
プレフィックスと/64:ネットワーク部とインターフェースID
IPv4のIPアドレスは、サブネットマスクの記事で説明したとおりネットワーク部とホスト部に分かれています。IPv6アドレスも同じように、前側と後ろ側の2つに分かれます。前側はネットワーク部で、プレフィックスとも呼びます。
後ろ側は、そのネットワーク内で機器を区別する部分です。この部分をインターフェースIDと呼びます。2つの境目の位置を表すのが、プレフィックス長です。/64のように書き、考え方はIPv4のCIDR表記と同じです。
IPv6のユニキャストアドレスは、インターフェースIDに64ビットを使うことを前提に設計されています(RFC 4291 §2.5.1)。そのため、1つのLANに割り当てるプレフィックス長は、/64が標準です。
IPv4では利用者数に応じて/24や/30のように細かく分けていました。IPv6はアドレスが十分にあるため、境目の位置を細かく調整する必要がありません。
家庭やオフィスの回線契約1本には、/56のように/64より広い範囲が配られるのが一般的です(RFC 6177)。自宅内を、複数のネットワークに分けられるようにするためです。たとえば、有線LANとゲスト用Wi-Fiを別のネットワークにできます。
アドレスの種類
IPv6アドレスには、先頭のビットパターンによっていくつかの種類があります。ここでは、まず知っておきたい4つを挙げます。
| 種類 | プレフィックス | 例 | 用途 |
|---|---|---|---|
| グローバルユニキャスト | 2000::/3 | 2001:db8::1 | インターネット全体で通信できるアドレスです。IPv4のグローバルIPアドレスにあたります。 |
| リンクローカル | fe80::/10 | fe80::1 | 同じリンクの中だけで有効なアドレスです。リンクは、ルータを越えない範囲を指します。IPv6対応の機器には、自動で必ず割り当てられます。後で扱うNDPなどで使います。 |
| ループバック | ::1/128 | ::1 | 自分自身を指すアドレスです。IPv4の127.0.0.1にあたります。 |
| ユニークローカル(ULA) | fc00::/7(実際にはfd00::/8を使う) | fd12:3456:789a:1::1 | インターネットには出て行かないアドレスです。社内や家庭内など、限定した範囲だけで使います。IPv4のプライベートIPアドレスに近い位置づけです(RFC 4193)。 |
IPv4との主な違い
NATが基本的に不要
IPv4ではアドレスが足りません。そのため、1つのグローバルIPアドレスを複数台で共有するのが一般的でした。共有には、プライベートIPアドレスとNATを使います。
IPv6はアドレス空間が広大で、枯渇の心配がありません。そのため、すべての機器にグローバルなアドレスを直接割り当てるのが基本設計です。NATは前提としません。
ARPの代わりにNDPを使う
ARPの記事で説明したとおり、IPv4では同じネットワーク内の相手のMACアドレスをARPで調べます。IPv6では、ARPの代わりにNDPを使います。
NDPは、Neighbor Discovery Protocolの略です(RFC 4861)。日本語では、近隣探索プロトコルと呼びます。NDPの役割は、ARPより広いです。ARPの機能に加えて、ルータの発見やアドレスの自動設定にも使います。NDPのメッセージは、ICMPv6のメッセージとして運ばれます。種類の一覧はICMPの記事にあります。
アドレスの自動設定:SLAACとDHCPv6
IPv4では、端末はIPアドレスなどの設定を自動で受け取ります。このとき使うのが、DHCPの記事で説明したDHCPです。
IPv6にも、DHCPと似た働きをするDHCPv6があります。それとは別に、IPv6独自の仕組みとしてSLAACがあります。SLAACは、Stateless Address Autoconfigurationの略です(RFC 4862)。日本語では、ステートレスアドレス自動設定と呼びます。
SLAACでは、ルータが定期的に通知を送ります。端末は、この通知からネットワーク部の情報を受け取ります。この通知をRouter Advertisementと呼び、これもNDPの一部です。
インターフェースIDは、端末自身が組み立てます。こうして、サーバに問い合わせずにアドレスを完成させます。
DHCPv6は、サーバがアドレスを配る点でDHCPに近い方式です。SLAACとDHCPv6を併用する構成もよく使われます。その場合、アドレスはSLAACで決め、DNSサーバなどの追加情報だけをDHCPv6で配ります。どちらを使うかは、ルータが送る通知の中の設定で決まります。
インターフェースIDの組み立て方の1つに、機器のMACアドレスを加工して64ビットに引き伸ばす方式があります。これが伝統的なEUI-64です(RFC 4291 附属書A)。
ただし、この方式ではMACアドレスがそのまま外部から推測できます。そのため現在は、ランダムな値からインターフェースIDを生成する方式も広く使われています。この方式をプライバシー拡張と呼びます(RFC 4941)。
日本の家庭回線とIPv6の関係
日本の家庭用インターネット回線では、IPoE方式によるIPv6での接続が広く使われています。PPPoE方式とIPoE方式の違いは、PPPoEとIPoEの記事で説明しています。
IPv4アドレスをIPv6の回線の上で運ぶ方式も普及しています。この方式をIPv4 over IPv6と呼びます。代表例は、v6プラスなどのMAP-Eや、transixなどのDS-Liteです。
これらの方式では、IPv6に対応したサイトとの通信はIPv6で直接行います。相手がまだIPv6に対応しておらず、IPv4しか持たないこともあります。その相手との通信では、IPv4のパケットをIPv6のパケットに包んで運びます。NATとの関係はNATの記事に、ポート開放の仕組みはポート開放の記事にあります。
IPv6は、日本の多くの家庭回線ですでに実際に使われている規格です。自分の環境でIPv6アドレスが割り当てられているかは、次の節の手順で確認できます。
「IPv6にすると速くなる」と言われることがあります。しかし、速さの違いは主にIPoE方式そのものの効果です。
従来のPPPoE方式は、夜間などに混雑して速度が落ちやすい経路を通ります。IPoEは、この混雑を避けられます。MAP-EなどのIPv4 over IPv6を使えば、IPv4の通信もこの混雑を避けた経路を通ります。そのため、速くなることがあります。
体感速度が変わるのは、IPv6という規格そのものの効果ではありません。IPoEという接続方式による効果です。混雑する経路と避ける経路の仕組みは、PPPoEとIPoEの記事の図で確かめられます。
自分のIPv6アドレスを確認する
自分のPCに割り当てられているIPv6アドレスは、IPv4と同じコマンドで確認できます。IPv4での確認方法は、IPアドレスの構造の記事で説明しています。この記事の例と同様に、出力例のアドレスは文書用の範囲(2001:db8::/32)を使っています。
コマンドを使わず手早く確かめたい場合は、test-ipv6.comのような判定サイトが便利です。自分の接続がIPv6に対応しているかを、その場で表示してくれます。
> ipconfig イーサネット アダプター イーサネット: IPv6 アドレス . . . . . . . . . . : 2001:db8:1234:5678:1a2b:3c4d:5e6f:7890 リンクローカル IPv6 アドレス . . . : fe80::1a2b:3c4d:5e6f:7890%12 IPv4 アドレス . . . . . . . . . . : 192.168.10.25
$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::1a2b:3c4d:5e6f:7890%en0 prefixlen 64 scopeid 0x6
inet6 2001:db8:1234:5678:1a2b:3c4d:5e6f:7890 prefixlen 64 autoconf secured
inet 192.168.10.25 netmask 0xffffff00 broadcast 192.168.10.255$ ip -6 addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 2001:db8:1234:5678:1a2b:3c4d:5e6f:7890/64 scope global dynamic mngtmpaddr
inet6 fe80::1a2b:3c4d:5e6f:7890/64 scope linkIPv4では、1つの機器に1つのアドレスが基本です。IPv6では、複数のアドレスを持つのがふつうです。fe80::で始まるリンクローカルアドレスと、2001:db8::のようなグローバルユニキャストアドレスが、同時に割り当てられます。出力に複数のIPv6アドレスが並んでいても、異常ではありません。
練習問題(全5問)
正解:128ビット
IPv4は
正解:fe80::1
「::」
正解:IPv4アドレス
IPv4は
正解:アドレス空間が
NATの
正解:/64
IPv6の
選んでから「採点する」を押すと、解説つきで答え合わせができます。
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
