IPv6
出典: フリー百科事典『ウィキペディア(Wikipedia)』
アプリケーション層 |
---|
DNS ・ ENRP ・ FTP ・ HTTP IMAP ・ IRC ・ NNTP ・ POP3 SIP ・ rlogin ・ RTP ・ SMTP SNMP ・ SSH ・ SSL ・ TELNET |
トランスポート層 |
DCCP ・ IL ・ RSVP ・ RUDP SCTP ・ TCP ・ UDP |
ネットワーク層 |
ARP ・ BGP ・ IP(IPv4,IPv6) ICMP ・ IGMP ・ IGP ・ RARP |
データリンク層 |
ATM ・ DTM ・ FDDI ・ PPP SLIP ・ SMDS ・ イーサネット 無線LAN (Wi-Fi) ・ トークンリング フレームリレー |
IPv6 (アイピーブイ6、アイピーバージョン6、"Internet Protocol Version 6") とは、インターネットプロトコルの次世代版 (Version 6) となる通信プロトコルである。
現在、一般的に使用されている IPv4 に代わるものとして、それまで約 4.3 × 109 個しかなかったIPアドレスを約 3.4 × 1038 個までサポートしている。
目次 |
[編集] 現在の状況
現在までに、IPv6はあまり利用されているとは言えない。
日本国内では、一部のISPによって、商用・実験サービスが開始されている他、NTT東日本、NTT西日本によってフレッツ網の中で利用されている。 現在IPアドレスが足りているアメリカではIPv6について消極的と言われていたが、アメリカ国防総省によるIPv6化宣言の表明により、アメリカのIPv6化が進むことが期待されている。
また今後、IP放送、IPテレビ電話、IP電話などのエンドユーザサービスにIPv6を採用する事が進むとも考えられ、そのようなIP上の専用サービスが、IPv6の普及の牽引役となる事も期待される。
[編集] 背景
IPv6 が誕生した背景には、急激にインターネットを利用する機器の増加した中国、インドなどアジア諸国における、深刻なIPv4アドレスの不足(IPアドレス枯渇問題)が一番の原因と指摘されていた。
また、IPv4では十分な固定アドレスの割り当てを受けるのが難しいことから、末端サイトにおいてはIPマスカレードの利用が常態化し、P2Pアプリケーションの利用に制約が出たり、VPNでサイト間を接続する際にプライベートアドレスが衝突したりといった弊害が起きていた。
さらに、IPv4アドレスは需要の拡大とアドレス空間の逼迫により細切れに割り当てられており、そのためバックボーンにおけるルーティング情報が増大し(経路表爆発問題)、性能の限界が懸念されていた。
このような問題を解決するため、IPv4の基本的な概念を踏襲しつつも、広いアドレス空間に基づいた新しいネットワークプロトコルの開発の必要性が認識され、IPv6が生まれることとなった。
[編集] IPv6導入のメリット
一般に言われているIPv6導入のメリットとして、以下のようなものがあげられている。
- 事実上無限の数のIPアドレス
- アドレス枯渇を心配しなくてよくなると同時に、IPマスカレード(NAT/NAPT等)を使わずにすむので、全ノードがグローバルな接続性を持ち、直接接続が可能になる。これによって、P2Pアプリケーション(IP電話、インスタントメッセンジャー、ネットワークゲームなど)の利用が容易になり、またNATの設定等に気を使わなくてすむようになる。
- IPsecによるIPレイヤでのend to endセキュリティの確保では、現在上位レイヤ(SSL)等でサポートしていた、ユーザ認証、パケットの暗号化、なりすまし防止等がサポートされた。
- 管理者に負担をかけないIPアドレスの自動設定
- DHCPサーバーがなくても、ホストには自動的にIPアドレスとデフォルト経路が設定される。
- アドレスの集約による、基幹ルータでの経路表爆発の抑止
- 新たにIPv6の接続を持つとき、ISPの持っているIPv6アドレス(プリフィックス)を切り出してユーザーに渡す。これによって、新しいIPv6サイトが増えたとしても、バックボーンに対して広告する経路情報は増えず、基幹ルータで保持する経路表の大きさが抑えられる半面、アドレスブロックの可搬性がなくなる、複数のISPと契約したときにどのアドレスをどのように使うかを考慮しなければならない「マルチホーム」問題も発生する。
- 固定長ヘッダ
- IPv6の基本的なヘッダは固定されているため、ATM等の固定長パケットネットワークの利点である、ルータの負荷低下の効果などの特徴を持ちつつ、拡張性を持つ。
- エラー検出
- IPv4ではレイヤ3(IP)で各ルータのホップ毎に行われていたエラー検出を廃止し、レイヤ4(TCPv6/UDPv6等)以上の上位層で、エンドツーエンド(end-to-end)でエラー検出を行うこととされた。これにより前項と同じくルータの負荷低下などが期待される。
[編集] IPv6導入のデメリット
- IPv4ではNATやIPマスカレードによって「インターネットと直接接続せず、結果、インターネットから見てホストが見えない」という点がセキュリティー上都合が良い場合が多く、それらの解決や対策をユーザや企業が考えなければならない。(もっとも、単に接続パケット<syn等>をドロップするだけなら、パケットフィルタを設定すれば済むし、半固定IPアドレスになると言うのは、ISPの問題である。)
- ユーザのIPプロトコルに対する認識度が低く、IPv6に移行するメリットが見出しにくい。(もっとも、エンドユーザが選択するのはプロトコルではなくてエンドサービスである。)
- IPv4と似たプロトコルではあるものの、互換性はないため、ルータの取替えや新しいソフトウェアの開発・導入などで、追加投資を免れない。(しかし、機材の更改で徐々に展開するとも言える。)また移行期間では両方のプロトコルをサポートしなければならない。(これが最大の問題とも言える。)
- IPv6のバックボーンはまだIPv4ほど充実していない。また、末端ユーザー/サイトのIPv6接続はほとんどの場合IPv4によるトンネリングである。そのため、IPv6で接続するとかえって通信性能が低下する場合が多い。また、IPv6での接続に失敗することもままあり、その場合IPv4にフォールバックすることになるが、最初からIPv4で接続していれば不要であったはずのタイムラグが生じてしまう。
- 前項とも関連するが、現状のIPv6ネットワークはトンネリングやDNSなどをIPv4に依存しているため、IPv6を導入しても管理の手間は増しても耐障害性が増すわけではない(IPv4がダウンすればIPv6もダウンしてしまう)。
- アドレス空間が広いことと、MACアドレスによる自動設定のため、逆引きの管理が困難であり、逆引きを要求されるケースで困ることがある(逆引きできないホストからの接続を拒否するサーバーなど)。
- 技術面や運用面でまだ不確定な要素が多い(サイトローカルアドレスの廃止、エニーキャストアドレスの見直しとDHCPv6の再検討、逆引きの問題など)。
[編集] IPv6 のアドレス
[編集] IPv6 のアドレス構造
IPv4 と IPv6 の最も大きな違いは、そのネットワークアドレスの長さにある。従来までの IPv4 が 32bit で表記されていたのに対し、IPv6 は 128bit で表記する。
IPv6 のアドレスは、前半部と後半部に分けられて管理される。 前半の 64bit は、ネットワーク・プレフィックスと呼ばれ、後半の 64bit は、インタフェースIDと呼ばれる。インタフェースIDは、一意性を得るためにMACアドレスから生成されるEUI64フォーマットが使用されることが多いが、必ずこの形式を使わなければならないということではない(特に、サーバーでは手動で静的に設定されることが多い)。 アドレスの一意性は最終的にはDuplicate Address Detection(DAD)という仕組みで保証される。
[編集] IPv6 のアドレス表記
従来の IPv4 では、10進数で表記された数値を 8bit 単位で、ドット (.) で分割して表記する。
- [例] 172.255.31.1
IPv6 では、128bit を表記する際に、IPv4 と同様の表記では、冗長になる。そのため、16進数で表記された数値を16bit 単位で、コロン (:) で分割して表記する。
- [例] 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が連続するところは、::で省略することができる。ただし、::は可変長なので使えるのは一カ所だけ。
- [例] 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アドレス。1つのインタフェースを認識する。1つのコンピュータに、沢山のインタフェース(LANボード等)が実装されている場合は、インタフェースの数だけユニキャストアドレスを持つことになる。
- マルチキャストアドレス
- 複数のノードに割り当てられるアドレス。このアドレス宛に送信されたパケットは複製されてこのアドレスに参加しているノードに配送される。ffxx::で始まるアドレス。返信にはユニキャストアドレスが指定される。送信元がマルチキャストアドレスのパケットをルータは中継してはならない。
- エニキャストアドレス
- 一つのアドレスが複数のノードに割り当てられているという点ではマルチキャストと似ているが、エニキャストの場合は「そこに属しているノードの中で、ネットワーク上で一番近いノードのどれか一つのみに配送される」という点が異なる。
なお、IPv6にはブロードキャストアドレスというものは存在しないが、必要な場合は、オールノードマルチキャストアドレス(ff02::1)を使う。返信にはユニキャストで指定して送信し、ルータはエニキャスト(エニーキャスト)アドレスが送信元のパケットを捨てる。
更にパケットの到達範囲(スコープ)によって、上記のアドレスそれぞれに対しリンクローカルスコープとグローバルスコープのアドレスが存在する。
- リンクローカルスコープ
- あるリンクでのみ一意なアドレス。このスコープ宛のパケットはルータを越えて配送されることはない。
- グローバルスコープ
- 全IPv6で一意なアドレス。
以前はサイトローカルスコープというものもあったが、ほとんど使われないまま廃止された。
[編集] 現在使用されているアドレス
IPv6を利用していて通常目にするアドレスは、グローバルユニキャストアドレスかリンクローカルユニキャストアドレスであろう。 このうち、前者は2006年現在以下のようなものが使用されている。
- 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など非商用実験プロジェクトで配布されていたアドレス。初期からのIPv6サイトに多い。TLAの実験として導入されたpTLA(pseudo TLA)を用いるため、pTLAアドレスと呼ばれる。このアドレスは、RFC 3701 "6bone (IPv6 Testing Address Allocation) Phaseout" に基づき2006年6月6日で使用終了となる。
また、リンクローカルユニキャストアドレスはfe80:に始まる。 IPv6が有効になっているシステムでは、各ネットワークインターフェースごとにこのアドレスが自動的に付与される。 また、デフォルト経路も、そのサブネット内のルーターのリンクローカルユニキャストアドレスで与えられる。
[編集] プロトコル
[編集] ヘッダ
IPv6のヘッダはIPv4ではあまり使われなかったものが廃止されるなど簡略化されているが、アドレス長が長くなっているので、ヘッダ長はIPv4の20バイトから40バイトに増加している。
また、さまざまなオプションがエクステンションヘッダとして定義され、これは前のヘッダが次のヘッダのタイプを示すことで数珠つなぎにすることが可能となっている。 また使用する順番がほぼ固定されている。主に送信元や中継のルータが使用するオプションは前の方に、到着したルータやノードに対してのオプションは最後の方に定義される。
IPv6で定義されているエクステンションヘッダは次の通り。
- ホップバイホップオプション
- 途中通過するルータで処理されるオプションが格納されているヘッダ。
- 宛先オプション
- 最終宛先ノードで処理されるオプションが格納されているヘッダ。
- 経路ヘッダ
- 途中通過する経路のIPアドレスを格納したヘッダ。ソースルーティングに使用される。IPv4のルーティングヘッダとほぼ同じ。
- フラグメントヘッダ
- フラグメント情報を格納するヘッダ。IPv6では途中のルータがフラグメントを分割・再構成することはなく、送信元でのみ行われる。送信・受信の各ホストで経路MTU探索(Path MTU Discovery)を行い、MTUを制御する。
- 認証ヘッダ
- ペイロード暗号化ヘッダ
[編集] 近隣探索 (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)を送信してアドレス解決を行う。
[編集] アドレス自動設定
IPv6ではDHCPを用いなくてもルータさえあればアドレスの自動設定が可能となっている。 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, ai_protocol)) < 0) continue; if (connect(s, res->ai_addr, res->ai_addrlen) == 0) break; } 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との通信用にいくつかの仕組み、プロトコルが提案されている。
- TCP Relay (faith)
[編集] トンネリング
IPv6のネイティブな接続を提供しているISPはまだ極めて少ない。 そのため、ほとんどのIPv6ユーザーは、IPv4上にIPv6をトンネリングして利用している(商用のIPv6サービスもその多くはトンネリングである)。 トンネリングに用いられる技術には以下のようなものがある。
- ISATAP
- Teredo
- 6to4
[編集] 利用できるシステム
- UNIX系のオペレーティングシステム(BSD、Linux、Solarisなど)
- Windows XP
- Windows Server 2003
- Windows Vista
- Mac OS X
- 一部のルーター
- 一部のインターネットサービスプロバイダ
Windows 2000にも実験的なIPv6の実装が提供されたことがあるが、その後のサービスパックとの整合性が考慮されていないため、現在では使用すべきではない。
[編集] 利用できるアプリケーション
- ほぼ全てのアプリケーションがIPv6対応を終えている。
- Windows XP
- OS付属のアプリケーションではInternet Explorer, Windows Media Playerの他は、telnet, ftpなどのコマンドラインアプリケーションのみ。サードパーティ製品では、Mozilla FirefoxやOperaのほか、Apache HTTP Server、Meadow、Tera Term、FFFTPなど。詳しくはIPv6 related worksを参照。
- MacOS X
- MacOS X標準のネットワークライブラリを使用していれば、多くのアプリケーションでIPv6が利用可能。10.3まではSafariは独自のネットワークライブラリを利用しているため、IPv6の対応は不完全であったが、10.4以降は完全に動作している。
[編集] 関連項目
[編集] 外部リンク
- The IPv6 Portal... All the IPv6 News
- IPv6普及・高度化推進協議会
- IPv6 Style
- NTT東日本 フレッツ・ドットネット
- NTT西日本 フレッツ・v6アプリ
- NTTコミュニケーションズのIPv6サービス
- IPv6 related works
- WindowsでIPv6を使う
- IPv6 Fix
- IETFのIPv6 working group - Additional Page
- RFC 2460 - Internet Protocol, Version 6 (IPv6) Specification - IPv6の基本スペック
- RFC 3587 - IPv6 Global Unicast Address Format
[編集] IPv6接続を確認できるサイト
- KAME Project - IPv6で接続すると亀の画像がアニメーションする。
- NTTコミュニケーションズ - IPv6とIPv4で異なる画像が表示される。
- OCN - IPv6とIPv4で異なる動画が表示される。
- IMASY IPv6 Project. - 自分のIPv6アドレスが表示される。
- KDDI IPv6公開接続実験 - 自分のIPv6アドレスが表示される。
- Hexago (Freenet6) - 自分のIPv6アドレスが表示される。
他、上記のIPv6普及・高度化推進協議会およびIPv6 Styleのトップページでは、IPv6で接続するとその旨が表示される。