ITの教科書検索
入門・発展ページ読了 約11分

IPv6とは ― アドレスの見方と省略のルール

IPv6とは、インターネットで通信するための規則(IP)のバージョン6で、IPv4の後継です。128ビットのアドレスの表記・省略の2ルール・種類・IPv4との違いを整理します。

目次
  1. IPv6とは
  2. なぜ必要になったか
  3. 128ビット・16進数・コロン区切り
  4. 省略表記の2つのルール
  5. プレフィックスと/64
  6. アドレスの種類
  7. IPv4との主な違い
  8. 日本の家庭回線とIPv6
  9. 自分のIPv6アドレスを確認する
  10. 練習問題

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. 1

    各組の先頭の0は省略する

    組ごとに、先頭の0を取り除きます。たとえば 0db8 は db8 になります。すべて0の組の 0000 は、0 と書きます。

  2. 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)。

IPv6アドレスは大文字でも小文字でも読めますが、正規の表記(RFC 5952)は小文字です。機器の設定画面やコマンドの出力を見比べるときは、大文字・小文字の違いに惑わされないでください。

実際のアドレスを入力すると、展開形と省略形をその場で確かめられます。

第1組2001
第2組0db8
第3組0000
第4組0000
第5組0000
第6組0000
第7組1234
第8組5678
前半4組:ネットワーク部(/64)後半4組:インターフェースID
展開形(省略なし・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. ルール1:各組の先頭の0を取ります。0db8はdb8になります。
  2. ルール2:2組以上連続する0の組を探します。ここでは0000が5組連続しています。db8の後ろから0001の手前までです。
  3. その5組を::1回にまとめます。答えは2001:db8::1です。
Q2fe80:0000:0000:0000:0000:0000:0000:0001 を省略して書くと?

答え:fe80::1

  1. 先頭の組は、そのままfe80です。すでに先頭に0がありません。
  2. 2組目から7組目まで、0000が6組連続しています。これを::1回にまとめます。
  3. 答えはfe80::1です。
Q32001:db8::1234:5678 を、省略しない展開形(8組・4桁ずつ)で書くと?

答え:2001:0db8:0000:0000:0000:0000:1234:5678

  1. ::は、「8組になるように、0の組を必要な数だけ補う」という意味です。
  2. すでに書かれているのは、2001 db8 1234 5678の4組です。8組にするには、残り4組ぶんの0が必要です。
  3. 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

  1. このアドレスには、0が連続する箇所が2か所あります。3組目の0000は1組だけで、5〜7組目の0000は3組連続です。
  2. ルール2では、もっとも長い連続だけを::にします。1組だけの連続は、正規の表記(RFC 5952 §4.2.2)では::にしません。
  3. 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(::は使わない)

  1. 0の組は、3組目の0000だけです。前後は0以外なので、連続していません。
  2. 「::」で1組だけを置き換えても、読むときに何組省略したかは一意に決まります。RFC 4291 §2.2の上では、有効な表記です。ただし正規の表記(RFC 5952 §4.2.2)では、2組以上連続するときだけ::を使うと決めています。書き方を1通りに揃えるためです。
  3. この場合は::を使わず、各組の先頭の0だけを省略します。答えは2001:db8:0:1:1:1:1:1です。
Q62001:0000:0000:0001:0000:0000:0001:0001 を省略して書くと?

答え:2001::1:0:0:1:1

  1. 0が連続する箇所は2か所あります。2〜3組目と5〜6組目で、どちらも2組連続です。
  2. 同じ長さの連続が複数あるときは、より左側を::にします(RFC 5952 §4.2.3)。
  3. より左側の2〜3組目を::にします。5〜6組目は、そのまま0:0と書きます。答えは2001::1:0:0:1:1です。

プレフィックスと/64:ネットワーク部とインターフェースID

IPv4のIPアドレスは、サブネットマスクの記事で説明したとおりネットワーク部とホスト部に分かれています。IPv6アドレスも同じように、前側と後ろ側の2つに分かれます。前側はネットワーク部で、プレフィックスとも呼びます。

後ろ側は、そのネットワーク内で機器を区別する部分です。この部分をインターフェースIDと呼びます。2つの境目の位置を表すのが、プレフィックス長です。/64のように書き、考え方はIPv4のCIDR表記と同じです。

2001第1組0db8第2組0000第3組0000第4組0000第5組0000第6組1234第7組5678第8組ネットワーク部(64ビット・/64の場合)インターフェースID(64ビット)
2001:0db8:0000:0000:0000:0000:1234:5678を、16ビットずつ8組に区切ったところです。標準的な/64では、前半4組がネットワーク部、後半4組がインターフェースIDで、どちらも64ビットです。境目の位置は、割り当てられたプレフィックス長によって変わります。考え方は、IPv4のネットワーク部・ホスト部の境目と同じです。

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::/32001:db8::1インターネット全体で通信できるアドレスです。IPv4のグローバルIPアドレスにあたります。
リンクローカルfe80::/10fe80::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)。
この記事の例で使う2001:db8::系のアドレスは、実在のネットワークでは使われません。文書・解説用に予約された範囲(2001:db8::/32、RFC 3849)です。実在のアドレスと混同させないために、この範囲を使います。IPv4の例で203.0.113.0/24などを使うのと、同じ理由です。

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アドレスを見る(Windows)
> ipconfig
イーサネット アダプター イーサネット:
   IPv6 アドレス . . . . . . . . . . : 2001:db8:1234:5678:1a2b:3c4d:5e6f:7890
   リンクローカル IPv6 アドレス . . . : fe80::1a2b:3c4d:5e6f:7890%12
   IPv4 アドレス . . . . . . . . . . : 192.168.10.25
ifconfig自分のIPv6アドレスを見る(Mac)
$ 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自分のIPv6アドレスを見る(Linux)
$ 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 link

IPv4では、1つの機器に1つのアドレスが基本です。IPv6では、複数のアドレスを持つのがふつうです。fe80::で始まるリンクローカルアドレスと、2001:db8::のようなグローバルユニキャストアドレスが、同時に割り当てられます。出力に複数のIPv6アドレスが並んでいても、異常ではありません。

練習問題(全5問)

Q1IPv6アドレスは何ビット?
Q2fe80:0000:0000:0000:0000:0000:0000:0001 を正しく省略すると?
Q3IPv6が作られたいちばんの理由は?
Q4IPv6が基本的にNATを前提としない理由は?
Q51つのネットワーク(LAN)に割り当てるプレフィックス長として標準的に使われる長さは?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

おすすめの本 PR

ネットワークを初めて学ぶ人向けの入門書です。

目的別の本の選び方を見る

ネットワークの記事を探す