|
Article on other languages:
|
IPv6(アイピーブイ6、アイピーバージョン6、Internet 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導入のメリットとしては以下のようなものがあげられている。
IPv6導入のデメリット
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 この方法でも、まだ冗長であるため、以下のルールが適用される場合がある。
[例] f0f0:0100:0020:0003:1000:0100:0020:0003 = f0f0:100:20:3:1000:100:20:3
[例] 1234:5678:0000:0000:1234:0000:0000:9abc = 1234:5678::1234:0:0:9abc その他、アドレスの種類によっては、以下のような特殊な表記が用いられることがある。
また、サブネットマスクは3ffe:1234:5678::/48のように表記される。この場合、先頭から48ビット (3ffe:1234:5678) がネットワークアドレス部である。ただし、IPv4と異なり、グローバルアドレスのエンドユーザーへの割り当て単位が原則/48(場合によっては/64)と決まっていることから、通常目にするサブネットマスクは /48 か /64 であり、あまり意識することはない。これより大きい単位(/32 や /16 など)のサブネットマスクは、IPv6のアドレス体系、ルーティング及びISPに対する割り振り等の議論の際に登場する。 IPv6アドレスの種類IPv6には、以下のような3種類のアドレスがある。
さらに、パケットの到達範囲(スコープ)によって、上記のアドレスそれぞれに対しリンクローカルスコープとグローバルスコープのアドレスが存在する。
以前はサイトローカルスコープというものもあったが、ほとんど使われないまま廃止された。 特殊なアドレス
使用されているアドレスIPv6を利用していて通常目にするアドレスは、グローバルユニキャストアドレスかリンクローカルユニキャストアドレスであろう。 このうち、前者には以下のようなものがある。
また、リンクローカルユニキャストアドレスは、fe80: で始まる。IPv6が有効になっているシステムでは、各ネットワークインターフェースごとにこのアドレスが自動的に付与される。また、デフォルト経路もそのサブネット内のルーターのリンクローカルユニキャストアドレスで与えられる。 プロトコルヘッダIPv6のヘッダはIPv4ではあまり使われなかったものが廃止されるなど簡略化されているが、アドレス長が長くなっているので、ヘッダ長はIPv4の20バイトから40バイトに増加している。 また、様々なオプションがエクステンションヘッダとして定義され、これは前のヘッダが次のヘッダのタイプを示すことで数珠つなぎにすることが可能となっている。 また使用する順番がほぼ固定されている。主に送信元や中継のルータが使用するオプションは前の方に、到着したルータやノードに対してのオプションは最後の方に定義される。 IPv6で定義されているエクステンションヘッダは次の通り。
近隣探索 (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の実装が提供されたことがあるが、その後のサービスパックとの整合性が考慮されていないため、現在では使用すべきではない。 利用できるアプリケーション
関連項目
外部リンク
IPv6接続を確認できるサイト
他、上記のIPv6普及・高度化推進協議会およびIPv6 StyleのトップページではIPv6で接続するとその旨が表示される。 脚注
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net