IPv6

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
ネットワーク・プロトコル
アプリケーション層
DHCP · DNS · FTP · Gopher · HTTP · IMAP4 · IRC · NNTP · XMPP · POP3 · SIP · SMTP · SNMP · SSH · TELNET · RPC · RTCP · RTSP · SSL/TLS · SDP · SOAP · CMIP · STUN · GTP · NTP · EHRP
トランスポート層
TCP · UDP · DCCP · SCTP · RTP · RSVP · IGMP · PPTP · RUDP · UDP-Lite
ネットワーク層
IP (IPv4 · IPv6) · OSPF · IS-IS · BGP · IPsec · ARP · RARP · RIP · ICMP · ICMPv6 · IGP
データリンク層
802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · トークンリング · イーサネット · FDDI · フレームリレー · GPRS · EVDO · HSPA · HDLC · PPP · SLIP · L2TP · ISDN · SMDS · アークネット
物理層
イーサネット物理層 · モデム · PLC · SONET/SDH · G.709 · OFDM · 光ファイバー · 同軸ケーブル · ツイストペアケーブル

IPv6アイピーブイ6アイピーバージョン6Internet Protocol Version 6)とはインターネットプロトコルの次世代版 (Version 6) となる通信プロトコルである。

現在、主流のIPv4にかわるものとして、それまで最大 232(= 4 294 967 296 )個であったIPアドレスを 2128(= 340 282 366 920 938 463 463 374 607 431 768 211 456)個まで使えるようにしたのが大きな特徴である。つまり約340(340兆の1兆倍の1兆倍)個のアドレスが使えるようになる。

目次

現在の状況

日本国内では、一部のISPによって商用・実験サービスが開始されているほか、NTT東日本及びNTT西日本によって、一部のフレッツ網で利用されている[1]。現在IPアドレスが足りているアメリカではIPv6について消極的と言われていたが、アメリカ国防総省によるIPv6化宣言により、アメリカにおいてもIPv6化が進むことが期待されている。

また今後、IP放送、IPテレビ電話及びIP電話等のエンドユーザサービスにIPv6を採用することが進むとも考えられ、そのようなIP上の専用サービスがIPv6の普及の牽引役となることも期待される。

背景

IPv6が誕生した背景には、急速にインターネット利用機器の増加した中国及びインド等、アジア諸国における深刻なIPv4アドレスの不足(IPアドレス枯渇問題)が一番の原因と指摘されていた。

また、IPv4では十分な固定アドレスの割り当てを受けるのが難しいことから、末端サイトにおいてはNAPTの利用が常態化し、P2Pアプリケーションの利用に制約が出たり、VPNでサイト間を接続する際にプライベートアドレスが衝突したりするといった弊害が起きていた。

さらに、IPv4アドレスは需要の増大とアドレス空間の逼迫により細切れに割り当てられているため、バックボーンにおけるルーティング情報が激増し(経路表爆発問題)、性能の限界が懸念されていた。

このような問題を解決するため、IPv4の基本的な概念を踏襲しつつ、広いアドレス空間に基づいた新しいネットワークプロトコルの開発の必要性が認識され、IPv6が生まれることとなった。

IPv6導入のメリット

一般に言われているIPv6導入のメリットとしては以下のようなものがあげられている。

  • 事実上無限の数のIPアドレス
    • アドレス枯渇を心配しなくてよくなる。実際には有限であるが「その辺の石ころにも個別に割り当てることができる」ぐらい有り余っている。同時に、IPマスカレード(NAT/NAPT等)を使わずに済むので、全ノードがグローバルな接続性を持ち、直接接続が可能になる。これによって、P2Pアプリケーション(IP電話、インスタントメッセンジャー及びネットワークゲーム等)の利用が容易になり、またNATの設定等に気を遣わなくて済むようになる。
  • IPsecによるIPレイヤでのend to endセキュリティの確保にあっては、ユーザ認証、パケットの暗号化及びなりすまし防止等がサポートされた。これらはIPv4を使う環境では上位レイヤ (SSL) 等で補完しなければならなかった機能である。
  • 管理者に負担をかけないIPアドレスの自動設定
    • DHCPサーバがなくても、ホストには自動的にIPアドレスとデフォルト経路が設定される。
  • アドレスの集約による基幹ルータでの経路表サイズの抑制
    • 新たにIPv6の接続を持つとき、ISPの持っているIPv6アドレス(プリフィックス)を切り出してユーザーに渡す。これによって、新しいIPv6サイトが増えたとしてもバックボーンに対して公告する経路情報は増えず、基幹ルータで保持する経路表の大きさが抑えられる。その一方で、アドレスブロックの可搬性がなくなる、複数のISPと契約した時にどのアドレスをどのように使うかを考慮しなければならない「マルチホーム」問題も発生する。
  • 固定長ヘッダ
    • IPv6の基本的なヘッダは固定されているため、ルータの負荷を低減できるなどATM等の固定長パケットネットワークに共通な利点を享受しつつ、また拡張性も保つ。
  • エラー検出
    • IPv4ではレイヤ3 (IP) で各ルータのホップ毎に行われていたエラー検出をIPv6では廃止し、レイヤ4(TCPv6/UDPv6等)以上の上位層で、エンドツーエンド (end-to-end) でエラー検出を行うこととされた。これにより前項と同じくルータの負荷低減等が期待される。

IPv6導入のデメリット

  • IPv4では、NATやIPマスカレードの必要性から中継機を介して間接的にインターネットと接続した結果、「インターネット側から具体的なホストが見えない」という点(= 匿名性)がセキュリティ上都合が良い場合も多く、これらが取り払われるIPv6では、代替策をユーザや企業が考えなければならない[2]
  • ユーザのIPプロトコルに対する認識度が低く、IPv6に移行するメリットが見出だしにくい(もっとも、エンドユーザが選択するのはプロトコルではなくてエンドサービスである)。
  • IPv4と似たプロトコルではあるものの、互換性がないため、ルータの取替えや新しいソフトウェアの開発・導入などで追加投資を免れない(しかし、機材の更改で徐々に展開するとも言える)。また、移行期間では両方のプロトコルをサポートしなければならない(これが最大の問題とも言える)。
  • IPv6のバックボーンはまだIPv4ほど充実していない。また、末端ユーザー/サイトのIPv6接続はほとんどの場合IPv4によるトンネリングである。そのため、IPv6で接続するとかえって通信性能が低下する場合が多い。また、IPv6での接続に失敗することもままあり、その場合IPv4にフォールバックすることになるが、最初からIPv4で接続していれば不要であったはずのタイムラグが生じてしまう。
  • 前項とも関連するが、現状のIPv6ネットワークはトンネリングやDNSなどをIPv4に依存しているため、IPv6を導入しても管理の手間が増えこそすれ、耐障害性が増すわけではない(IPv4がダウンすればIPv6もダウンしてしまう)。
  • アドレス空間が広いことと、MACアドレスによる自動設定のため、逆引きの管理が困難であり、逆引きを要求されるケースで困ることがある(逆引きできないホストからの接続を拒否するサーバなど)。
  • 技術面や運用面でまだ不確定な要素が多い(サイトローカルアドレスの廃止、エニーキャストアドレスの見直しとDHCPv6の再検討、逆引きの問題など)。

IPv6 のアドレス

IPv6 のアドレス構造

IPv4とIPv6の最も大きな違いは、そのネットワークアドレスの長さにある。従来までのIPv4が32ビットであったのに対し、IPv6は128ビットである。

IPv6のアドレスは、前半部と後半部に分けられて管理される。前半の64bitはネットワーク・プレフィックスと呼ばれ、後半の64bitはインタフェースIDと呼ばれる。インタフェースIDは一意性を得るためにMACアドレスから生成されるEUI64フォーマットが使用されることが多いが、必ずこの形式を使わなければならないということではない(特に、サーバでは手動で静的に設定されることが多い)。

アドレスの一意性は最終的にはDuplicate Address Detection (DAD)という仕組みで保証される。

IPv6 のアドレス表記

従来のIPv4では、2進数で表記された数値を8ビット単位でドット(.)で区切り、10進数表記する。

[例] 172.255.31.1

IPv6では、128ビットを表記する際、IPv4と同様の表記では冗長になりすぎるため、16進数で表記された数値を16ビット単位で、コロン (:)で区切って表記する。

[例] 3ae3:90a0:bd05:01d2:288a:1fc0:0001:10ee

この方法でも、まだ冗長であるため、以下のルールが適用される場合がある。

  • あるセクションが 0 で始まる場合、当該先行する 0 を省略することができる。
[例] f0f0:0100:0020:0003:1000:0100:0020:0003 = f0f0:100:20:3:1000:100:20:3
  • 0 が連続するところは :: で省略することができる。ただし、:: は可変長なので、使えるのは1箇所だけ。
[例] 1234:5678:0000:0000:1234:0000:0000:9abc = 1234:5678::1234:0:0:9abc

その他、アドレスの種類によっては、以下のような特殊な表記が用いられることがある。

  • IPv4互換アドレスやIPv4射影アドレスでは、下位32ビットにIPv4アドレスが埋め込まれる。そのため、その部分だけIPv4の表記にすることが多い。
    • [例] ::ffff:10.1.2.3
  • リンクローカルアドレスは一つのリンク(サブネット)内でしか一意でない。そのため、ホストから見た場合、何らかの方法でネットワークインターフェースを指定してリンクを特定しなければならない。アドレス末尾に % 記号を介してインターフェースの番号や名称を付加するのが一般的である。
    • [例] fe80::0123:4567:89ab:cdef%4, fe80::0123:4567:89ab:cdef%fxp0

また、サブネットマスクは3ffe:1234:5678::/48のように表記される。この場合、先頭から48ビット (3ffe:1234:5678) がネットワークアドレス部である。ただし、IPv4と異なり、グローバルアドレスのエンドユーザーへの割り当て単位が原則/48(場合によっては/64)と決まっていることから、通常目にするサブネットマスクは /48 か /64 であり、あまり意識することはない。これより大きい単位(/32 や /16 など)のサブネットマスクは、IPv6のアドレス体系、ルーティング及びISPに対する割り振り等の議論の際に登場する。

IPv6アドレスの種類

IPv6には、以下のような3種類のアドレスがある。

ユニキャストアドレス
一つのインタフェースに付与されているIPアドレス。一つのインタフェースを認識する。一つのコンピュータに多くのインタフェース(LANボード等)が実装されている場合は、インタフェースの数だけユニキャストアドレスを持つことになる。
マルチキャストアドレス
複数のノードに割り当てられるアドレス。このアドレスあてに送信されたパケットは、複製されてこのアドレスに参加しているノードに配送される。ffxx:: で始まるアドレス。返信にはユニキャストアドレスが指定される。送信元がマルチキャストアドレスのパケットをルータは中継してはならない。
エニキャストアドレス
一つのアドレスが複数のノードに割り当てられているという点ではマルチキャストと似ているが、エニキャストの場合は「そこに属しているノードの中で、ネットワーク上で一番近いノードのどれか一つのみに配送される」という点が異なる。
なお、IPv6にはブロードキャストアドレスというものは存在しないが、必要な場合は、オールノードマルチキャストアドレス (ff02::1)を使う。返信にはユニキャストで指定して送信し、ルータはエニキャスト(エニーキャスト)アドレスが送信元のパケットを捨てる。

さらに、パケットの到達範囲(スコープ)によって、上記のアドレスそれぞれに対しリンクローカルスコープとグローバルスコープのアドレスが存在する。

リンクローカルスコープ
あるリンクでのみ一意なアドレス。このスコープあてのパケットはルータを越えて配送されることはない。
グローバルスコープ
全IPv6で一意なアドレス。

以前はサイトローカルスコープというものもあったが、ほとんど使われないまま廃止された。

特殊なアドレス

  • 0:0:0:0:0:0:0:0
    0:0:0:0:0:0:0:0 はIPv6アドレスの一つで、IPv6において未指定アドレス(Unspecified Address)として定義されている。0 を省略して 0::0:: とも表記される。このアドレスはノードにまだアドレスが割り当てられていないことを意味し、ノードに割り当てられることはない。ノードの初期化段階において、アドレスの重複をチェックする場合などに送信元アドレスとして使用される。
  • 0:0:0:0:0:0:0:1
    0:0:0:0:0:0:0:1 は IPv6 アドレスの一つで、IPv6においてループバックアドレスとして定義されている。0 を省略して 0::1::1 とも表記される。IPv4では 127.0.0.0/8 の範囲の任意のアドレスをループバックアドレスとして使用できるが、IPv6 ではこのアドレスに限られる。ループバックアドレスであるため、このアドレスをインターフェイスに割り当てることはできない。

使用されているアドレス

IPv6を利用していて通常目にするアドレスは、グローバルユニキャストアドレスかリンクローカルユニキャストアドレスであろう。 このうち、前者には以下のようなものがある。

2001:で始まるもの(sTLAアドレス)
商用サービスで割り当てが行われているアドレス。TLA(Top Level Aggregation)IDを細分化したsTLA(sub-TLA)単位でISPに割り振られているため、sTLAアドレスと呼ばれる。今後中心的に使われていくものとみられる。
2002:で始まるもの(6to4アドレス)
IPv6 over IPv4トンネリングの6to4で使用するアドレス。2002: に続く32ビットの部分にIPv4グローバルアドレスを埋め込む。IPv4グローバルアドレスを使用しているユーザーは、とくに手続きなどをしなくても技術的な設定のみで利用可能。IPv6を提供していないISPのユーザーなどに使われている。
3ffe:で始まるもの(pTLAアドレス)
6boneやFreenet6など非商用実験プロジェクトで配布されていたアドレス。TLAの実験として導入されたpTLA(pseudo TLA)を用いるため、pTLAアドレスと呼ばれる。このアドレスは、実験終了時期を定めたRFC 3701 "6bone (IPv6 Testing Address Allocation) Phaseout" に基づき2006年6月6日で無効となった。

また、リンクローカルユニキャストアドレスは、fe80: で始まる。IPv6が有効になっているシステムでは、各ネットワークインターフェースごとにこのアドレスが自動的に付与される。また、デフォルト経路もそのサブネット内のルーターのリンクローカルユニキャストアドレスで与えられる。

プロトコル

ヘッダ

IPv6のヘッダ構造
IPv6のヘッダ構造

IPv6のヘッダはIPv4ではあまり使われなかったものが廃止されるなど簡略化されているが、アドレス長が長くなっているので、ヘッダ長はIPv4の20バイトから40バイトに増加している。

また、様々なオプションがエクステンションヘッダとして定義され、これは前のヘッダが次のヘッダのタイプを示すことで数珠つなぎにすることが可能となっている。 また使用する順番がほぼ固定されている。主に送信元や中継のルータが使用するオプションは前の方に、到着したルータやノードに対してのオプションは最後の方に定義される。

IPv6で定義されているエクステンションヘッダは次の通り。

ホップバイホップオプション
途中通過するルータで処理されるオプションが格納されているヘッダ。
宛先オプション
最終あて先ノードで処理されるオプションが格納されているヘッダ。
経路ヘッダ
途中通過する経路のIPアドレスを格納したヘッダ。ソースルーティングに使用される。IPv4のルーティングヘッダとほぼ同じ。
フラグメントヘッダ
フラグメント情報を格納するヘッダ。IPv6では途中のルータがフラグメントを分割・再構成することはなく、送信元でのみ行われる。送信・受信の各ホストで経路MTU探索 (Path MTU Discovery) を行い、MTUを制御する。
認証ヘッダ
IPsec AHの認証データを格納するヘッダ
ペイロード暗号化ヘッダ
IPsec ESPの情報を格納するヘッダ。暗号化されたパケットは、IPヘッダとこのESPヘッダ以外は暗号化される。

近隣探索 (Neighbor Discovery)

IPv4 では通信相手の IP アドレスからその MAC アドレスを取得するために ARP を用いていたが、IPv6 では近隣探索(Neighbor Discovery)という方法が用いられる。 これは、ICMP の IPv6 版である ICMPv6 を用いてアドレス解決するもので、アドレス解決をしたいノードはペイロードに解決したいアドレスを格納して、全ノード宛マルチキャストアドレスに IPv4 の ARP request に相当する Neighbor Solicitation (NS) パケットを送信し、それに答えるべきノードは、Target linklayer address option に自ノードの MAC アドレスを格納した Neighbor Advertisement (NA) を送信してアドレス解決を行う。 RFC 4861 で規定されている。

アドレス自動設定

IPv6ではDHCPを用いなくてもルータさえあればアドレスの自動設定が可能となっている (RFC 4862)。

IPv6ノードのネットワークインタフェースには、必ず linklocal address というそのリンクだけに到達性のあるアドレスがつく。これは fe80:: というプリフィックスと、MACアドレスから生成されたインタフェースIDとから生成されるのが通常であるが、そのリンク内で一意であれば手動で設定してもかまわない。最終的にはアドレスの一意性はDADに基づいて解決される。

また、ルータは自分の接続しているネットワークに対し、定期的にあるいは要請に基づいて、そのネットワークに関する情報(Router advertisement; RA)を送信している。この情報に含まれるプリフィックス情報と一意のインタフェースIDを用いて、IPv6ホストはグローバルアドレスを生成する。同時に、そのIPv6ホストは受信したRAを送信したルータをデフォルト経路に設定することで、グローバルIPv6ネットワークへの接続性も確保できる。

しかし、この仕組みでは名前解決のためのDNSサーバのアドレスを取得することはできないため、それにはDHCPv6など別の仕組みが必要になる。

IPv6をサポートするプログラムの書き方

IPv6を使うためには、OSの他、アプリケーションでもサポートしなければならないが、それはIPv4上でのプログラムと比べても大きな違いがあるものではない。

ネットワークを利用するプログラムではソケットを利用することが多く、通常のIPv4プログラミングではsocketを作成するときには

s = socket(AF_INET, SOCK_STREAM, 0);

などのように、アドレスファミリ部はIPv4固定で指定することが多いが、一つのサイトでIPv4, IPv6の複数のプロトコルでサポートされていたり、どちらをサポートしているかは事前にはわからないことを考慮すると、DNSで一つの名前を検索した後、列挙されている複数のプロトコルのアドレスに対して順番にconnectを試みる必要がある。

アドレスを検索する際は、IPv4のみを前提としているgethostbyname() や、socket同様にアドレスファミリ固定なgethostbyname2() などではなく、getaddrinfo() を利用する。

以上をまとめると、典型的なソケットを作成するCのコードは以下のようになる。

int error, s;
struct addrinfo hints, *res, *res0;

hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;        /* TCPの場合 */
if ((error = getaddrinfo("ホスト名", "サービス名", &hints, &res0)))
        return (-1);

for (res = res0; res; res = res->ai_next) {
        if ((s = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) < 0)
                continue;
        if (connect(s, res->ai_addr, res->ai_addrlen) == 0)
                break;
        close(s);
        s = -1;
}

freeaddrinfo(res0);

if (s < 0) {
        /* Could not connect */
} else {
        /* Success */
}

この手法はIPv6のみならず、別のIP protocolができた場合でも有効な手法で、プロトコル独立プログラミングなどと呼ばれる。

なお、ここで示した方法は、getaddrinfo() によって返されるアドレスファミリの順に接続を試みるので、AAAAレコードよりAレコードを先に返すようなgetaddrinfo() では、IPv6による通信が行われない可能性もある。

IPv4との相互運用

IPv4との互換性

概念的にはIPv4とIPv6はほぼ同等と言えるが、実際のパケットフォーマットは完全に異なる上、IPアドレス空間の大きさも違うため、一対一対応はできない。そのため、IPv6ノードとIPv4ノードが互いに直接通信することはできない。 IPv6とIPv4との通信用にいくつかの仕組み、プロトコルが提案されている。

トンネリング

IPv6のネイティブな接続を提供しているISPはまだ極めて少ない。 そのため、ほとんどのIPv6ユーザーはIPv4上にIPv6をトンネリングして利用している(商用のIPv6サービスもその多くはトンネリングである)。

トンネリングに用いられる技術には以下のようなものがある。

利用できるシステム

Windows 2000にも実験的なIPv6の実装が提供されたことがあるが、その後のサービスパックとの整合性が考慮されていないため、現在では使用すべきではない。

利用できるアプリケーション

FreeBSD, NetBSD, OpenBSD, Linuxなど
ほぼ全てのアプリケーションがIPv6対応を終えている。
Windows XP
OS付属のアプリケーションではInternet Explorer, Windows Media Playerの他は、telnet, ftpなどのコマンドラインアプリケーションのみ。サードパーティ製品では、Mozilla FirefoxOperaのほか、Apache HTTP ServerMeadowTera TermFFFTPなど。詳しくはIPv6 related worksを参照。
Mac OS X
Mac OS X標準のネットワークライブラリを使用していれば、多くのアプリケーションでIPv6が利用可能。10.3まではSafariは独自のネットワークライブラリを利用しているため、IPv6の対応は不完全であったが、10.4以降は完全に動作している。

関連項目

外部リンク

IPv6接続を確認できるサイト

他、上記のIPv6普及・高度化推進協議会およびIPv6 StyleのトップページではIPv6で接続するとその旨が表示される。


脚注

  1. ^ NTT西日本のフレッツ光プレミアム及びv6アプリの個別契約、NTT東日本のフレッツ・ドットネットの個別契約、並びに平成19年2月24日以降、新規開通したBフレッツに割り当てられる。また、準備が整いしだいNTT東日本の既存BフレッツユーザにもIPv6が割り当てられるようになる。
  2. ^ もっとも、単にsyn等の接続パケットをドロップするだけならパケットフィルタを設定すれば済むし、半固定IPアドレスになるというのはISPの問題である。

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net