[ Top page ]

« IPv4 | メイン | IP アドレスとセキュリティおよびプライバシー »

インターネットのプロトコル

IPv6

概要

IPv6 (アイピーブイ 6,アイピーバージョン 6,Internet Protocol Version 6) とは,RFC 2460 によってさだめられたインターネット・プロトコル (IP) の次世代版 (Version 6) となる通信プロトコルである. 現在,一般的に使用されている IPv4 にかわるものとして,それまで約 4.3 × 109 個しか無かった IP アドレスを約 3.4 × 1038 個までサポートしている.

現在の状況

現在までに,IPv6 はあまり利用されているとはいえない. 日本においては WIDE プロジェクトを中心として,積極的に IPv6 の仕様検討や実装がおこなわれてきた. 日本国内では,一部の ISP によって商用・実験サービスが開始されているほか,NTT 東日本,NTT 西日本によって一部のフレッツ網の中で利用されている. 現在 IP アドレスが足りているアメリカでは IPv6 について消極的と言われていたが,アメリカ国防総省による IPv6 化宣言の表明により,アメリカの IPv6 化が進むことが期待されている. また今後,IP 放送,IP テレビ電話,IP 電話などのえエンドユーザ・サービスに IPv6 を採用することが進むとも考えられ,そのような IP 上の専用サービスが,IPv6 の普及の牽引役となることも期待される.

背景

IPv6 が誕生した背景には,急激にインターネットを利用する機器の増加した中国,インドなどアジア諸国における,深刻な IPv4 アドレスの不足 (IP アドレス枯渇問題) が一番の原因と指摘されていた. また,IPv4 では十分な固定アドレスのわりあてを受けるのが難しいことから,末端サイトにおいては NAPT (Network Address Port Translation) の利用が常態化し,P2P アプリケーションの利用に制約が出たり,VPN でサイト間を接続する際にプライベート・アドレスが衝突したりといった弊害が起きていた. さらに,需要の拡大とアドレス空間の逼迫のために,IPv4 アドレスはこまぎれにわりあてられている. そのためバックボーンにおけるルーティング情報が増大し (経路表爆発問題),性能の限界が懸念されていた. このような問題を解決するため,IPv4 の基本的な概念を踏襲しつつも,広いアドレス空間に基づいた新しいネットワーク・プロトコルの開発の必要性が認識され,IPv6 が生まれることとなった.

IPv4AddressExhaustion.gif
図 Tony Hain 氏による枯渇時期予測 (IPv4 アドレスの枯渇時期予想について (IPv6style) から引用)

IPv6 のアドレス

IPv6 のアドレスの構造,表記,種類などについてのべる.

IPv6 のアドレス構造

IPv4 と IPv6 の最も大きな違いはそのネットワーク・アドレスの長さにある. 従来までの IPv4 が 32 bit で表記されていたのに対し,IPv6 は 128 bit で表記する.

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

                  128 - N bit                                N bit
+----------------------------------------+----------------------------------------+
|       ネットワーク・プレフィクス       |           インタフェース ID            |
+----------------------------------------+----------------------------------------+

アドレスの一意性は最終的には重複アドレス検出 (Duplicate Address Detection, DAD) というしくみで保証される.

IPv6 のアドレス表記

IPv6 においては 128 bit を表記する際に,IPv4 と同様の表記では冗長になる. そのため,16 進数で表記された数値を 16 bit 単位で,コロン (:) で分割して表記する.

[例] 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 bit に IPv4 アドレスが埋め込まれる. そのため,その部分だけ IPv4 の表記にすることが多い.
    [例] ffff::10.1.2.3
  • リンクローカル・アドレスは一つのリンク (サブネット) 内でしか一意でない. そのため,ホストから見た場合,何らかの方法でネットワーク・インターフェースを指定してリンクを特定しなければならない. アドレス末尾に % 記号を介してインターフェースの番号や名称を付加するのが一般的である.
    [例] fe80::0123:4567:89ab:cdef%4, fe80::0123:4567:89ab:cdef%fxp0
    また,サブネット・マスクは 3ffe:1234:5678::/48 のように表記される. この場合,先頭から 48 bit (3ffe:1234:5678) がネットワーク・アドレス部である. ただし,IPv4 と異なり,グローバル・アドレスのエンドユーザへのわりあて単位が原則 /48 (場合によっては /64) と決まっていることから,通常目にするサブネット・マスクは /48 か /64 であり,あまり意識することはない. これより大きい単位 (/32 や /16 など) のサブネット・マスクは,IPv6 のアドレス体系やルーティング,ISP に対する割り振りなどの議論の際に登場する.

IPv6 アドレスの種類

IPv6 には以下のような 3 種類のアドレスがある. このうちユニキャスト・アドレスとマルチキャスト・アドレスとは IPv4 と共通だが,エニーキャスト・アドレスは IPv6 固有の種類であり,RFC 1546 によって規定されている.

ユニキャスト・アドレス
ただ 1 つのノード (インタフェース) につけられている IP アドレスである. (1 つのコンピュータに多くのインタフェース (LAN ボード等) が実装されている場合は,インタフェースの数だけユニキャスト・アドレスを持つことになる.)
マルチキャスト・アドレス
複数のノードにわりあてられるアドレスであり,このアドレス宛に送信されたパケットは複製されてこのアドレスに参加している全ノードに配送されるアドレスである. ffxx:: で始まるアドレスである. 返信にはユニキャスト・アドレスが指定される. 送信元がマルチキャスト・アドレスのパケットをルータは中継してはならない.
エニーキャスト・アドレス
複数のノードにわりあてられるアドレスであり,そのアドレスをもつノードの中でネットワーク上で一番近いノードのどれか 1 つだけにパケットが配送されるアドレスである.

なお,IPv6 には IPv4 にあるブロードキャスト・アドレスという種類は存在しないが,必要な場合は,全ノード・マルチキャスト・アドレス (ff02::1) を使う. この場合,返信にはユニキャスト・アドレスを指定して送信する. エニーキャスト・アドレスが送信元であるようなパケットをみつけると,ルータはそれを廃棄する.

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

リンクローカル・スコープのアドレス
あるリンクでのみ一意なアドレスである. このスコープ宛のパケットはルータを越えて配送されることはない. 先頭 16 bit は fe80 ~ feff である.
グローバル・スコープのアドレス
全 IPv6 ネットワーク内で一意なアドレスである. 先頭 16 bit は 2000 ~ 3fff である.

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

特殊なアドレス

IPv6 においては,つぎのような特殊なアドレスが定義されている.

未指定アドレス (Unspecified Address)
0:0:0:0:0:0:0:0 は未指定アドレスとして定義されている. 0 を省略して 0::0 や :: とも表記される. このアドレスはノードにまだアドレスがわりあてられていないことを意味し,ノードにわりあてられることはない. ノードの初期化段階において,アドレスの重複をチェックする場合などに送信元アドレスとして使用される.
ループバック・アドレス
0:0:0:0:0:0:0:1 はループバック・アドレスとして定義されている. 0 を省略して 0::1 や ::1 とも表記される. IPv4 においては 127.0.0.0/8 の範囲の任意のアドレスをループバック・アドレスとして使用できるが,IPv6 においてはこのアドレスに限られる. ループバック・アドレスであるため,このアドレスをインターフェイスにわりあてることはできない.
IPv4 アドレスうめこみ IPv6 アドレス
IPv4 との互換性を確保するため,つぎの 2 種類のアドレスが RFC 4291 において規定された.
IPv4 互換 IPv6 アドレス (IPv4-compatible IPv6 address)
IPv4 互換 IPv6 アドレスは IPv4 経路制御を行うネットワークに IPv6 パケットを動的にトンネルさせるときに使用するものであり,IPv4 アドレスを下位 32 bit にもつ IPv6 ユニキャスト・アドレスが使用される.
IPv4 射影 IPv6 アドレス (IPv4-mapped IPv6 address)
IPv4 射影 IPv6 アドレスは IPv6 ノードが IPv4 アドレスだけをもつノードにパケットを送信するさきに使用されるものであり,やはり IPv6 アドレスの下位 32 bit に IPv4 アドレスがうめこまれている.
両者は IPv6 アドレスの上位 12 バイトが ::0000/96 であるか (IPv4 互換 IPv6 アドレス),::FFFF/96 であるか (IPv4 射影 IPv6 アドレス) だけがちがっている.

これらのほかにトンネリングのために使用される 6to4 アドレス,ISATAP アドレス,Teredo アドレスがある.

現在使用されているアドレス

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

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

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

プロトコル

ヘッダ

IPv6 のヘッダ構造は下図のとおりである.

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        |  Next Header  |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         Source Address                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Destination Address                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

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

IPv6 において定義されている拡張ヘッダは次のとおりである.

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

RFC 2460 にあげられている拡張ヘッダの例を引用する.

   +---------------+------------------------
   |  IPv6 header  | TCP header + data
   |               |
   | Next Header = |
   |      TCP      |
   +---------------+------------------------

   +---------------+----------------+------------------------
   |  IPv6 header  | Routing header | TCP header + data
   |               |                |
   | Next Header = |  Next Header = |
   |    Routing    |      TCP       |
   +---------------+----------------+------------------------

   +---------------+----------------+-----------------+-----------------
   |  IPv6 header  | Routing header | Fragment header | fragment of TCP
   |               |                |                 |  header + data
   | Next Header = |  Next Header = |  Next Header =  |
   |    Routing    |    Fragment    |       TCP       |
   +---------------+----------------+-----------------+-----------------

近隣者発見

IPv4 においては通信相手の IP アドレスからその MAC アドレスを取得するために ARP (Address Resolution Protocol) というプロトコルを使用していたが,IPv6 においては近隣者発見 (Neighbor Discovery) という方法が使用される. 近隣者発見においては,ICMP (Internet Control Message Protocol) の IPv6 版である ICMPv6 (Internet Control Message Protocol for IPv6) を用いて,以下のようにアドレス解決する. アドレス解決をしたいノードはペイロードに解決したいアドレスを格納して,全ノード宛マルチキャスト・アドレスに IPv4 の ARP 要求に相当する 近隣者要請 (Neighbor Solicitation, NS) パケットを送信する. そして,それに答えるべきノードは target link-layer address option に自ノードの MAC アドレスを格納した近隣者広告 (Neighbor Advertisement, NA) を送信する.

アドレス自動設定

IPv6 においては DHCP を用いなくてもルータさえあればアドレスの自動設定が可能となっている.

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

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

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

IPv6 導入の長所

一般に言われている IPv6 導入の長所として,以下のようなものがあげられる.

事実上無限の数の IP アドレス
アドレス枯渇の恐れが事実上なくなる. 同時に NAT / NAPT 等を使わずにすむようになるので,全ノードに大域的な接続性を持たせることができ,直接接続できるようになる. これによって,P2P アプリケーション (IP 電話,インスタント・メッセンジャー,ネットワーク・ゲームなど) の利用が容易になり,また煩雑な NAT の設定が不要になる.
IPsec の強化
IPsec による IP 層での end to end セキュリティの確保では,現在上位層 (SSL/TLS) 等でサポートしていた,ユーザ認証,パケットの暗号化,なりすまし防止等がサポートされた.
管理者に負担をかけない IP アドレスの自動設定
DHCP サーバが無くてもホストには自動的に IP アドレスとデフォルト経路が設定される.
アドレスの集約による,基幹ルータでの経路表爆発の抑止
新たに IPv6 の接続を持つ時,ISP が持っている IPv6 アドレス (プレフィクス) を切り出してユーザに渡す. これによって,新しい IPv6 サイトが増えたとしても,バックボーンに対して公告する経路情報は増えず,基幹ルータで保持する経路表の大きさが抑えられる反面,アドレスブロックの可搬性が無くなる,複数の ISP と契約した時にどのアドレスをどのように使うかを考慮しなければならない 「マルチホーム」 問題も発生する.
固定長ヘッダ
IPv6 の基本的なヘッダは固定されているため,ATM (Asynchronous Transfer Mode) 等の固定長パケット・ネットワークの長所である,ルータの負荷低下の効果などの特徴を持ちつつ,拡張性を持つ.
エラー検出
IPv4 では 3 層 (IP 層.ネットワーク層) で各ルータのホップ毎に行われていたエラー検出を廃止し,4 層 (TCPv6 / UDPv6 等.トランスポート層)以上の上位層で,エンド・ツー・エンド (end-to-end) でエラー検出を行うこととされた. これにより前項と同じくルータの負荷低下などが期待される.

IPv6 導入の短所

IPv6 の本質的な短所としてつぎのような点があげられる.

必要以上の透明性
IPv4 では NAT や NAPT によって 「インターネットと直接接続せず,結果,インターネットから見てホストが見えない」 という点がセキュリティ上都合が良い場合が多く,それらの解決や対策をユーザや企業が考えなければならない.
逆引きの管理が困難
アドレス空間が広いことと,MAC アドレスによる自動設定のため,逆引きの管理が困難であり,逆引きを要求されるケースで困ることがある (逆引きできないホストからの接続を拒否するサーバなど).

また,本質的な短所ではないが IPv6 が普及していない現状における短所として,つぎのような点があげられる.

低いユーザの理解度
ユーザの IP プロトコルに対する認識度が低く,IPv6 に移行することの長所が見出しにくい (もっとも,エンドユーザが選択するのはプロトコルではなくてエンドユーザ・サービスである).
追加投資の必要性
IPv4 と似たプロトコルではあるものの,互換性は無いため,ルータの取替えや新しいソフトウェアの開発・導入などで,追加投資を免れない (しかし,機材の更改で徐々に展開するとも言える). また移行期間では両方のプロトコルをサポートしなければならない (これが最大の問題とも言える).
バックボーンが弱い現状
IPv6 のバックボーンはまだ IPv4 ほど充実していない. また,末端ユーザ / サイトの IPv6 接続はほとんどの場合 IPv4 によるトンネリングである. そのため,IPv6 で接続するとかえって通信性能が低下する場合が多い. また,IPv6 での接続に失敗することもしばしばあり,その場合 IPv4 にフォールバックすることになるが,最初から IPv4 で接続していれば不要であったはずのタイムラグが生じてしまう.
IPv4 に依存する現状
前項とも関連するが,現状の IPv6 ネットワークはトンネリングや DNS などを IPv4 に依存しているため,IPv6 を導入しても管理の手間は増しても耐障害性が増すわけではない (IPv4 がダウンすれば IPv6 もダウンしてしまう).
技術面や運用面の不確定な要素
サイトローカル・アドレスの廃止,エニーキャスト・アドレスの見直しと DHCPv6 の再検討,逆引きの問題など,技術面や運用面でまだ不確定な要素が多い.

IPv4 との相互運用

IPv4 との互換性

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

TCP Relay (faith)

トンネリング

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

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

  • ISATAP
  • Teredo
  • 6to4

参考文献

この項目の記述にあたっては WikipediaIPv6 の項目を参照した.

Keywords:

コメントを投稿

bulb403_7501-1.jpg

螺旋 3D 印刷技術を使用してつくったこのような「3D デザインランプ」を 3d-dl.com で売っています.

Powered by Movable Type