IPv6がなぜいまだに普及していないのか
現在のインターネットの基本をなしているIPv4というプロトコルには、広く知られた大きな欠点がある。パケットのアドレスフィールドの幅が32ビットなので、ネットワークに接続可能なホスト数の上限が2³²(約43億)になってしまっているのだ。その欠点を修正するために、1990年代後半にIPv6という新たなプロトコルが設計されたのだけど、いまだにインターネットではIPv6は少数派で、主流ではいまだにIPv4が使われている。
1990年代当時は、IPv6は規格を策定すれば比較的すぐに普及するはずで、それによってインターネットが抱えているアドレス枯渇の問題が解決されるという雰囲気だったように思う。1998年にタイムトラベルして、20年たってもまだIPv4を置き換えることに成功していないと当時の人のIPv6推進者たちに教えたら、多分すごくびっくりされるだろう。一体どうしてこんなに普及が遅れてしまったのだろうか? そして一体どうすればよかったのだろうか? このエッセイではそれについてちょっと考えてみようと思う。
IPv6への移行プラン
IPv4からIPv6への移行プランは大雑把に言うとこうなる。「IPv4しか使えないホストやルータをIPv4/IPv6の両対応のものに置き換えていって、全体的にIPv6に対応すれば、IPv4を次第に廃止していくことができて、そのうちIPv6インターネットへの移行が完了する。」
上記のプランは、iPhoneをiOS 12からiOS 13にアップグレードするみたいな単純な話に見えるけど、実際にはそう簡単な話ではない。OSのアップグレードと違って、IPv4とIPv6には互換性がないからだ。IPv6への移行は、例えばみんながLINEを使っている状態から、みんながカカオトークを使う状態に移行させるみたいな話に近い(なんだか大変そうだ)。IPv4インターネットとIPv6インターネットは別々のネットワークで、並行して存在していて、IPv6に移行するためにはみんながIPv6インターネットにスイッチする必要がある。
ユニバーサルネット
「IPv6」という上位互換のような名称が与える印象を排除して状況を理解してみるために、試しにここでIPv6を別の名前で呼んでみることにしよう。どんな名前でもいいのだけど、ここではIPv6を「UniversalTalk」という名前で呼ぶことにする(USBと、かつて存在したAppleTalkというプロトコルから適当に名前を拝借してみた)。つまりUniversalTalkはIPv6とまったく同じ仕様で、名前だけが異なる。
また、IPv6インターネットのことは、現行のIPv4インターネットと明確に区別するために、ここでは「ユニバーサルネット」と呼ぶことにしよう。ユーザからみるとユニバーサルネットはインターネットと同じように使うことができるのだが、基本的なプロトコルとしてIPではなくUniversalTalkを使っているという点が異なる。つまりユニバーサルネットというのはIPv6移行後のインターネットと同じだ。
IPv4インターネットからユニバーサルネットへの移行プランはこうだ。「IPしか使えないサービスやホスト、ルータに手を加えて、IPとUniversalTalkプロトコルの両対応にする。どのデバイスやサービスも、インターネットでもユニバーサルネットでもアクセス可能になれば、インターネットの利用を段階的に廃止して、ユニバーサルネットに完全に移行することができる。」
上記のプランは、IPv6とIPv6インターネットという言葉を別の言葉に置き換えただけなのに、なんだか実践するのがずっと大変そうだ。具体的には次のような問題がある。
まず第一の問題は、ユーザにとって、UniversalTalkアドレスの割り当てを受けることはIPアドレス枯渇問題の解決策にならないことだ。ネットに接続したいユーザは、既存のインターネットに接続したいのであって、ユニバーサルネットに接続したいわけではない。従って、IPアドレスの入手が困難になってきても、プロバイダはキャリアグレードNATやアドレス購入などの手段によってなんとかIPアドレスを捻出するしかない。
すべてのサイトがインターネットとユニバーサルネットの両対応になっていれば、UniversalTalkアドレスだけでやっていくことができるけど、それまではIPアドレスがないと接続できないホストがあって困ることになる。従って、ユニバーサルネットの普及率がほとんど100%になるまで、ユーザはIPアドレスを必要とし続ける。UniversalTalkの普及を推進していっても、移行の最終段階までは、IPアドレスの需要はずっと増え続けるし、ユーザもプロバイダも、インターネットとユニバーサルネットの両方への接続を維持し続ける必要がある。
上記の問題はよく見逃されがちだけど、重要な問題である。一般に、部分的に改善していっても問題が緩和されず、全体が改善されて初めて効果が見えるソリューションは、全員の協力を得ることが難しく、巨大なマルチパーティーのシステムに対してデプロイするのは非常に大変だ。ここで例として使っているユニバーサルネットもその例外ではない。
第二の問題は、インセンティブの欠如だ。インターネットにはプロバイダやユーザ、サービスの運営者などいろいろな参加者がいるけど、誰にとってもユニバーサルネットを推進するモチベーションというのが特にない。これは深刻な問題なのでちょっと下で詳しくみてみよう。
インセンティブの欠如
IPv4インターネットからユニバーサルネットに移行するのが全体にとって望ましいとしても、それぞれの参加者はUniversalTalkを採用するモチベーションが特にない。具体的に、それぞれの参加者ごとにUniversalTalkの意義を考えてみよう。
既存ユーザ:インターネットのユーザにとって、ユニバーサルネットに新たに接続しても得になることはない。なぜならユニバーサルネットでしか到達できないサイトというのは特に存在せず、ユーザが接続したいサイトはすでにインターネットで到達可能だからだ。従ってインターネットのユーザにとってUniversalTalkアドレスの割り当てを受けるメリットは特にない。
プロバイダ:設備とメンテナンスにコストを費やしてネットワークをUniversalTalk対応にすることはできるが、そのコストをユーザに転嫁することはできない。上記のように既存ユーザとしてはとりたてて得になるものではないからだ。
サービスの運営者:サーバのコード変更やメンテナンスにコストを費やしてインターネットとユニバーサルネットの両対応にすることはできるが、それによってユーザが増えることはない。ユーザはすでにインターネットに接続されていて、ユニバーサルネットだけを使っているひとはいないからだ。
ゲームなどNAT越えのソリューションを必要とするサービスの運営者:この人たちはもっとも切実にUniversalTalkを必要としているように見えるが、この人たちですらUniversalTalkのみで動くソリューションを実装することはできない。多くのユーザはインターネットだけを使っていて、インターネットで機能するNAT越えのソリューションを実装しなければ、実際のユーザがついてこないからだ。そして、一度インターネットで機能するワークアラウンドを実装してしまうと、ユニバーサルネットに対応するモチベーションは低下してしまう。インターネットで一応きちんと動くのに、なぜわざわざIP/UniversalTalk両対応にして、2つの異なる仕組みをメンテナンスし続けなければならないのか?
結果として、誰にとっても特にユニバーサルネットを推進するモチベーションが個人として存在しないので、ユニバーサルネットへの移行が進まないことになってしまう。
このような、誰にとっても特に戦略を変えるインセンティブがない均衡状態のことを、ゲーム理論ではナッシュ均衡という。ナッシュ均衡では、誰も現在行っていることを変更する個人的理由を持たないので、現状が維持されることになるが、必ずしもそれが全員の利益になっている状態とは限らない。全員が一斉に手を変えることができれば全員にとってより良い状態になるけど、自分だけ手を変えると単に損という状況はよくあって、まさに上記のユニバーサルネットはナッシュ均衡ではあるが最適ではない状態の例になってしまっている。
(僕個人としても、自宅のLinuxマシンにリモートログインしたいことがあって、プロバイダはIPv6対応しているのだけど、ポートフォワーディングなどでIPv4でログインできるように設定を行った。IPv4でログインできないと、時々カフェのWi-Fiなどからログインできなくて困るからだ。そして常にIPv4でログインできるようになった結果、IPv6を使い分ける必要性がなくなったので、自宅のLinuxマシンに特にIPv6アドレスは割り当てず、いつもIPv4でリモートログインするようになってしまった 。これは僕が単に面倒くさがりだという話かもしれないけれど、要するにインセンティブというのはそういう話である。)
上記のような状況を扱う学問は、コンピュータサイエンスではなく経済学だろう。そして、経済学を勉強したものなら誰でも知っているように、一般にこういう状況において「啓蒙を図る」とか「意義を周知する」というのは解決策にならない。例えば経済の状態が悪くて一般消費者が支出を控えているときに、「国民にどんどん買い物をするように啓蒙を図る」といったことで景気を回復させることはできない。本当に全員が支出を増やせば景気が回復するのだとしても、呼びかけるだけでは一部の人しかついてこないし、そうなると、呼びかけに応じた人は不景気の中で散財しただけになってしまう。同様に、IPv6の意義について周知しても、それだけでは個人個人として合理的な選択を行う人々の行動を変えることは難しい。
長引いた移行プロセスのコスト
もうこれくらいで「UniversalTalk」や「ユニバーサルネット」のような造語を使うのはやめておこう。IPv6は、上記でいうところのUniversalTalkプロトコルで、上記で説明したように、移行に長い時間がかかっている。
IPv6への移行が迅速に終わらなかったことで、IPv4のアドレス枯渇問題はいまだに解決されずにいる。上で見てきたように、部分的にIPv6を導入することはIPv4の問題を解決することにはならないので、実際僕らは2020年になろうという現在でも、NATがあっても動く上位プロトコルを考案したり、キャリアグレードNATといったものを考えなければいけなくなっている。このコストは全員に対してかかる。
さらに、IPv6に対応している「良心的な」サービスなら、さらにIPv6対応のコストも増えることになるが、それを誰かに転嫁することはできない。
IPv4だけが存在する状態より、中途半端にIPv4/IPv6が両方存在する状態のほうが、むしろ悪い状況になっているということすらできる。
他の人より早くIPv6に対応した参加者は、それによって特に利益を得ることがなく、他の人がIPv6を導入した後に遅れてIPv6対応する参加者は、即座にIPv6の利益を得ることができるというのは皮肉な話だ。2000年代のような早期に導入されたIPv6対応機器は、IPv6が使えるという事実がユーザに実際の利益をもたらす前に、もはや寿命を終えてリプレースされてしまっているだろう。こういうのは望ましい状態とは言えない。
インセンティブを作る
経済学のアナロジーは有効だ。結局のところ、これはネットワークプロトコルの技術的な話ではなく経済学的な問題で、解決のヒントも経済学から得ることができるからだ。例えばインセンティブがないために経済が望ましくない状態になっている場合、政府や中央銀行は、公共事業を拡大したり金利を操作したりすることでインセンティブを作り出し、経済を望ましい方向に誘導しようとする。同様に、IPv6の移行も、インセンティブを人工的に作り出すことにより、均衡状態を破るという戦略を考えることができる。
例えば一つの理論的な方法では、IPv4しか使えないサービスに対してアドレス1個当たり年間数ドルといった登録料を取る(実質的にIPv6非対応税を課す)ことで、サービスをIPv4/IPv6両対応にするインセンティブを作り出すという方法が考えられる。年々登録料を値上げしていくことで、早めにIPv6対応しようとする人に報いることもできるだろう。
同様にプロバイダに対しても、例えばIPv4でしか到達できないエンドユーザの割合に応じてIPアドレスの登録料を取るという方法が考えられる。この登録料は結局ユーザに転嫁せざるを得ないので、IPv6対応ルータを使っているユーザとそうではないユーザの2段階料金プランにせざるを得ないだろう。こうすればエンドユーザにとっても、ホームルーターとしてIPv6対応機器を選択したり、カフェのWi-FiとしてIPv6を解放するといったインセンティブが生じることになる。
金銭によらないインセンティブとしては、IPv6のほうをIPv4より速くするという方法が実際に存在するが、これは導入がやや難しいし(エンドノードで行うことにすると回避が比較的容易)、サービスの質を意図的に低下させるというのはかなり批判があるだろうから、導入には抵抗がありそうだ。とはいえ理論的にはありえる方法ではある。
上記以外のインセンティブも考えることができる。いずれにせよここでのポイントは、適切な制度設計によりインセンティブは作り出すことができて、それによって人々の自発的な行動を促すことができるということだ。IPv6は、恐らくそういった「放っておいても普及が進む」制度を設計するという戦略を取るべきだったのだろう。
おわりに
この記事ではIPv6普及の構造上の問題について解説を行った。IPv6という名称の、どことなく「未来っぽい」あるいは「あるべき姿」のような印象を排除するために、別の名前のプロトコルを例にすることで、より冷静に事実を捉えることを試みてみた。
なお、僕はIPv6が普及しないと言いたいわけではない。IPv6を導入するコストはかなり下がっているので、多くのホストやネットワークがIPv6に対応するようになっており、IPv6のトラフィックもインターネット上で次第に増えつつある。とはいえ、かなり悲観的な予測すら下回ってきたことを考えると、今と同じ人々の好意に頼るだけの普及戦略では、すごく大雑把にいって、少なくも20年くらいはIPv4がないと困ると考えた方がよいのではないだろうかと思う。つまりあと20年くらいはIPv4アドレスの需要が増え続けて、NATなどでやりくりする必要があるし、その間はIPv4のみ対応しているサービスを作っても困ることはないだろうなと(少し心は痛むけど)思う。
IPv6から学べることは、インセンティブ設計をうまく考えない限り、あるコミュニティ全体を似て非なるものに移行させるのはとても難しいということだろう。プログラマなら、よく似たようなことがPython 2からPython 3への移行で起きていることを指摘することができると思う。大規模な移行をうまく行うためには、移行後の状態がよいものであることを示すだけではなく、個人個人が自発的に移行したくなる理由というものを作ってあげなければいけないのだろう。
追記(よくある質問とその答え)
Q. XXX(大手のサービスやネットワークなど)がIPv6にしか対応しない宣言をすれば一気に普及するはず。
A. 既存サービスがIPv4対応を切り捨てた場合、多くのユーザが流出してしまうだけだし、新規サービスの場合は集客が困難になるだけなので、そのような自分に不利なことをあえて行う理由がありません。
Q. IPv4アドレスが枯渇した場合IPv6アドレスを割り当てざるを得ない。
A. 上のインターネットとユニバーサルネットの例のように、IPv4インターネットとIPv6インターネットはまったく別のネットワークなので、IPv4アドレスが欲しい人(IPv4インターネットに接続したい人)にIPv6アドレスを割り当てるのは意味を為しません。また、NATによってIPv4アドレスは実質的に増やせるので、IPv4アドレスの割り当てが不可能になることはなく、一般ユーザにとってIPv4アドレスが枯渇することはありません。
Q. IPv4とIPv6を並行に運用して徐々に移行していくことが望ましい。
A. IPv4とIPv6を長期間並行運用する場合、IPv4アドレス枯渇問題のワークアラウンドを実装することと、IPv6ネットワークを維持することの両方を長期間にわたって行っていく必要がでてきてしまいます。移行をまったく行わないか、素早く行うことが、全体としては望ましい状態です。逆に言うと、現状のような終わりの見えない移行計画(具体的な計画の欠如のことを計画と呼んでいいのかはわかりませんが)は望ましくありません。
Q. 必要なところからIPv6を導入していくことで、IPv4アドレス不足の問題を緩和することができる。
A. IPv4とIPv6の両方を使っている限り、IPv4アドレスは何らかの方法で確保してくる必要があるわけで、IPv6を採用するだけではIPv4のアドレスが不足しているという問題は解決しません。つまり、IPv4のサポートを廃止してもよい程度にIPv6が普及するまで(つまり相当遠い未来まで)、IPv6がIPv4の問題を緩和することはありません。
IPv6を利用できないのが問題なのではなく、IPv4の利用をやめられないのが問題なのです。
自分がIPv6を導入してもIPv4の問題を解決できないのであれば、そもそも何のために自分はIPv6を導入したかったんだっけ、という話になるのですが、実際、現状のインセンティブ設計では、誰にとってもIPv6を積極的に導入する理由はありません。IPv6に対応するべきという「世間の空気」の影響を除いてみれば、なるべくIPv6対応を遅らせて、他の人たちが対応した後に自分が対応するほうが得ということになっているのが現状です。