現行のIPバージョン4(IPv4)に代わる新たなプロトコルとしてIPバージョン6(IPv6)が制定されています。IPv6はIPv4を越えるものとして開発され,広大なアドレス空間,エンドシステム間通信など,現在のインターネットに必要な技術を持っています。今回は,まずIPv6の特徴として語られることの多いIPv6アドレスについて勉強しましょう。
IPv6の特徴
IPv6は現行・将来のネットワークの要求を満たすべく強力な機能を持っています。- 広大なアドレス空間
- アドレスとして128ビットを使用します。柔軟なアドレス集約や,NATなしでのエンド間接続をサポートし,さらに自動設定を持つことによりプラグアンドプレイを実現します
- シンプルなヘッダ
- ルーティングの際の効率を上げ,チェックサムを不要にし,フローラベルなど効率的な拡張を持ちます
- モバイルとセキュリティのサポート
- モバイルIPとIPsecを標準として使用できます
- 豊富な変換
- IPv4からIPv6への変換方法を複数使用できます
IPv6アドレス空間
前述のようにIPv6では128ビットのアドレス空間を使用します。IPv4では約4,200,000,000個のアドレスを使用できますが,IPv6では3.4 x 1038のアドレスが使用できます。それにより,多くのデバイスにグローバルIPアドレスを割り振ることができるようになります。しかし,その分IPヘッダのアドレス部分に必要なビット数が増えることにもつながっています。また,多くのアドレスを使用することができるようになったため,ISPや組織に多くのアドレスを割り振ることができ,集約も簡単に行えるようになっています。
IPv6アドレスは16進数で表示し,コロンで4桁ごとに区切りを入れます。例えば,FFEC:0001:0000:0000:0000:0A12:0000:0001 のように記述します。0はルールに従って省略して記述できます。コロンの区切りで4桁とも0の場合は1度だけ :: で省略できます。また,区切り内に先頭から0が含まれている場合0を省略できます。先ほどのアドレスでいえば,FFEC:1::A12:0:1になります。すべて0のアドレスは::で記述します(図1)。
図1 IPv6アドレスの記述
IPv6アドレスでは次の3つのタイプがあります。
- ユニキャスト
- 通常の1 対 1の通信に使われるアドレス。グローバルユニキャスト(グローバル集約)とリンクローカルの2つのアドレスがあります。
- エニーキャスト
- IPv6からの新しいアドレスタイプで,異なるインタフェースに同一のアドレスを割り振ることができます。エニーキャストあてで送信すると最も近いインタフェースが受信します。負荷分散などで使用することができます。
- マルチキャスト
- 異なるインタフェースに同一のアドレスを割り振り,マルチキャストアドレスあてに送信すると,そのすべてのインタフェースが受信します。IPv4のマルチキャストと同等です。
IPv4で存在したブロードキャストアドレスはなくなっており,マルチキャスト,またはエニーキャストがその代替として使われます。またIPv6アドレスはインタフェースに複数(ユニ,エニー,マルチ)設定できます。IPv6を使用するインタフェースは::1/128(ループバック)のアドレスと,一つ以上のリンクローカルのアドレスを持ちます。
IPv6アドレスには,ホスト部としてインタフェース識別子(IDs)があり,この識別子はリンク上でユニークである必要があります。インタフェース識別子はデータリンク層の物理アドレスから生成することができます。IPv6は多くのデータリンク層のプロトコル・規格をサポートしています。
イーサネットの場合,インタフェース識別子はMACアドレスを基本として,通常48ビットのMACアドレスを,EUI-64(Extended Universal Identifier - 64bit)フォーマットに変換したものを使用します。まず,先頭から24ビット目と25ビット目の間にFFFEを挿入します。そして,先頭から7ビット目(そのアドレスがグローバルに管理されているかローカルに管理されているかを識別するビット。Universal/Localビット)を1にセットします(図2)。
図2 EUI-64
IPv6アドレス
IPv6アドレスの構造はRFC4291に定義されています。ここでは,グローバルユニキャスト,リンクローカルユニキャスト,エニーキャスト,マルチキャストの4つのアドレスについて説明します。まず,グローバルユニキャストアドレスです。これはIPv4のグローバルユニキャストアドレスと同等の,インターネットで一意に管理されるアドレスです。IPv6グローバルユニキャストアドレスは,IPv6のアドレス空間のうち,2000::/3(先頭3ビットが「001」)からE000::/3(先頭3ビットが「111」)までを使用します。ただし,FF00::/8(先頭8ビットが「1111 1111」)はマルチキャストアドレスのため除きます。
IPv6グローバルユニキャストアドレスは,集約可能な階層構造に構成されており,それにしたがってレジストラやISPに割り振られます(図3)。
図3 IPv6アドレスの階層構造
現在,IANAでは2001::/16をグローバルユニキャストアドレスとして割り振っています。地域レジストリは/23のプレフィックスを持ちます。地域レジストリからISPに割り振る際は/32,ISPはさらに組織に割り振る際には/48を使用します。ここまでの/48をグローバルルーティングプレフィックスと呼びます。そこから16ビットのサブネットプレフィックス(サブネットID),そして残った64ビットがインタフェース識別子になります(図4)。
図4 IPv6グローバルユニキャストアドレス
2つ目がリンクローカルユニキャストアドレスです。リンクローカルユニキャストアドレスは,ローカルのリンク(ルータを超えない)に範囲(スコープ)が限定されています。そして,リンクローカルアドレスはFE80::/10を使用してIPv6インタフェースに動的に設定されます。リンクローカルアドレスは,自動設定,ネイバの発見,ルータの発見,ルーティングプロトコルなどに利用されます(図5)。
図5 IPv6リンクローカルユニキャストアドレス
リンクローカルユニキャストアドレスを使うことにより,ホストは同一のローカルリンク上の他ホストにグローバルユニキャストアドレスなしでも接続することができます。
次がエニーキャストアドレスです。エニーキャストアドレスは特にIPv6アドレス空間の中で決められた範囲ではなく,グローバルユニキャストアドレスと同じ空間を使用します。そのため,構造上からはエニーキャストとグローバルユニキャストを区別することはできません。グローバルユニキャストを複数のインタフェースに設定すると,グローバルユニキャストはエニーキャストアドレスになります。ただし,ホスト側はエニーキャストアドレスが割り振られていると明示的に構成しなければなりません。エニーキャストアドレスは送信元のアドレスとして使用できない点にも注意が必要で,その点からもホストは明示的にエニーキャストアドレスが使用されていることを知っている必要があります。
エニーキャストアドレスあてに送信すると,エニーキャストグループ(同一のエニーキャストアドレスを持つホスト)の中で送信元にもっとも近いホストが受信します。そのため,もっとも近いホストを探し出す機能をIPv6は備えています。WANがスコープの場合は,ルーティングプロトコルのメトリックを使用してもっとも近いインタフェースを見つけます。LANがスコープの場合はネイバ発見を使用して最も近いインタフェースを見つけます。
最後がマルチキャストアドレスです。マルチキャストはIPv6で非常に重要で,IPv6の機能のいくつかの中心的役割を担い,またブロードキャストの代替として使用されます。マルチキャストアドレスはFF00::/8のプレフィックスを持ち,2オクテット目はフラグと範囲を決定します。残りの112ビットがグループのIDとなります(図6)。
図6 IPv6マルチキャストアドレス
フラグは先頭3ビットが0で予約されているため,1か0しかありません。0の場合の「既知」はWell-Knownのアドレス(IANAにより決められているアドレス)であることを示します。スコープは現時点では7種類が決められており,それ以外は未割り当てになっています。既知のマルチキャストアドレスには次のものがあります。
- FF02::1/128 … リンク上のすべてのノード
- FF02::2/128 … リンク上のすべてのルータ
- FF02::9/128 … リンク上のすべてのRIPルータ
- FF02::1:ff00:0/104 … リンク上の要請ノードマルチキャストアドレス
- FF05::101/128 … サイト上のすべてのNTPサーバ
112ビッマルチキャストアドレスのグループIDのうち,1は全ノード,2は全ルータと決まっています。また要請ノードマルチキャストアドレスは,LANでのIPv6アドレスとMACアドレスのアドレス解決(IPv4でのARP)などに使用されるアドレスです。IPv4でのARPはレイヤ2レベルでブロードキャストされるため,必要のない機器にまで配信されてしまいます。IPv6では要請ノードマルチキャストアドレスを使用することにより,その負荷を軽減しています。要請ノードマルチキャストアドレスは,104ビットのプレフィックスを持つFF02::1:FF00:0000に,あて先のIPv6アドレスの後ろ24ビットを足したものになります(図7)。
図7 IPv6要請ノードマルチキャストアドレス
要請ノードマルチキャストアドレスを使用することにより,アドレス解決などで全ノードに配信する必要がなくなり,特定のアドレスを持つホストだけが影響することになります。