IPv4では32bitのアドレスのうち、上位の何bitかをネットワーク・アドレスとし、残りの下位部分をホスト・アドレスとして利用するのが一般的であった。同様にIPv6でも、128bitのアドレスを2つのパートに分けて利用している。そして、その上位の方を単に「プリフィックス」、あるいは「ネットワーク・プリフィックス」「サブネット・プリフィックス」などと呼ぶ。表記方法としては次のようになる。
<IPv6アドレス>/<プリフィックス長>
例えば64bitずつに分けるなら、「2001:0db8::/64」のように表記する。IPv4のCIDRのように(連載 基礎から学ぶWindowsネットワークの第8回「2.サブネットワークへの分割」参照)、アドレスの上位から何bitをプリフィックスとして使用するかを指定する。プリフィックス長はアドレスの用途に応じて変わる。
IPv4アドレスは用途に応じていくつか種類があったが、同様にIPv6でもその利用目的に応じて、いくつかの種類がある。以下にその主なものを示しておく。
プリフィックス | 2進数表記 | 用途 |
---|---|---|
2000::/3 | 001 | グローバル・ユニキャスト・アドレス(GUA)。IPv4でいうところのグローバルIPアドレス |
fc00::/7 | 1111 110 | ユニーク・ローカル・ユニキャスト・アドレス(ULA)。IPv4でいうところのプライベートIPアドレス |
fe80::/10 | 1111 1110 10 | リンクローカル・ユニキャスト・アドレス |
ff00::/8 | 1111 1111 | マルチキャスト・アドレス |
主なIPv6アドレスの種類 これ以外の部分は予約済みとなっており、利用できない。それぞれのタイプの中にも、予約済みの特定のアドレスがあるがここでは述べない。 |
ユニキャスト・アドレスとは、特定の1つのノードに向けて送信するときに使われるIPアドレスのことである。表の上側の3つのアドレスがこれに該当する。
マルチキャスト・アドレスとは、複数のノードに対していっせいに送信するために使われるアドレスである。ブロードキャストでは、同一ネットワークに接続されているすべてのノードが受信対象となるが、マルチキャストでは特定の機能を持つノードだけが受信の対象となる。例えばルータとかDHCPサーバ、NTPサーバだけを対象として制御情報を送信できる。ブロードキャストではルータを越えて送信はできないが、マルチキャストでは同一ネットだけ、同一サイトだけ、社内全部など、ルータを越えて特定の機能を持つすべてのノードに対していっせいに送信できる。IPv6では、制御情報のやりとりなどでこのマルチキャストが使われており、ブロードキャストは使われていない。
それでは次に、3種類あるユニキャスト・アドレスについてみてみよう。まずグローバル・ユニキャスト・アドレス(GUA)であるが、これはIPv4でいうところのグローバルIPアドレスに相当する。インターネットに接続したいノードは、プロバイダなどからこのアドレスを割り当ててもらう必要がある。
IPv6でプロバイダなどからアドレス・ブロックの割り当てを受けると、128bitのうち48bit分が割り当てられるが、残りの80bitは組織内で自由に割り当てて利用できる(割り当て単位は48bitではなく、64bitの場合もある)。具体的には次のようなアドレス・パターンを持つ。これだけあれば、社内のノードすべてにグローバルなIPアドレスを十分に余裕を持って割り当てられるだろう。ただしセキュリティのためにこのアドレスを使わず、次のユニーク・ローカル・ユニキャスト・アドレスを割り当てるといった構成も当然可能である。
bit数 | 用途 | 意味 |
---|---|---|
48bit | グローバル・ルーティング・プリフィックス | 2000::/48。先頭の3bitが001で、残り45bitがユニークになるようにプロバイダなどから割り当てられる |
16bit | サブネットID | 割り当てられた組織内でサブネット分割のためのIDとして利用可能なフィールド。各組織内で割り当て、管理する |
64bit | インターフェイスID | ネットワーク内のノードに割り当てるユニークな数値。各組織内で割り当て、管理する |
グローバル・ユニキャスト・アドレスのアドレス構造 |
サブネットIDは、組織内でサブネット分割する場合に、各サブネットごとにユニークになるように割り当てる固有のIDである。組織内で管理する。
インターフェイスIDは、各サブネット内にある各ノード(のインターフェイス)に対して割り当てる、固有の64bitのIDである。詳細は後述する。
これはIPv4でいうところの、プライベートIPアドレス(192.168.0.0/16、172.16.0.0/12、10.0.0.0/8)に相当する。組織内だけで独自にIPv6アドレスを割り当てて使うことが可能である。IPv6では広大なグローバル・アドレス空間が利用できるため、いちいちプライベートなIPアドレスを利用しなくても、グローバルなIPアドレスを組織内のノードにそのまま直接割り当て可能だ。だが場合によってはこれは問題となることがある。
例えばグローバルなIPアドレスを使ってインターネット通信すると、社内のノードの情報(IPv6アドレス)などが外部へ漏えいする可能性がある。セキュリティ的にはこれはあまり望ましくないだろう。また、契約するプロバイダが倒産や合併などで変わったりすると、いちいち組織内のIPアドレスを割り当て直す必要があり、非常に面倒である。ならば最初からプライベートなIPアドレスを使ってネットワークを設計しておく方がよい。
もちろんこれ以外にも、実験的な用途でローカルなネットワークでこのアドレスを使ってもよい。ただしインターネット側へ送信してはいけないので、注意すること。
bit数 | 用途 | 意味 |
---|---|---|
7bit | プリフィックス | FC00::/7。先頭の7bitが1111 110 |
1bit | L | グローバルIDの使い方を指定する。ただしL=0はIETFによって予約済みであり、通常はL=1の方だけが利用可能である。そのため上位8bitで見ると、FC00::/8は使用できず、FD00:/8のみが利用可能 |
40bit | グローバルID | 組織内で任意に設定可能なIDフィールド。ただしなるべくほかの組織と衝突しないように、ある計算方法に従って求めることが推奨されている。各組織内で割り当て、管理する |
16bit | サブネットID | 割り当てられた組織内でサブネット分割のためのIDとして利用可能なフィールド。各組織内で割り当て、管理する |
64bit | インターフェイスID | インターフェイスごとのID。各組織内で割り当て、管理する |
ユニーク・ローカル・ユニキャスト・アドレスのアドレス構造 |
ユニーク・ローカル・ユニキャスト・アドレスを使う場合は、まず40bitのグローバルIDを決定し、同一組織内ではこれがすべて同じになるようにアドレスを管理する。グローバルIDは組織ごとのプライベートな値なので、任意に設定してもよさそうなものだが、この値を求めるために推奨されている方法がある。その方法ではNTPサーバによる時刻情報とイーサネットのMACアドレスなどを基にして、なるべくランダムになるように計算している。これにより、組織ごとに異なる(可能性が非常に高い)40bitの数値が得られる。グローバルIDが異なれば、例えば2つの組織が合併しても問題なくネットワークを統合できるようになるだろう。
IPv4ではプライベートIPアドレスの範囲が狭かったため、例えば合併する2つの組織がどちらも10.0.0.0/8を使っていると、そのままネットワークを統合することはできなかった。アドレス範囲が衝突してしまうからだ。この場合はどちらかのネットワーク・アドレスを全体的に変更しなければならない。
これに対してIPv6のユニークなグローバルIDを使う方式では、ネットワーク・アドレスの衝突の可能性が非常に小さくなっている。
3つのユニキャスト・アドレスのうちの1つであるリンクローカル・ユニキャスト・アドレスは、基本的には隣接ノードとの通信にのみ使われる、ユニークなローカル・アドレスである。IPv4にはこれに相当するアドレスはないので分かりづらいかもしれないが(APIPAのLINKLOCALアドレスとは意味も用途も違う)、このアドレスあてのパケットはルータを越えることはできないし、インターネットへ送信してもいけない。同一のリンク(ネットワーク)に属しているノード同士が、お互いを見つけたり、サービスなどを要求したりするときに使うアドレスである。IPv6では、イーサネットのブロードキャストが届く範囲(ブロードキャスト・ドメイン)のことを「リンク」と呼んでいるが、そのリンク内でのみ有効なアドレスなので、リンクローカルなユニキャスト・アドレスという。
bit数 | 用途 | 意味 |
---|---|---|
10bit | プリフィックス | fe80::/10。先頭の10bitが1111 1110 10 |
54bit | (未使用) | すべて0。未使用領域 |
64bit | インターフェイスID | インターフェイスごとのID。通常はOSが自動的に付与する |
リンクローカル・ユニキャスト・アドレスのアドレス構造 |
IPv6では、各インターフェイスがIPv6ノードとして有効な場合は、必ず1つはリンクローカル・ユニキャスト・アドレスを持つことが要請されている。これにより、IPv6が動作しているノードに対しては、必ずIPv6で通信できることが保証される。
IPv4では通信相手を見つけるのにまずARPプロトコルを使っていたが、これはIPとは論理的には独立した別のプロトコルであった。これに対してIPv6では通信相手を見つけるためにARPは使わず、IPv6上で動作するICMP(ICMPv6)を利用している(IPv6のマルチキャスト通信で通信相手を探索する)。リンクローカル・ユニキャスト・アドレスがIPv6ノードに必須とされるのは、こうした仕組みからだ。IPv6の管理に使うプロトコルもすべてIPv6上で動作させることにより、アーキテクチャとしては簡素化されるし、プロトコル機能の拡張なども容易になるだろう。
IPv4では32bitのアドレスのうち、上位の何bitかをネットワーク・アドレスとし、残りの下位部分をホスト・アドレスとして利用するのが一般的であった。同様にIPv6でも、128bitのアドレス(ノード・アドレスという)を2つのパートに分けて利用している。基本的には、上位を「プリフィックス」、下位を「インターフェイスID(インターフェイス識別子)」と呼ぶ。
bit数 | 用途 | 意味 |
---|---|---|
64bit | プリフィックス | アドレスの種類やプリフィックス、サブネットIDなど |
64bit | インターフェイスID | インターフェイスごとのID。通常はOSが自動的に付与する |
IPv6アドレスの構造 一般的には64bit境界で区切るが、それ以外の場所で区切ることも可能。 |
下位の64bitをホスト・アドレスではなく、インターフェイスIDと呼ぶのは、IPv6の設計思想に由来している。基本的にIPv4では、ネットワーク・インターフェイスごとにIPv4のIPアドレスを1つ割り当てていた。これに対してIPv6では、1つのネットワーク・インターフェイスに対して2つ以上のアドレスを割り当てることができる。膨大なアドレス空間が利用できるため、例えばホスト上で動作しているサービスごとに異なるアドレスを割り当てることが可能だし、実際にそのようにも使われている。そのため、「ホスト・アドレス」という名前のままだと、複数のホストが存在するように思われる可能性がある。そこでIPv6では名称を変え、「インターフェイスID」と呼んでいる。
■更新履歴
【2015/07/07】表「ユニーク・ローカル・ユニキャスト・アドレスのアドレス構造」の「1bit」行の「意味」列で、「〜、FC00::/7は〜」と記していましたが、正しくは「〜、FC00::/8は〜」でした。お詫びして訂正いたします。
Copyright© Digital Advantage Corp. All Rights Reserved.