連載
» 2001年09月27日 00時00分 公開

IPv6ネットワークへの招待(2):拡張されたIPv6のアドレス空間

[三木泉,インターネット戦略研究所]

 TCP/IPプロトコル群の中で、ネットワーク層を担っているのがIPだ。そして現在のIP(IPv4)メカニズムに代わる次世代のIPとして標準化が進んでいるのがIPv6である。IPv6は、現在のTCP/IPメカニズムをすべて変えてしまうものではなく、基本的にはIPヘッダを入れ替えることを意味する。「IPv4」の後継であるにもかかわらず、「IPv6」と呼ばれているのは、ST-II(RFC1819)という実時間通信用のプロトコルが「IPv5」というバージョン番号を先に使ってしまったためだ。

 IPv4とIPv6の違いを示すには、双方のIPヘッダの構造を説明するのが手っ取り早い(詳細については「IPv6のヘッダフォーマット」の回で解説する)。言うまでもなく、IPヘッダには発信元IPアドレスや送信先IPアドレスが含まれているが、それ以外にも数々の情報を埋め込むための領域(フィールド)が標準として定義されている。図1・2を見ると、まず発信元、送信先のIPアドレスの長さの違いが目に付く。しかしIPヘッダは全体的にあまり長くなっていない。また、IPv4に含まれているいくつかのフィールドが、IPv6では消えている。このヘッダ構成図からは分からないが、1つの物理的インターフェイスに複数のIPアドレスを割り当てることができる点も、IPv4とIPv6の使い勝手を大きく変える重要なポイントである。

図1 IPv4ヘッダ構成図 図1 IPv4ヘッダ構成図
図2 IPv6ヘッダ構成図。IPv4のヘッダに比べ、発信元/送信先アドレスが長くなっているが、全体としてはそれほどサイズが大きくなっておらず、よりシンプルになっていることが分かる 図2 IPv6ヘッダ構成図。IPv4のヘッダに比べ、発信元/送信先アドレスが長くなっているが、全体としてはそれほどサイズが大きくなっておらず、よりシンプルになっていることが分かる

128ビットに拡大されるIPアドレス

 IPv6の最も大きな目的は、IPアドレス空間の拡大である。IPv4では、IPアドレスのために32ビットを使っている。つまり数字の組み合わせとしては、2の32乗、4,294,967,296(約43億)通りが可能だ。実A際にはプライベートIPアドレス用として予約されている範囲があるため、グローバルアドレスとして使える数字の組み合わせはもっと少ない。

 43億個でも、すでに世界の人口を大幅に下回ってしまっているし、IPアドレスを組織に対してクラス単位で割り当ててきたことから生じている無駄を考慮すると*1、中国やインドのインターネット接続が進むにつれ、コンピュータに対するIPアドレス割り当ての作業は等比級数的に難しくなってくることが容易に考えられる。さらに携帯電話、ゲーム機、家電製品、エレベータ、ペースメーカーといった非コンピュータ機器のネットワーク化のためには、とてつもない数のアドレスが要求されてくる。そこでIPv6では、IPv4の4倍の128ビットが用意された。これによって、2の128乗個の組み合わせが可能になっている。

*1IPv4では「クラス」という概念があり、クラスAでは2の24乗個、クラスBでは2の16乗個、クラスCでは2の8乗個と、それぞれホスト用にグローバルアドレスを割り当てが可能(ブロードキャスト用などのアドレスが予約されているため、実際に使えるものはこの数より少ない)。当初は、組織に対してこのクラス単位でIPアドレスを割り当ててきたため、実際に使用されるIPアドレスに無駄が生じていた(特に、クラスAを使い切ることが可能な組織は存在しないといえる)。現在では、CIDR(Classless Inter-Domain Routing)と呼ばれる任意のブロック単位でIPアドレスを割り当てる方式が採用され、IPアドレスを無駄なく使用する方向に進んでいる


 IPアドレスの表記の仕方は、IPv4では「ドット付き10進表記」と呼ばれるものを使っている。32ビットのIPアドレスを8ビットのフィールド4つに分割し、それぞれのフィールドを10進数で表現するとともに、各フィールドの間にドットを入れている。

 例えば、2進数で「0110000000000001100100000000111」と表現されるIPアドレスを「01100000」「00000001」「10010000」「0000111」に分割し、それぞれを10進数に直せば、「96.1.144.7」となる。一方、IPv6では、128ビットを16進数に直して、これを4けたごとに、「コロン(:)で区切って表現する。例えば最初の16ビットが「0011111111111110」の場合、これは「3ffe」と表すことができる。IPv6アドレス全体としては、

3ffe:0200:0000:010a:0000:0000:0000:0001

といった表記がなされる。

 それでも長すぎるアドレスを少しでも短く表現するために、「分割された各セクションでは先頭の0を省略できる」とか「0000のセクションが続く場合、二重コロン(::)で代用できる」などのルールが設けられているが、一般のユーザーがホストをIPアドレスで指定することはもはや期待できない。このため、DNSの役割は現在にもまして重要なものとなる。

アドレスの割り振りポリシー

 さて、128ビットのアドレス空間をどう使うか。まず、IPv6のIPアドレスは、「ユニキャスト」「エニイキャスト」「マルチキャスト」の3つに大きく分けられる。このうちユニキャストには「グローバルアドレス」「リンクローカルアドレス」「サイトローカルアドレス」があるが、リンクローカルアドレスとサイトローカルアドレスについては後述とし、最も一般的なグローバルユニキャストアドレス(正式には「経路集約可能なグローバルユニキャストアドレス」と呼ばれている)について説明する。以下ではRFC2374に基づいて説明するが、この部分は技術的というよりも運用にかかわる要素が大きく絡んでおり、どの部分をだれがコントロールすべきかを含め、現在見直しのための論議がなされているところである。

 まず、後半64ビットがインターフェイスIDと呼ばれ、いわゆるホスト部*2として使われることになっている(同一の端末であっても複数のネットワーク・インターフェイスを持っている場合があるが、この場合は当然ながらインターフェイスごとにIPアドレスが与えられることになる)。従って、前半64ビットがネットワークの構成のために利用されるネットワーク・プレフィックスになる。最初の3ビットは、アドレス形式として「経路集約可能なグローバルユニキャストアドレス」であることを示すプレフィックスとして予約されており、現在は「001(2進法表記)」を使うことになっている。次の13ビットがTLA ID(Top Level Aggregation ID:最上位階層識別子)、その次の8ビットが再び予約となっており、その下の24ビットがNLA ID(Next Level Aggregation ID:次階層識別子)、さらにその次の16ビットがSLA ID、(Site Level Aggregation ID:サイト階層識別子)となっている。SLA IDは、サブネット化のために用意されているものだ。従って各サイト(ユーザー組織)は先頭から48ビットまでを割り当ててもらうことになる。

*2ホスト部とは、組織が各ホストに対して割り当て可能なIPアドレスの範囲である。先の脚注でクラスの概念について触れたが、IPv4では32ビットのアドレスを「ネットワーク部」と「ホスト部」に分割し、それぞれ「組織の識別」と「組織内のホストの識別」の意味で使用している。クラスA〜Cの概念やCIDRは、このネットワーク部とホスト部との境界がどのビットにあるのかを識別するためのものである


 IPv4の世界では、少し前までユーザーが直接JPNICからアドレスレンジの割り当てを受けることも可能とされていたが、IPv6では必ず自社が接続する通信事業者から割り当てを受けることになっている。IPアドレスが物理的なトポロジを反映できるようにすることで、通信事業者における経路集約を円滑化するための配慮である。この点は、IPv4のCIDRの考え方に似ている。TLA資格を得ている大規模通信事業者は、地域インターネットレジストリ(アジア太平洋地域の場合APNIC)からTLA IDを割り振ってもらい、自社の下位に位置する通信事業者にNLA IDを割り振る。NLA IDを割り振られた通信事業者が、ユーザー組織に対して先頭から48ビットまでを割り当てることになる。ちなみに、「割り振り(allocation)」とは他者に提供する目的でアドレスを 得る場合をいい、割り当て(assignment)とは自組織での利用のためにアドレスを得る場合をいう。

 TLA、NLA、SLAそれぞれに対する割り当てビット数として、当初は図3のような配分が意図されていた。しかし、IETFのIPNGワーキンググループがTLA取得資格のガイドラインを策定する際に、地域インターネットレジストリから16ビットという膨大なアドレス空間を各TLAに与えてしまうことに対する強い不安が表明され、1998年にRFC2450で暫定的な割り振りガイドラインとして、sub-TLAが規定された。これは、図4のように1個のTLA IDの下に暫定的に13ビットのsub-TLA IDを設け、これを各地域の最上位通信事業者に割り振るというやり方だ。この暫定ガイドラインの邦訳は、「IPv6割り当て/割り振りポリシー・ドキュメント(暫定)」として、JPNICのWebサイトに掲載されている。

図3 IPv6におけるTLA/NLA/SLAの各IDの割り当て範囲 図3 IPv6におけるTLA/NLA/SLAの各IDの割り当て範囲
図4 1998年に決められた、IPv6アドレスの暫定割り当てポリシー。TLA IDとNLA IDの間にsTLA IDが設けられた 図4 1998年に決められた、IPv6アドレスの暫定割り当てポリシー。TLA IDとNLA IDの間にsTLA IDが設けられた

 ここで“暫定”とは、全世界でsub-TLA申請組織が100に達するか、同一の地域インターネットレジストリにおける申請数が60を超えるまでとされている。sub-TLAを取得する条件としては、「ほかの3つのパブリックAS*3との間にピアリング関係を持っている」「アドレスを取得してから12カ月以内にサービスを開始する」ことに加え、以下の2つの条件のうちどちらかを満たしていなければならないとされている。

  • IPv4のトランジットプロバイダであり、SLA割り当て基準を満たす40以上の顧客サイトを持っていること
  • 6カ月以上6boneプロジェクト*4に参加し、3カ月間はpTLA*5を運用した経験があること

 これは通信事業者を念頭に置いて定められた条件で、データセンター業者やインターネットエクスチェンジ(IX)運営者からは不満の声が出ている。いずれにせよ、sub-TLA申請の増加により、暫定期間も終わりに近づいてきており、新たなアドレス割り振りポリシーについての議論が活発に行われている。

*3AS=Autonomous System(自律システム)。ルータによって接続された複数のネットワークの集合体であり、インターネットはこのAS同士が接続されることで成り立っている。AS≒ISPと考えると分かりやすい


*4世界規模のIPv6の実験ネットワークのこと。日本の6boneは「6bone JP」と呼ばれる。6boneの詳細は「6bone Home Page」を参照


*5pseudo-TLAの略で「疑似TLA」を意味する。sub-TLA(sTLA)が商用として割り当て可能なアドレス空間なのに対し、pTLAは実験ネットワークである「6bone」に参加するためのアドレス空間である


 ユニキャストアドレスとは、単一のインターフェイスのみを表現するアドレスだ。前述のように、IPv6ではグローバルユニキャストアドレス以外のユニキャストアドレスとして、「リンクローカルアドレス」「サイトローカルアドレス」を定義している。リンクローカルアドレスは、同一リンク(リピータで接続されたネットワーク)上のみ有効なアドレスで、ルータはリンクローカルアドレスが発信元となっているパケットをほかのリンクに転送しない。近隣ノードのサービスの存在を確認する「Keep Alive」のようなやりとりのために利用される。またサイトローカルアドレスは、同一サイト内でのみ有効なアドレスとして使われる。IPv4におけるプライベートアドレスに近い使い方ができる。

 次に、エニイキャストアドレスはIPv4ではまったく存在していない概念だが、これは複数のインターフェイスに割り当てられ、そのうちのどれか1つに対して配送されることを目的としている。送信先としてエニイキャストアドレスが指定され送られたパケットは、同じアドレスを持っているインターフェイスのうち、発信元に最も近いものに対して通信を行う。後述の端末の自動構成機能などのために利用される。

 そしてマルチキャストアドレスは、IPv4の場合と同様、複数のインターフェイスに対して割り当てられ、同一アドレスを持つすべてのインターフェイスに対して通信を行うためのものである。

 1台の端末であっても、ネットワーク・インターフェイスごとのリンクローカルアドレスやループバックアドレス、グローバルアドレス、複数のマルチキャストアドレスと、多数のアドレスを持つことが可能になっている。

端末の自動構成機能

 上述のように、1台のIPv6端末にはさまざまな目的で多数のIPアドレスが割り当てられる。IPv4の場合と同様に、固定でIPアドレスを設定したり、DHCPのIPv6版を利用したりすることも考えられてはいるが、中心となるのは自動構成機能である。DHCPのようなサービスを提供することなしに、端末自身が自分のアドレスを構成することができるのは、特に非コンピュータを対象とした大規模なネットワークサービスを実現するには欠かせない。以下では、グローバルユニキャストアドレスの自動構成について説明する。

 IPv6のグローバルユニキャストアドレスにおける64ビットのインターフェイスIDは、IEEE 802.xxのネットワークの場合、MACアドレスの情報を基にして自動的に生成される。MACアドレスは、NIC(ネットワーク・インターフェイス・カード)などでおなじみで、Windows 98などではwinipcfgで「アダプタアドレス」として示されるものだ。16進法で表される48ビットの情報で、前半24ビットが製造者を示す番号となっており、IEEEによって管理されている。後半24ビットは各製造者によって割り振られた各部品に固有の番号だ。従って、MACアドレスが重複することはあり得ないということになっている。

 しかし、ネットワーク・プレフィックスはどうやって取得するのか。ここでリンクローカルアドレスが活躍する。リンクローカルアドレスでは、上位64ビットが「FE::/64」に定められている。従って端末がネットワークに新たに接続されると、その端末が持つ各ネットワーク・インターフェイスは、これと自身が生成したインタフェースIDを組み合わせることで、リンクローカルアドレスを生成する。次に、同一リンク上に同一のアドレスを持ったほかのインターフェイスがないかを確認して、IP通信ができる状態になる。

 一方、ルータは「Router Advertisement(RA)」と呼ばれるメッセージを一定間隔で流す。これにはネットワーク・プレフィックス情報が含まれており、端末側ではこれを受け取ってグローバルユニキャストアドレスを生成する。端末のインターフェイスは、RAを待たずに「Router Solicitation(RS)」というメッセージを出し、プレフィックス情報を自ら要求することも可能だ。この際、端末側ではルータのアドレスが分かっていないが、ルータであれば必ず受け付けなくてはならないことになっている「FF02::2」というマルチキャストアドレスを使う。このリンクローカルマルチキャストアドレスを送信先アドレスとしてRSを発行すると、一番近いルータが応答し、RAを送信することになっている。


 今回は、32ビットから128ビットに拡張されたIPv6のアドレス空間に着目してみました。次回は、IPv6ヘッダに含まれるほかの要素にも目を向けていきます。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。