IPv6がなぜいまだに普及していないのか

現在のインターネットの基本をなしているIPv4というプロトコルには、広く知られた大きな欠点がある。パケットのアドレスフィールドの幅が32ビットなので、ネットワークに接続可能なホスト数の上限が2³²(約43億)になってしまっているのだ。その欠点を修正するために、1990年代後半にIPv6という新たなプロトコルが設計されたのだけど、いまだにインターネットではIPv6は少数派で、IPv4がメインで使われている。

1990年代当時は、IPv6は規格を策定すれば比較的すぐに普及するはずで、それによってインターネットが抱えているアドレス枯渇の問題が解決されるという雰囲気だったように思う。1998年にタイムトラベルして、20年たってもまだIPv4を置き換えることに成功していないと当時の人のIPv6推進者たちに教えたら、多分すごくびっくりされるだろう。一体どうしてこんなに普及が遅れてしまったのだろうか? そして一体どうすればよかったのだろうか? このエッセイではそれについてちょっと考えてみようと思う。

(なおこのエッセイは僕の個人的な考察であって、インターネットコミュニティで広く共有されている見解について述べているといったものではない。また、後知恵で何かの問題を語るのは簡単であり、無論、当時においてIPv6の規格策定や普及に尽力していた人たちを批判しようというわけではない。とはいえ、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個当たり年間数ドルといった登録料を取る(実質的にIPv4税を課す)ことで、サービスをIPv4/IPv6両対応にするインセンティブを作り出すという方法が考えられる。年々登録料を値上げしていくことで、早めにIPv6対応しようとする人に報いることもできるだろう。

同様にプロバイダに対しても、例えばIPv4でしか到達できないエンドユーザの割合に応じてIPアドレスの登録料を取るという方法が考えられる。この登録料は結局ユーザに転嫁せざるを得ないので、IPv6対応ルータを使っているユーザとそうではないユーザの2段階料金プランにせざるを得ないだろう。こうすればエンドユーザにとっても、ホームルーターとしてIPv6対応機器を選択したり、カフェのWi-FiとしてIPv6を解放するといったインセンティブが生じることになる。

金銭によらないインセンティブとしては、IPv6のほうをIPv4より速くするという方法が実際に存在するが、これは導入がやや難しいし(エンドノードで行うことにすると回避が比較的容易)、サービスの質を意図的に低下させるというのはかなり批判があるだろうから、導入には抵抗がありそうだ。とはいえ理論的にはありえる方法ではある。

上記以外のインセンティブも考えることができる。いずれにせよここでのポイントは、適切な制度設計によりインセンティブは作り出すことができて、それによって人々の自発的な行動を促すことができるということだ。IPv6は、恐らくそういった「放っておいても普及が進む」制度を設計するという戦略を取るべきだったのだろう。

おわりに

この記事ではIPv6の普及についての構造上の問題について、僕の考えを述べた。IPv6という単語から受ける印象を排除するために、別の名前のプロトコルを例にすることで、より冷静に事実を捉えることを試みてみた。

なお、僕はIPv6が普及しないと言いたいわけではなく、IPv6が普及に苦労している理由を理解したいだけである。IPv6を導入するコストはかなり下がっているので、多くのホストやネットワークがIPv6に対応するようになっており、IPv6のトラフィックもインターネット上で次第に増えつつある。とはいえ、悲観的な予測すら下回ってきたことを考えると、今と同じ普及戦略ではすごく大雑把にいって、少なくも20年くらいはIPv4がないと困ると考えた方がよいのではないだろうかと、個人的には思う。つまりあと20年くらいはIPv4アドレスの需要が増え続けて、NATなどでやりくりする必要があるし、その間はIPv4のみ対応しているサービスを作っても実質的に困ることはないだろうなと(少し心は痛むけど)思う。

IPv6から学べることは、インセンティブ設計をうまく考えない限り、あるコミュニティ全体を似て非なるものに移行させるのはとても難しいということだろう。プログラマなら、とても似たようなことがPython 2からPython 3への移行で起きていることを指摘することができると思う。大規模な移行をうまく行うためには、移行後の状態がよいものであることを示すだけではなく、個人個人が自発的に移行したくなる理由というものを作ってあげなければいけないのだろう。

316

#エンジニア 系記事まとめ

noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。
2つ のマガジンに含まれています

コメント1件

ご存知かもしれませんが、ネトゲやってる人は夜間の回線混雑を回避するためにipv6に自らプロパイダを変えてでも切り替えてます。
ipv6を使う人が少ないため、そちらは混雑しないので少しインセンティブはあります。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。