IPv6
Internet Protocol Version 6(インターネット プロトコル バージョン6)、IPv6(アイピーブイ6、アイピーバージョン6)は、Internet Protocolの一種で、OSI参照モデルにおいてネットワーク層に位置付けられる通信プロトコルである。
現在主流のIPv4では使用可能なIPアドレスが約 232(約43億 = 4.3×109)個であったが、IPv6では約 2128(約340澗 = 3.4×1038)個使用可能となっており、大きな特徴の一つである。実際、ISPの一般向けIPv4接続サービスはアドレスをひとつだけ割り当てるものが主流だが、IPv6接続サービスでは/48〜/64の大きさのアドレスブロックが割り当てられることが多い。
IPv6が誕生した背景には、IPv4のIPアドレス枯渇問題がある。
1980年代までは、米国内を中心に、Class A (/8)、Class B (/16)、Class C (/24) などの単位で各組織にIPアドレスを割り振っていた。1990年代に入り、インターネットの国際化と、参加組織の増大によって、Class BのIPv4アドレスが不足する恐れが出てきた。IPアドレスの数が有限である以上、根本的な解決策が必要となることは自明であり、その解決策として検討された最終成果がIPv6である。
しかし、新しいプロトコルであるIPv6を開発し普及させるには時間がかかるため、短期的な対策であるIPv4の延命として、1994年のプライベートアドレス (RFC 1918) の導入と前後して、CIDR (RFC 4632)・NAT (RFC 2663) ・Proxy(プロキシ)など、プライベートアドレスを使用するLANとグローバルアドレスを使用するWANとを使い分けることでIPv4アドレスを節約し有効活用する取り組みが行われた。
一部には、IPv4アドレス枯渇には、既存の回避策で対応可能であるとIPv6の必要性を疑問視する声もあった。しかし、国際的なインターネットの爆発的な普及と、携帯電話やスマートフォンなどのインターネット利用機器が急速に増加したことにより、新たなIPアドレスの需要が、運用の改善や新たな回避策によるIPアドレスの供給を上回っており、限界に達しようとしている。また、回避策による弊害も顕著になってきており、インターネットの新たな利用形態の普及を阻害している。
現在は、IPv6は運用に目途が立って徐々に普及しつつあり、IPv4とIPv6を併用しつつIPv6へ移行することが課題になっている。
1981年9月 RFC 791 としてIPv4の基本仕様が公開される。
1991年7月 「IPv4アドレスが不足する」という研究を受けてIETFが調査を開始した。
1992年11月 RFC 1380 という形で調査結果をまとめ、次世代ネットワークの議論が始まる。
1993年12月 RFC 1550 としてIPngの名称で機能要求をまとめる。
1995年1月 RFC 1752 としてSIPPをベースにアドレスを128bit化、同時に名称をIPngからIPv6に正式に改名。
1995年12月 RFC 1883 Internet Protocol, Version 6 (IPv6) Specificationや RFC 1884 IPv6 Addressing ArchitectureとしてIPv6の最初の仕様を決定。
1998年7月 RFC 2373 にてIPv6のアドレスに関する仕様を大幅に改訂した。
1998年12月 RFC 2460 Internet Protocol, Version 6 (IPv6) Specificationとして主な仕様が確定する。
1999年07月 IANAによるIPv6アドレスの割り振りが開始される。
1998年以降、、WIDE Project、KAME project、などにより、UNIX系OSへの実装とテスト運用が行われ、2006年頃までに主要部分の実装が完了した。Windowsに関しては、1998年3月Windows NT 4.0用にMSRIPv6を、2000年3月Windows 2000用に技術プレビューを、2001年10月にWindows XP用に評価版を提供したのち、Windows XP SP1およびWindows Server 2003からサポートが行われるようになった。
2011年2月3日にIANAにプールされていたIPv4アドレスは枯渇した。
2011年4月15日にAPNICのIPv4アドレスの在庫は、/8ブロック換算で1ブロック未満になり、アジア太平洋地域では、事実上IPv4アドレスは枯渇した。各RIRの最後の1ブロックについては、自由に取得することはできず、IPv4の安定運用とIPv6への移行のために限定的な割り振りが行われる。
2011年6月8日にWorld IPv6 Dayとして、主要なインターネットサービスのDNSのAAAAレコードを1日だけ有効にすることで、インターネット環境でIPv6を並行運用した場合の問題点を見つけ出すテストを行うイベントが実施された。
日本国内については、NTTのフレッツ 光ネクストにおいて、IPv6 PPPoE接続が2011年6月1日に、IPv6 IPoE 接続が2011年7月21日に提供され、他社のサービスを含めると、IPv6が一般に普及するための基盤が整った状態になった。
2012年6月6日にWorld IPv6 Launchとして、主要なインターネットサービスをIPv6に対応させるイベントが実施された。1日限りのトライアルであった2011年のWorld IPv6 Dayとは異なり、この日以降も継続的にIPv6でサービスできる状態にすることを目的として開催された。
2017年7月 RFC 2460 を廃止して、RFC 8200 Internet Protocol, Version 6 (IPv6) Specificationに更新。 RFC 2460 に対する追加/修正として存在していた多くのRFCをまとめて再編成した。
IPv6は、ゆっくりながらも普及が進んでいる。Googleの統計によると、IPv6によるアクセス数は増加傾向にある。全体のアクセス数に対する割合として、2014年10月で5%程度、2016年10月で14%程度、2020年9月で30%程度(日本では35%程度、最も普及しているベルギーで52%程度)になっている。
一般家庭でIPv6を利用するには、複数のレベルでIPv6対応がなされている必要があり、大きく分けると、ISPによりIPv6接続が提供されていること、利用するインターネット上のサービスがIPv6接続に対応していること、ルーターなどのインターネット接続に利用する機器がIPv6に対応していること、そして通信するホストがIPv6接続に対応していること、などとなる。
このうちオペレーティングシステム (OS) やアプリケーションなどのソフトウェアは、細かい差異こそあれ、既にIPv6への対応を終えているものが多い。
また、通信経路となるISPによるIPv6の対応は、NTTのフレッツ 光ネクストIPv6 IPoE接続サービスの登場や、移動体通信事業者によるモバイルインターネットサービスのIPv6化がなされたことにより、普及が進んでいる。
インターネット上の各々のサービスサイト(ウェブサイトなど)はGoogleなど海外サービスを中心にIPv6対応が進みつつあるが、日本のサービスの多くは未だIPv6での接続に対応しておらず、提供が最も遅れている分野である。
ソフトウェアやインターネット上のサービスのIPv6対応は、IPv6と従来のIPv4の両方が利用可能という形で行われ、接続相手の利用可能なIPのバージョンにより、どちらを利用するか(自動的に)選択するようにするのが一般的である(IPv4との相互運用を参照)。
今後は、IP放送・IPテレビ電話・IP電話・IoTなどのエンドユーザサービスへのIPv6の採用が進むことが想定され(一部は展開されている)、そのようなIP上の専用サービスがIPv6の普及の牽引役となることも期待されている。一方で強力なキラーアプリケーションの不在も指摘されている。
日本国内では、一部のISP(接続業者、ホスティングサーバ業者)によって商用・実験サービスが開始されているほか、NTT東日本及びNTT西日本によって、一部のフレッツ網で利用されている。また、日本国内におけるISP各社の対応については、インターネットプロバイダー協会 (JAIPA)「」でまとめられている。
オペレーティングシステム (OS) は、多くがIPv6に対応している。具体的には、Microsoft WindowsではWindows XPおよびWindows Server 2003以上で利用可能であるほか、FreeBSD, NetBSD, OpenBSD, Linux, Solaris, AndroidなどのUnix系のOSやmacOS, iOSはIPv6に対応している。
一部には仕様に厳密には従っていない実装も見られる。例えば、Windows 8は30日毎にIPv6/IPv4の到達性を確認し、IPアドレスの優先度を変更するが、この動作は RFC 3484 非準拠である。
なお、IPv6のプロトコルを有効にしているWindowsを使用しているユーザーは、ISPがIPv4のみを提供している場合でも、Microsoftが無償提供するTeredoサービスを利用する形で、通信速度に問題があるものの、既に基本設定でIPv6で通信可能な状態になっている場合がある(ただし、Teredoサービスを利用している場合には、DNSクライアントの仕様のため、事実上IPv6が使用できない)。
一般のユーザーが利用するアプリケーションは、IPv6への対応を完了しているものが多い。
Windowsでの例を挙げると、OS付属のアプリケーションではMicrosoft Edge, Internet Explorer, Microsoft 管理コンソール, Windows Media Player, Windows PowerShell, リモートデスクトップ接続など、また、telnet, などのコマンドラインアプリケーションで、サードパーティ製品では、Mozilla FirefoxやOperaのほか、Apache HTTP Server、Meadow、Tera Term、PuTTY、FFFTP、NextFTPなどでIPv6が利用可能である。
macOSでは、標準のネットワークライブラリがIPv6に対応しており、これを使用している多くのアプリケーションでIPv6が利用可能である。10.3まではSafariは独自のネットワークライブラリを利用しているため、IPv6の対応は不完全であったが、10.4以降は完全に動作している。
IPv6をアプリケーションで利用するためのプログラムは、IPv4でのプログラムと比べて大きな違いがあるものではない。
ネットワークを利用するプログラムではソケットを利用することが多く、通常のIPv4プログラミングでsocketを作成するときには
のように、アドレスファミリ部をIPv4固定で指定することが多いが、一つのサイトがIPv4とIPv6の両プロトコルに対応している場合や、どちらに対応しているのか事前にはわからないことを考慮すると、DNSで一つの名前を検索した後、列挙された複数のプロトコルのアドレスに対して順番にconnectを試みる必要がある。
アドレスを検索する際は、IPv4のみを前提としているgethostbyname() や、socket同様にアドレスファミリ固定であるgethostbyname2() などではなく、getaddrinfo() を利用する。
以上をまとめると、典型的なソケットを作成するCのコードは以下のようになる。
この手法はIPv6のみならず、別のIPプロトコルが登場した場合にも有効な手法で、プロトコル独立プログラミングなどと呼ばれる。
なお、ここで示した方法は、getaddrinfo() によって返されるアドレスファミリの順に接続を試みるので、AAAAレコードより先にAレコードを返すようなgetaddrinfo() では、IPv6による通信が行われない可能性もある。
一般に言われているIPv6導入によるメリットとしては以下のようなものが挙げられている。
アドレス枯渇の心配がほぼ解消される。実際には非常に大きな有限の数(2128個 = 340,282,366,920,938,463,463,374,607,431,768,211,456個 = 約340澗個 = 約340兆×1兆×1兆個)であるが、「その辺の石ころにも個別に割り当てることができる」ぐらいあり余っている。
仮に、地球の全人類(約7,000,000,000 = 70億人)へ均等に割り当てられるとしても、1人あたり約4穣8,600𥝱個 = 4京8,600兆×1兆個 = 4.86×1028個という天文学的な数になり、全員が毎秒1兆個使い捨て続けたとしても、枯渇するまで約15億4000万年かかるほど巨大な数になる。
同時に、IPマスカレード(NAT/NAPTなど)を使わずに済むので、全ノードがグローバルな接続性を持ち、直接接続が可能になる。これによって、P2Pアプリケーション(IP電話、インスタントメッセンジャーおよびネットワークゲームなど)の利用やIoTの普及が容易になり、またNATの設定などに気を遣わなくて済むようになる。
実際にフレッツによるIPv6サービス (IPoE)では、/64のネットワークブロックが1ブロック提供される(契約形態によっては異なる)。このサービスを受けることで、1人あたり約43億の2乗(2の64乗、IPv4におけるIPアドレスの総数の2乗)ものアドレス空間をもつネットワークブロックを取得できる。
DHCPサーバがなくても、ホストには自動的にIPアドレスとデフォルト経路が設定される。
新たにIPv6の接続を持つとき、ISPの持っているIPv6アドレス(プレフィックス)を切り出してユーザーに渡す。これによって、新しいIPv6サイトが増えたとしてもバックボーンに対して公告する経路情報は増えず、基幹ルータで保持する経路表の大きさが抑えられる。その一方で、アドレスブロックの可搬性がなくなる、複数のISPと契約した時にどのアドレスをどのように使うかを考慮しなければならない「マルチホーム」問題も発生する。
IPv4のヘッダは多くの場合は20バイトだが、IPオプションの付加によってそれよりも長くなる可能性がある。一方、IPv6の基本的なヘッダは40バイトに固定されている。このため、ルータの負荷を低減できるなどATMなどの固定長パケットネットワークに共通な利点を享受できる。なお、拡張ヘッダの利用により拡張性も保持している。
またIPv4では通過するルータ毎に行われていたIPヘッダのエラー検出は、IPv6では廃止された。これにより前項と同じくルータの負荷低減が期待される。
IPsec によってIPレイヤでのend to endセキュリティが確保できる。
RFC 4301 ではIPv6実装はIPsecを実装しなければならない (MUST) とされていたが、RFC 6434 において実装すべきである (SHOULD) と緩められた。実際、IPsecをサポートしないIPv6の実装は多数存在している。
既存のIPv4と共存させる必要があることから、次のようなデメリットや課題が発生する。
IPv4と似たプロトコルではあるものの、互換性がないため、ルータの取替えや新しいソフトウェアの開発・導入などで追加投資を免れない。また、並行運用期間(IPv4が淘汰され消滅するまで)は両方のプロトコルをサポートしなければならない。
普及の目安としてBGPのルーティングテーブルのサイズを比較すると、2016年10月現在でプレフィックスがIPv4で632,483、IPv6で33,323と、IPv4の19.0%程度の規模でしかない。IPv4での教訓とIPv6の経路が新規に敷設された関係でIPv6の方が経路が集約されていてBGPで広告されている経路が少ないとしても、普及が進んでいないことがわかる。また、Googleによる統計でも、IPv6によるアクセス数は2016年10月現在で全体の14%程度になっている。
そもそも、汎世界的なネットワークとなったインターネットが、あまねくIPv6に移行するのかどうか、するとしてそれがいつになるのかは、(短期的には)全くの見通しが立っていない。これは、古い機材やOS、ファームの更改により徐々にIPv4/IPv6併存環境が広がっていくことである程度緩和されうる。
IPv6のバックボーンはまだIPv4ほど充実していない。また端末やネットワークの要因のためIPv6での接続に失敗することがあるが、その場合IPv4にフォールバックすることになり、最初からIPv4で接続していれば不要であったはずのタイムラグが生じてしまう。(フレッツ網におけるIPv6#IPv6-IPv4フォールバック問題)
アドレス空間が広いことと、MACアドレスによる自動設定のため、逆引きの管理が困難であり、逆引きを要求されるケースで問題が起きる(逆引きできないホストからの接続を拒否するサーバなど)。
技術面や運用面でまだ不確定な要素が多い(サイトローカルアドレスの廃止、エニーキャストアドレスの見直しとDHCPv6の再検討、逆引きの問題など)。
IPv4では、NAT/NAPTやIPマスカレードの必要性からルーターなどを介して間接的にインターネットと接続するのが一般的であるため、「インターネット側からは直接ローカルホストに接続できない」という点が結果的にセキュリティおよびプライバシーの向上に貢献している。IPv6においてはNAT/NAPTなどは一般的に行われず、さらに後述のModified EUI-64(注意)で生成したIPv6アドレスをそのままグローバルユニキャストアドレスとして使用すると、ユーザーが使用した端末を半永続的に追跡可能になるなど、プライバシーの面で問題が発生する。これに対処するため RFC 4941(旧RFC 3041)により、ランダム化されたインターフェイスIDを使い「一時アドレス」を生成、使用する。Windows XPなど以降でサポートされている。ただし、スマートフォンでの運用は2016年時点で未だ不透明である
ただし、IPv6の接続サービスの形態では、接続網の形態やISPによるプレフィックス割当運用にも依存するが、プレフィックスが契約毎(おおむね、ユーザーCPEごと)に半固定されている場合が多い。そのような場合、一時アドレスを使用しても、プレフィックスに基づくネットワークアドレス単位で識別が可能であり、依然としてユーザーが接続しているネットワークの半永続的な識別、追跡が可能となる。
ユーザーのインターネットプロトコルに対する認識度が低く、IPv6に移行するメリットが見いだしにくい。マーケティング手法の観点からは、エンドユーザーが選択するのは、内部プロトコルではなくエンドサービスであり、内部プロトコルの相違をエンドユーザーに訴求する必要性は低い。
ただ、冒頭に記したように2011年4月に日本でのIPv4アドレスの在庫が払底したこともあり、サーバやVPN開設など何らかの理由で固定IPアドレスを必要とする場合、今後はISPやホスティング業者の保有するアドレス空間の使用状況にもよるが、いずれにせよIPv6でのIPアドレスの取得を検討せざるを得なくなる可能性が大きい。
IPv4とIPv6の最も大きな違いは、そのネットワークアドレスの長さにある。従来までのIPv4が32ビットであったのに対し、IPv6は128ビットである。
IPv6のアドレスは、前半部(プレフィックス,ネットワークID)と後半部(インタフェースID)に分けられて管理される。インタフェースIDは、一意性を得るためにMACアドレスなどから生成されるModified EUI-64フォーマットが使用されることが多いが、プライバシー上の懸念があるため、一意性およびプライバシーの双方を満たす仕様への変更が推奨されている(RFC 7217、RFC 7721、RFC 8064)。サーバでは手動で静的に設定されることも多い。
アドレスの一意性は、最終的にはDuplicate Address Detection (DAD) という仕組みで保証される。
従来のIPv4では、アドレスの値を8ビット単位でドット(.)で区切り、十進法で表記する。
[例] 192.0.2.1
IPv6では、128ビットを表記する際、IPv4と同様の表記では冗長になりすぎるため、アドレスの値を16ビット単位でコロン(:)で区切り、十六進法で表記する。
[例] 2001:0db8:bd05:01d2:288a:1fc0:0001:10ee
この方法でも、まだ冗長であるため、以下のルールが適用される場合がある。
あるセクションが "0" で始まる場合、当該先行する "0" を省略することができる。
[例] 2001:0db8:0020:0003:1000:0100:0020:0003 = 2001:db8:20:3:1000:100:20:3
16ビット単位の記述で "0" が連続するところは "::" で省略することができる。ただし、"::" は可変長なので、1箇所だけ使用できる。
[例1] 2001:0db8:0000:0000:1234:0000:0000:9abc = 2001:db8::1234:0:0:9abc
[例2] 2001:0db8:0000:0000:0000:0000:0000:9abc = 2001:db8::9abc
上記のルール (RFC 4291) では同じIPv6アドレスに複数の表記が許容されることになる。
アドレスの表記を唯一に統一し単純化するためのルール (RFC 5952) も存在し、同RFCのセクション4に従うと、以下のようになる。
あるセクションが "0" で始まる場合、当該先行する "0" は必ず省略する。
16ビット単位の記述で "0" が2回以上連続するところは、連続する "0" がいちばん長いフィールドを必ず "::" で省略する。
連続する "0" の長さが同じ箇所が複数個ある場合は、最初(上位側)を省略する。
連続しない1回だけの "0" は省略してはならない(RFC 3041 では許容されていなかったため)。
英字部分は必ず小文字を使用する。
その他、アドレスの種類によっては、以下のような特殊な表記が用いられることがある。
IPv4互換アドレスやIPv4射影アドレスでは、下位32ビットにIPv4アドレスが埋め込まれる。そのため、その部分だけIPv4の表記にすることが多い。
[例] ::ffff:192.0.2.1
リンクローカルアドレスは一つのリンク(サブネット)内でしか一意でない。そのため、ホストから見た場合、何らかの方法でネットワークインターフェースを指定してリンクを特定しなければならない。アドレス末尾に % 記号を介してインターフェースの番号や名称を付加するのが一般的である。
[例1] fe80::0123:4567:89ab:cdef%4
[例2] fe80::0123:4567:89ab:cdef%fxp0
また、サブネットマスクは2001:0db8:9abc::/48のように表記される。この場合、先頭から48ビット (2001:0db8:9abc) がネットワークアドレス部である。ただし、IPv4と異なり、グローバルアドレスのエンドユーザーへの割り当て単位が通常は /48 か /64 であることから、通常目にするサブネットマスクは /48 か /64 であり、あまり意識することはない。これより大きい単位(/32 や /16 など)のサブネットマスクは、IPv6のアドレス体系、ルーティングおよびISPに対する割り振りなどの議論の際に登場する。
Webブラウザのアドレスバーへの入力など、URLのホストパートをIPv6アドレスで指定するときは、例えば::1ならば[::1]のように半角の角括弧でくくる。 (RFC 3986)
IPv6には、以下の3種類のアドレスがある。
一つのインタフェースに付与されているIPアドレス。一つのインタフェースを識別する。一つのコンピュータに多くのインタフェース(LANボードなど)が実装されている場合は、インタフェースの数だけユニキャストアドレスを持つことになる。
複数のノードに割り当てられるアドレス。このアドレス宛てに送信されたパケットは、複製されてこのアドレスに参加しているノードに配送される。ffxx:: で始まるアドレス。返信にはユニキャストアドレスが指定される。送信元がマルチキャストアドレスのパケットをルータは中継してはならない。
なお、IPv6にはブロードキャストアドレスというものは存在しないが、必要な場合は、オールノードマルチキャストアドレス (ff02::1など) を使う。
一つのアドレスが複数のノードに割り当てられているという点ではマルチキャストと似ているが、エニーキャストの場合は「そこに属しているノードの中で、ネットワーク上で一番近いノードのどれか一つのみに配送される」という点が異なる。
さらに、パケットの到達範囲(スコープ)によって、上記のアドレスそれぞれに対しリンクローカルスコープとグローバルスコープのアドレスが存在する。
あるリンクでのみ一意なアドレス。このスコープ宛てのパケットはルータを越えて配送されることはない。
全IPv6で一意なアドレス。
以前はサイトローカルスコープというものもあったが、ほとんど使われないまま廃止された。
IPv6ノードのネットワークインタフェースには、必ずリンクローカルアドレス(link‐local address)が付与される。これは fe80:: というプレフィックスと、インタフェースIDとから生成されるのが通常であるが、そのリンク内で一意であれば手動で設定してもかまわない。
0:0:0:0:0:0:0:0
未定義アドレス (Unspecified Address) として定義されている。一般的には 0 を省略して :: と表記される。このアドレスはノードにまだアドレスが割り当てられていないことを意味し、ノードに割り当てられることはない。ノードの初期化段階において、アドレスの重複をチェックする場合などに送信元アドレスとして使用される。
0:0:0:0:0:0:0:1
ループバックアドレスとして定義されている。一般的には 0 を省略して ::1 と表記される。IPv4では 127.0.0.0/8 の範囲の任意のアドレスをループバックアドレスとして使用できるが、IPv6 ではこのアドレスに限られる。ループバックアドレスであるため、このアドレスをインターフェイスに割り当てることはできない。
IPv6を利用していて通常目にするアドレスは、グローバルユニキャストアドレスかリンクローカルユニキャストアドレスである。IPv6のアドレス空間については、#IPv6アドレス空間参照。
ルータを超えて、インターネット上で通信可能なアドレスで、グローバルアドレスとも呼ばれる。IPv4におけるグローバルIPアドレスに相当する。IANAが割り振りを管理しており、RIR単位での割り振りは、で公開されている。現在は、 RFC 3587 により、アドレスの先頭3bitが001であるアドレスのみIANAが割り振りを行っている。
(グローバル・ルーティング・プレフィックスは、IANA、RIRおよびNIRからISPなどのLIRに割り振られたものの中から、ISPなどのLIRがエンドユーザに割り当てられたものを使用する。)
このうち、特定の用途に使用されているものとしては、以下のものがある。
リンクローカルユニキャストアドレス (RFC 4291)
各ネットワークインターフェース毎に、初期化時に自動生成し、LANの同一セグメント内でのみ有効なアドレス。IPv6のルータでは中継されないため、インターネット上とのホストとの通信には使用できない。プレフィックスは常に fe80::/64となる。
ユニークローカルユニキャストアドレス (RFC 4193)
IPv4におけるプライベートIPアドレスと同様に、ローカルでの使用向けに使われるアドレス。