IPv6アドレス
IPv6アドレス(アイピーブイシックスアドレス、IPv6 address)とは、IPv6コンピュータネットワークにおいてコンピュータ等のノードのネットワークインタフェースを判別するための番号(IPアドレス)である。
IPアドレスは、ホストの個々のネットワークインタフェースを特定し、ホスト間でIPパケットのルーティングを行うために使用される。IPアドレスはパケットのヘッダに記載され、そのパケットの送信元と送信先を示している。
IPv6は、インターネットにおいて最初に使用されたIPv4を継承している。IPv4が32ビットのIPアドレスを使用するのに対し、IPv6は128ビットのIPアドレスを使用する。このため、IPv6はIPv4と比べて非常に大きなIPアドレス空間を持っている。
IPv6アドレスは、以下の3種類に分類される。
ユニキャストアドレス - 単一のインタフェースのための識別子。インターネットプロトコルは、ユニキャストアドレスに送られたパケットを、そのアドレスによって識別されるインタフェースに配送する。
エニーキャストアドレス - インタフェース集合(通常は異なるノードに属する)のための識別子。エニーキャストアドレスに送られたパケットは、そのアドレスで識別されるインタフェースの内で、ルーティングプロトコルの距離の定義に従って「最も近く」(nearest)にあるただ1つのインタフェースに配送される。エニーキャストアドレスはユニキャストアドレスと同じフォーマットのため、表記上は区別がつかない。ただ、同じアドレスが複数のインタフェースに設定されるかどうかの違いしかない。
マルチキャストアドレス - エニーキャストと同様にインタフェース集合のための識別子であるが、マルチキャストアドレスに送られたパケットは、そのアドレスを持つすべてのインタフェースに配送される。
IPv6にはブロードキャストアドレスは存在せず、その機能はマルチキャストアドレスが果たす。
IPv6アドレスは128ビットのアドレス幅を持っている。アドレスは、アドレス指定とルーティングの方法により、ユニキャストアドレス、マルチキャストアドレス、エニーキャストアドレスに分類される。これらのそれぞれに、論理的に128のアドレス・ビットをビット・グループに分け、これらのビット・グループの値を特別なアドレス指定機能と結びつけることによって、様々なアドレス・フォーマットが存在する
ユニキャストアドレスとエニーキャストアドレスは、通常2つの部分に分けられる。前半の64ビット(サブネットプリフィックス)はルーティングに使用され、後半の64ビット(インタフェース識別子)はサブネット内での個別のインタフェースを指し示す。
ネットワークプリフィックス(「ルーティングプリフィックス」と「サブネットID」)は、アドレスの中の上位64ビットである。ルーティングプリフィックスのサイズは可変である。プリフィックスのサイズが大きくなると、その分だけサブネットIDのサイズが小さくなる。サブネットIDのビットのフィールドは、ネットワーク管理者が与えられたネットワーク内でサブネットを定義するのに使用することができる。64ビットの「インタフェース識別子」は、インタフェースのMACアドレスからmodified EUI-64)を使用して自動的に決定されるか、DHCPv6サーバから取得するか、ランダムに決定されるか、手動で設定するかのいずれかで決められる。
リンクローカルアドレスもまたインタフェース識別子に基づいているが、ネットワークプリフィックスとは異なるフォーマットになっている。
prefix(プリフィックス)フィールドは二進数の値 1111111010 であり、54個のゼロがその後に続く。全てのリンクローカルアドレスのネットワークプリフィックスは同じ(fe80::/64 : リンクローカルアドレスプリフィックス)になり、それがルーティング不可であることを示す。
マルチキャストアドレスは、いくつかの特別なルールに従ってフォーマットされている。
全てのマルチキャストアドレスで、prefix(プリフィックス)は二進数の値 11111111 である。
flg(フラグ)フィールドの4つのビットのうち3つは値の意味が定義されているが、最上位ビットは将来のために予約されている。
4ビットのスコープフィールド (sc) は、アドレスが有効でユニークとなる有効範囲を示すのに使われる。
要請ノード(solicited-node)には特別なマルチキャストアドレスが与えられる。
sc(スコープ)フィールドは二進数値 0010 (リンクローカル)である。要請ノードマルチキャストアドレスは、ユニキャストアドレスやエニーキャストアドレスの最後の24ビットをマルチキャストアドレスの最後の24ビットに写して作られる。
リンク範囲(link-scoped)マルチキャストアドレスは、互換性のあるフォーマットを使用する。
IPv6アドレスは、128ビットを16ビットずつの8つのグループに区切ってそれぞれのグループを4桁の十六進数で表記し、グループとグループの間をコロンで仕切る。例えば以下のように表現される。
2001:0db8:85a3:0000:0000:8a2e:0370:7334
十六進数は大文字・小文字を区別しないが、IETFでは小文字を使用するよう推奨している。この表記は、以下に示す方法で短く表現することができる。
各区切りの先頭の連続する0は省略できる。このルールを適用すると、上記に例示したアドレスは以下のように表記できる。
2001:db8:85a3:0:0:8a2e:370:7334
1つ以上の0だけのグループは、"::"で表すことができる。このルールを適用すると、上記に例示したアドレスは以下のように表記できる。
2001:db8:85a3::8a2e:370:7334
localhost(ループバック)アドレス 0:0:0:0:0:0:0:1 は ::1 と、IPv6未指定アドレス 0:0:0:0:0:0:0:0 は :: と表現できる。1つのアドレス内では :: は1回しか使用できない。これは、:: を2回以上使用すると、それぞれの省略した箇所のビット長がわからなくなるためである。
IPv4とIPv6が混在している環境で、IPv4をIPv6に変換して使用する場合、下位32ビットにIPv4アドレスを含んだIPv4変換IPv6アドレスやIPv4射影IPv6アドレスを使用する。この場合、IPv4アドレスの部分を、通常IPv4アドレスを表記するときに使用する、十進数と"."による記法で表現することができる。例えば、IPv4射影IPv6アドレスの ::ffff:c000:0280 は ::ffff:192.0.2.128 と表現することができる。
IPv6アドレスを単純化しようとしたとき、標準の規定ではIPアドレスの表現に柔軟性がある。しかし、そのために同一のIPアドレスについて複数の表現が許されることになり、特定のIPアドレスをテキストファイルやトラフィックの中から探したり、2つのアドレスが同一であるかを調べたりするのが困難になる。
IETFは、この問題を軽減するために、IPv6アドレスをテキストで表現する際の規範的なフォーマットの規定を RFC 5952 として提案した。この規定は以下の通りである。
それぞれの16ビットフィールドの先頭の0は省略する。例えば、2001:0db8::0001 は 2001:db8::1 とする。ただし、全てが 0 である16ビットフィールドは 0 とする。
0のみのフィールドは"::"で短くする。例えば 2001:db8:0:0:0:0:2:1 は 2001:db8::2:1 とする。ただし、2001:db8:0000:1:1:1:1:1 は 2001:db8:0:1:1:1:1:1 とする。
表現は、できる限り短くする。全て0のフィールドの連続で最も長い物を"::"に置き替える。同じ長さの全て0のフィールドの連続が複数ある場合は、最も左の物を"::"にする。例えば、 2001:db8:0:0:1:0:0:1 は 2001:db8:0:0:1::1 ではなく 2001:db8::1:0:0:1 となる。
十六進数の文字は常に小文字で書く。例えば、2001:DB8::1 ではなく 2001:db8::1 とする。
IPv6ネットワークは、2の累乗個のサイズの一定のIPv6アドレスのグループである「アドレスブロック」を使用する。アドレスの先頭のビットは、与えられたネットワーク内の全てのホストで同一であり、ネットワークアドレスまたはルーティングプリフィックスと呼ばれる。
ネットワークアドレスの範囲はCIDR表記で表される。ネットワーク表現は、ブロックの最初のアドレス(最後のビットが全て0になる)の後にスラッシュ(/)および、プリフィックスのビット長を十進数で書く。例えば、2001:db8:1234::/48 と表現されるネットワークは、2001:db8:1234:0000:0000:0000:0000:0000 に始まり 2001:db8:1234:ffff:ffff:ffff:ffff:ffff で終わる。
インタフェースアドレスのルーティングプリフィックスは、直接にアドレスとCIDR記法で表すことができる。例えば、2001:db8:a::/64 のサブネットに接続されているアドレス 2001:db8:a::123 のインタフェースの設定は、 2001:db8:a::123/64 のように書くことができる。
スラッシュに続く十進数の数値が表すのは、そのアドレスブロックに含まれるアドレスの数ではなく、ネットワークプリフィックスのビット数である。例えば、48ビットのプリフィックスのアドレスブロックは"/48"と表される。そのようなアドレスブロックは、 2128 − 48 = 280 個のアドレスを含んでいる。ネットワークプレフィックスの値がより少ないほど、ブロックは大きくなる。/21のブロックは/24のブロックの8倍の大きさがある。
IPv6アドレスのコロン(:)は、URIやURLのような資源識別子の確立した文法と競合する。コロンは伝統的にホストパスとポート番号の区切りに使用されてきた。この競合を軽減するため、資源識別子の中ではIPv6アドレス を角括弧([])で囲む。例えば、以下のようにする。
https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]/
URLがポート番号を含む場合は以下のようにする。
https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/
Microsoft Windowsオペレーティングシステム (OS) では、IPv4アドレスはUniform Naming Convention (UNC) のパス名に含めることができる。しかし、UNCパス名ではコロンは文法的に意味を持っているため、IPv6アドレスはそのままではUNCパス名に使用できない。このため、マイクロソフトはUNCパスに使用できるドメイン名にIPv6アドレスを含められるような変換アルゴリズムを実装している。このために、マイクロソフトはセカンドレベルドメインipv6-literal.netをインターネット上で登録し、保持している。IPv6アドレスは、以下のように、この名前空間のホスト名やサブドメイン名に変換される。
2001:db8:85a3:8d3:1319:8a2e:370:7348
は以下のように変換される。
2001-db8-85a3-8d3-1319-8a2e-370-7348.ipv6-literal.net
この表記は、マイクロソフトのソフトウェアによってDNSサーバを介さずに自動的に名前解決される。IPv6アドレスがゾーンインデックスを含む場合、それは文字"s"に続けてアドレス部に追加される。
fe80--1s4.ipv6-literal.net
未指定アドレス(::)以外の全てのIPv6アドレスは「スコープ」(scope)を持っている。スコープは、そのアドレスが有効である範囲を特定するのに使用する。
ユニキャストアドレスでは、リンクローカルアドレスとループバックアドレスはlink-localのスコープを持っている。link-localスコープは、そのアドレスが直接接続(link)されているネットワークでのみ使用されることを意味する。
ユニークローカルアドレスを除くそれ以外のアドレスは、global(またはuniversal)のスコープを持つ。globalスコープは、そのアドレスが世界的にルーティング可能であり、全ての箇所においてglobalスコープのアドレスと、直接接続のネットワークにおいてlink-localスコープのアドレスと接続可能であることを意味する。
ユニークローカルアドレスは世界的にルーティング可能ではなく、そのアドレスはそれが使われているネットワークの範囲内でのみ有効である。ユニークローカルアドレスは、ルーティング・テーブルが特にそれを許可するように構成されたルータやトンネルによってルーティングされる。
エニーキャストアドレスのスコープは、ユニキャストアドレスのスコープと同様に定義される。
マルチキャストのために、マルチキャストアドレスの2つ目のオクテットの最下位から4番目のビット(ff0s::)がアドレスのスコープ(scope)、すなわち、マルチキャスト・アドレスが伝達される範囲を示す。現在定義されているスコープは以下の通りである。
IPv6アドレスの割り当てプロセスの管理は、インターネットアーキテクチャ委員会とInternet Engineering Steering GroupからInternet Assigned Numbers Authority (IANA)に委任されている。主な機能は、大きなアドレスブロックを地域インターネットレジストリ(RIR)に割り当てることである。RIRは、世界の地域ごとに、ネットワーク・サービス・プロバイダや他のローカルインターネットレジストリへのアドレスの割り当てを委任されている。IANAは、IPv6アドレス空間の公式の割り当てリストの管理を1995年12月から行っている。
効果的な経路集約(route aggregation)を提供し、それによってインターネット・ルーティング・テーブルのサイズを減らすために、全体のアドレス空間の8分の1(2000::/3)だけがインターネットで使用するために割り当てられている。IPv6アドレス空間の残りは、将来の利用と特別な目的のために予約されている。アドレス空間は/23から/12という大きなブロック単位でRIRに割り当てられている。
RIRはローカルインターネットレジストリ(LIR)に小さなブロックを割り当てる。そのサイズは一般的に/19から/32の範囲である。アドレスは一般的に/48から/56の単位でエンドユーザに分配される。
グローバルユニキャストの割り当ての記録は、それぞれのRIRのサイトなどで閲覧できる。
IPv6アドレスは、IPv4アドレスと比較して大きなブロックで各組織に割り当てられる。推奨された割り当ての大きさである/48は280個のアドレスを含んでおり、これはIPv4アドレスの全アドレス空間(32ビット)の248倍(約2.8倍)である。IPv6アドレスの全アドレス空間は2128個(340,282,366,920,938,463,463,374,607,431,768,211,456個、約3.4個、340澗個、340兆の1兆倍の1兆倍)もあるため、予見できる将来に対して十分である。
それぞれのRIRは1つの/23ブロックを512個の/32のブロックに分割することができ、一般的には1つのISPに対して1つの/32ブロックを割り当てる。ISPは割り当てられた/32ブロックを65個の/48ブロックに分割することができ、一般的には1人の顧客に対して1つの/48ブロックを割り当てる。顧客は割り当てられた/48ブロックから65個の/64のネットワークを作ることができる。/64のネットワークには264個(18,446,744,073,709,551,616個、約1.8個、1845京個)のアドレスが収容できる。これでもIPv4の全アドレス空間(232個、4,294,967,296個、約4.3個)の232倍の個数である。
計画的に、アドレス空間の非常に少ない部分だけが、実際には使われる。大きなアドレス空間はアドレスがたいてい利用できることを確実にする。そして、それはアドレス維持のためにネットワークアドレス変換(NAT)を使用することを完全に不必要にする。NATはIPv4ネットワークにおいてIPアドレス枯渇問題を軽減するために今後も使われる。
アドレスの再割り当てすることなくプロバイダーを変えられるようにするために、RIRがエンドユーザに直接アドレスを割り当てるためのプロバイダ非依存アドレス空間が 2001:678::/29 として定められている。
インターネットエクスチェンジ(IX)には 2001:7f8::/29 の範囲から特別なアドレスが割り当てられており、IXに接続されているISPとの通信に使用される。ルートDNSサーバにも同じ範囲からアドレスが割り当てられている。
それぞれのサブネットプリフィックスの最も低いアドレス(インタフェース識別子を全て0に設定したもの)は、「サブネット・ルータ・エニーキャストアドレス」として予約されている。アプリケーションはこのアドレスを利用可能な1つのルータとの通信に利用できる。このアドレス宛のパケットはただ1つだけのルータに届く。
/64のサブネットプリフィックスの最上位の128個のアドレスは、エニーキャストアドレスとして予約されている。これらのアドレスは、インタフェース識別子の最初の57ビットが1で、残りの7ビットがエニーキャストIDである。この場合、そのアドレスが世界的に唯一ではないことを示すために、universal/localビットは0にしなければならない。エニキャスト識別子0x7eはmobile IPv6ホームエージェント・エニーキャストアドレスとして定義されている。エニキャスト識別子0x00から0x7dまでと0x7fは予約されており、何にも使用されていない。
IPv6において特別な意味を持つアドレスがある。それを以下に挙げる。
::/128 — 全ビットが0のアドレスは未指定アドレス(unspecified address)と呼ばれる。IPv4における「0.0.0.0/32」に相当する。 このアドレスは、いかなるインタフェースも割り当ててはならない。このアドレスは、初期化中のホストの自分自身のIPアドレスを知る前にIPv6パケットを送る場合の送信元アドレスとして使用される。ルータは未指定アドレスを持つパケットを転送してはならない。
::/0 — デフォルトルートを表すアドレスである。IPv4における「0.0.0.0/0」に相当する。
::1/128 — ループバックアドレスはユニキャストlocalhostアドレスである。ホストのアプリケーションがこのアドレス宛にパケットを送信したときは、IPv6スタックはそのパケットを同じ仮想インタフェースにループバックする。IPv4における「127.0.0.1/8」に相当する。
fe80::/10 — リンクローカルプリフィックスのアドレスは、単一の接続の中でのみ有効であり唯一である。このプリフィックスにおいては1つのサブネットのみが割り当てられ(残り54ビットは0)、効果的なフォーマットは fe80::/64 と与えられる。下位64ビットはインタフェースのハードウェアアドレスからmodified EUI-64によって決められるのが一般的である。リンクローカルアドレスは、あらゆるIPv6対応インタフェースで必要とされる。IPv6ルーティングがないときは、アプリケーションはリンクローカルアドレスの存在に頼るかもしれない。これらのアドレスは、IPv4における自動設定アドレス 169.254.0.0/16 に相当する。
fc00::/7 — ユニークローカルアドレス (ULA) はローカルな通信のために使われる。それらは、設定されたサイトの中でだけルーティングできる。このブロックは2つの部分に分割される。後半半分(fd00::/8)は「確率論的にユニークな(probabilistically unique)」アドレスとして使用され、40ビットの擬似乱数を用いて/48の割り当てを得る。これは、結合または互いと通信しようとする2つのサイト間で競合するアドレスができてしまう可能性が僅かにあるということを意味するが、どの程度僅かなのかは不詳である。前半半分(fc00::/8)は割り当てない方式のために定義されている。これらのアドレスは、IPv4のプライベートアドレス(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)に相当する。
::ffff:0:0/96 — このプリフィックスは「IPv4射影IPv6アドレス」(IPv4-mapped IPv6 address)に割り当てられている。この種類のアドレスを使用することで、IPv4のトランスポート層プロトコルをIPv6ネットワークアプリケーションプログラミングインタフェース(API)を透過して使用することができる。サーバアプリケーションは、1つのソケットを待ち受けるだけで、IPv6とIPv4の両方のクライアントからの要求を受け付けることができる。IPv4クライアントは、IPv4射影IPv6アドレスによって、サーバからはIPv6クライアントのように見える。伝送においても同様に取り扱われる。IPv4またはIPv6のデータグラムを伝送するのに、IPv6アドレスとIPv4射影IPv6アドレスにバインドされた確立したソケットを使用することができる。(IPv6#IPv4との相互運用を参照)
::ffff:0:0:0/96 — 「IPv4変換IPv6アドレス」(IPv4-translated address)に割り当てられており、ステートレスIP/ICMP変換(SIIT)プロトコルに使用する。
64:ff9b::/96 — "Well-Known Prefix"。このプリフィックスのアドレスは、自動IPv4/IPv6トランスレーション(NAT64)に使用する。
2002::/16 — このプリフィックスは、6to4のために使用される。(6to4はHistoricalとなった RFC 7526)
IANAは'Sub-TLA ID'と呼ばれるアドレスブロックを特別な用途のために予約している。それは、 2001:0000::/29 から 2001:01f8::/29 までの範囲の64のネットワークプリフィックスである。その内の3つは以下のものである。
2001::/32 — teredoに用いられる。
2001:2::/48 — Benchmarking Methodology Working Group (BMWG)に割り当てられており、IPv6のベンチマークに使用されている。IPv4でベンチマークに使用されている 198.18.0.0/15 に相当する。プリフィックス 2001:0200::/48 は RFC 4773 ではなく RFC 5180 で定義されている。
2001:20::/28 — ORCHIDv2 (Overlay Routable Cryptographic Hash Identifiers)に割り当てられている。これらはCryptographic Hash Identifiersに使うルーティングされないIPv6アドレスである。
2001:db8::/32 — このプリフィックスは、文書記述用に使用される。このアドレスは、マニュアルや設定サンプル等に例示としてIPv6アドレスを使用する場合に使用される。このアドレスは実際の通信には使用してはならない。IPv4では 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 がこの目的で使用されていた。
0100::/64 — このプリフィックスは、破棄するトラフィックに使用される。
マルチキャストアドレス ff0X::(Xは十六進数の値)は予約されており、いかなるマルチキャストグループにも割り当ててはならない。Internet Assigned Numbers Authority(IANA)がアドレスの予約を管理している。
ff0X::のIPv6マルチキャストアドレスは、以下の物に割り当てられている。
要請ノードマルチキャストアドレスのグループIDの下位24ビットは、インタフェースのユニキャストアドレスまたはエニーキャストアドレスの下位24ビットである。このアドレスは、ローカル・ネットワーク上の全てのノードを妨げずに、近隣探索プロトコル(NDP)によるリンク層アドレス解決をすることができる。ホストは、設定されたユニキャストアドレスまたはエニーキャストアドレスの要請ノードマルチキャストグループに参加しなければならない。
システムの起動時、ノードは、それぞれのIPv6が利用可能なインタフェースについてリンクローカルアドレスを自動的に生成する。グローバルにルーティングできるアドレスが、手動で設定されるか、後述する「設定プロトコル」から得られる場合でも同様である。
それは、近隣探索プロトコルの機能を使用したステートレスアドレス自動設定(SLAAC)によって、独立して、そして、事前設定なしで動作する。このアドレスはプリフィックス fe80::/64 の中から選択される。
IPv4に「設定プロトコル」はDHCPやPPPを含む。DHCPv6もあるが、IPv6のホストはグローバルにルーティング可能なユニキャストアドレスを作るのに近隣探索プロトコルを用いる。ホストはルータ要請(RS: router solicitation)を送信し、IPv6ルーターは割り当てられたプリフィックスとともに応答を返す。
アドレスの下位64ビットは、64ビットのmodified EUI-64フォーマットによるインタフェース識別子である。この識別子は、通常そのインタフェースの全ての自動的に構成されたアドレスによって共有される。その利点は、1つのマルチキャスト・グループだけが近隣探索のために参加する必要があることである。このためには、ネットワークプリフィックス ff02::1:ff00:0/104 とアドレスの下位24ビットからなるマルチキャストアドレスが用いられる。
64ビットのインタフェース識別子は、48ビットのMACアドレスから生成するのが最も一般的である。MACアドレス 00:0C:29:0C:47:D5 は、真ん中に FF:FE を入れることで64ビットのEUI-64 00:0C:29:FF:FE:0C:47:D5 に変換される。このEUI-64をIPv6アドレスの中で使うとき、次のように変形される。 Universal/Localビット(EUI-64の最上位ビットを第1ビットとしたときの第7ビット)を反転する。ネットワークプリフィックス 2001:db8:1:2::/64 と上記のMACアドレスを用いてIPv6アドレスを生成すると、 2001:db8:1:2:020c:29ff:fe0c:47d5 となる。ここで、下線部はUniversal/Localビットが1に反転された箇所である。1はUniversal、0はLocalを意味する。
グローバルユニキャストアドレスのインタフェースIDには、MACアドレス等から生成されるModified EUI-64フォーマットが使用されることが多いが、プライバシー上の懸念があるため、一意性およびプライバシーの双方を満たす仕様(一時アドレス)への変更が推奨されている(RFC 7217、RFC 7721、RFC 8064)。
インタフェースにユニキャストIPv6アドレスを割り当てた後、Neighbor Solicitation(近隣要請)とNeighbor Advertisement(近隣広告)(ICMPv6のtype 135と136)メッセージを使ってそのアドレスが唯一のものであるかの確認を行う。確認を行っている間、そのアドレスは「仮」(tentative)の状態にある。