Firefox3.5が世界中のインターネットトラフィック傾向を微妙に変えるかも???

2009/6/23-1

近いうちにFirefox 3.5が登場するようです。 Web上に公開されている情報を見てFirefox 3.5がリリースされた瞬間からインターネットトラフィックの傾向が微妙に変化するのではないかと思いました。

来週ぐらい?にFirefox 3.5がリリースされそうという話は「AMN : Firefox 3.5 ブロガーミーティング」というイベントがあることから知りました。 そこで、Firefoxの新機能一覧を「Mozilla Developer Center : Firefox 3.5 for developers」で見たのですが、その中にDNSプリフェッチが含まれています。

DNSプリフェッチ機能

Firefox 3.5からDNSプリフェッチ機能が標準搭載されるようです。 (参考 : Mozilla Developer Center : Controlling DNS prefetching)

このDNSプリフェッチ機能は、「これから見るかも知れないWebページのために名前解決だけ終わらせておく」というものです。 インターネットでの通信は全てIPアドレスを識別子として利用しており、例えば「www.example.com」のようなFQDN(Fully Qualified Domain Name)では直接通信は出来ません。

Webでの通信を行う前には、URLに記述されている情報からFQDNを抜き出して、IPアドレスに変換する必要があります。 FQDNからIPアドレスへの変換は、DNSというサーバに答えを教えてもらうことによって実現しているため、自分のコンピュータとDNSの間をパケットが飛んで行って、回答が返ってくるまでは待たなければなりません(キャッシュが無い場合)。 あらかじめ「その後発生するかも知れないDNSへの問い合わせ」をバックグラウンドで行ってしまうというのがDNSプリフェッチです。

DNSプリフェッチ設定方法

クライアント側(ブラウザ設定)でDNSプリフェッチをoffにするには、「about:config」とロケーションバー(URL入力欄)に入力した後に、「network.dns.disablePrefetch」の部分を「true」に変更します。

初期設定では、HTTPSによって取得されたページ内に記述されたリンクに対するDNSプリフェッチは行われないようです。 HTTPSによって取得されたページ内に記述されているURLに対してもDNSプリフェッチを行うには「network.dns.disablePrefetchFromHTTPS」を「false」に変更します。

また、Webサーバ側でHTML内に以下のようなmetaタグを挿入する事でDNSプリフェッチ機能をoffに出来るようです。



<meta http-equiv="x-dns-prefetch-control" content="off">


逆に、強制的にDNSプリフェッチをブラウザ側に要求することも出来るようです。 Webコンテンツ制作者が意図的にDNSプリフェッチすべきホスト名などを指定できるようになるので、上手に使えばFlashやAJAXによるWebアプリの初期動作高速化が可能になるかも知れません。 (参考 : Mozilla Developer Center : HTTP access control



<link rel="dns-prefetch" href="http://www.spreadfirefox.com">
<link rel="dns-prefetch" href="//www.spreadfirefox.com">


この時のlinkタグの記述方法ですが、hrefアトリビュートに「http://」ではなく「//」表記でホスト名を記述しても良いようです。

インターネットトラフィックが微妙に変わる?

このDNSプリフェッチによって世界全体のインターネットトラフィックに微妙な変化が発生するのではないかと勝手に妄想してしまいました。 非常に多くのユーザが今後は「見ないWebページ」のためのDNS queryを送信するようになります。 さらに、DNSへのqueryにはresponseが返されます。 IPv6が使える環境であればIPv6でのqueryパケットが送信されて、IPv6用のAAAAレコードが存在しなければIPv4でのqueryが再送されるため、場合によっては2倍送信されることもあだろうと思われます。 このように、Firefox 3.5のリリースとともに「今まではなかったトラフィック」がインターネット上に発生することになります。

さらに、ローカルマシンのDNSキャッシュが効きにくくなる可能性もあります。 例えば、ローカルのDNSキャッシュの個数が50個で、Webページ1つに50個のリンクが存在していた場合、良く利用するWebサイトのDNSキャッシュが上書きされてしまうという問題もありそうです。 これにより、「このページを開いた後は、何故かツールバーの反応が鈍くなる」というような「何故かわからないけど遅い時がある」という現象を発生させるかも知れません。 DNSキャッシュのヒット率低下は、ネットワークへのquery送出量増加にも影響を与えそうです。

と、ここまで書いたのですが、これらによって新規発生するトラフィックが全体から見るとどれだけ変わるのかは良くわかりません。 まず、一つの名前解決queryは100バイト以下ですし、responseも大抵は512バイト以下です。 今よりもやり取りが増えたとしても、全体から見れば微々たる量だろうと思われます。 「微妙に」と表現したのはそこら辺が恐らく、インターネットトラフィック全体から見ると劇的な数値にはならないためです。

ただし、Firefoxは非常に多くのユーザを抱えるアプリケーションです。 一つのアプリケーションが方式を変更しただけで、ネットワークやサーバに多大な影響が出る事はしばしばあります。 例えば、OSやセキュリティソフトのアップデート方針やアップデートチェックタイミング、各種OSのTCPなどのパラメータ、Winnyなどの大量トラフィックを発生させるアプリケーションの挙動変更などがありそうです。

今回のFirefox 3.5に搭載されているDNSプリフェッチ機能によって、DNSを利用するためのUDPトラフィックは確実に増加すると予想しています。 細かいかも知れませんが、この変更によってDNSの設備を増強する必要性が発生する組織もあるかも知れないと妄想しています。

DoSにも使える?

もしかしたら、hrefに意味の無いホスト名を書いた物を列挙したページを作成することによってDNSへのDoSが可能かも知れないと思いました。 例えば、以下のように書くと特定のDNSに対してプリフェッチを連発しそうです。



<a href="http://aaa.example.com/">aaa</a>
<a href="http://bbb.example.com/">bbb</a>
<a href="http://ccc.example.com/">ccc</a>
<a href="http://ddd.example.com/">ddd</a>
<a href="http://eee.example.com/">eee</a>
...


ただし、これを考えた次の瞬間に「この手法ってDoSとしては弱い」と感じました。 Firefox 3.5の新しい機能を使わなくても、今の機能である程度できてしまうからです。 imgタグで存在しないホストへの画像を列挙すれば多くのブラウザでDNS queryを発生させられます。



<img src="http://aaa.example.com/hoge.gif" />
<img src="http://bbb.example.com/hoge.gif" />
<img src="http://ccc.example.com/hoge.gif" />
<img src="http://ddd.example.com/hoge.gif" />
<img src="http://eee.example.com/hoge.gif" />
<img src="http://fff.example.com/hoge.gif" />
<img src="http://ggg.example.com/hoge.gif" />
...


ということで、今のところDNSプリフェッチがFirefox 3.5に搭載されたためにDoSに利用しやすくなったという思いつきは自分の妄想の中で破綻しました。 他に何らかの手法があるのかも知れませんが、今のところ私は思いついていません。

Google ChromeもDNSプリフェッチを使っている

なお、このDNSプリフェッチ技術はFirefoxに限った話ではありません。

昨年発表されたGoogle ChromeもDNSプリフェッチ技術を利用しています。 (参考 : Chromium Developer Documentation : DNS Prefetching)

また、DNSプリフェッチはIEには標準搭載されていないようですが、プラグインで実現可能のようです。

最後に

今後のブラウザ高速化競争は、表示速度の高速化よりもプリフェッチの正確さや効率の戦いになるのかも知れません。 今はDNSプリフェッチが各種ブラウザに搭載されていくというフェーズですが、今後効率的な手法が発明されるまでは、全体的に見ると非効率な手法や、何かに負荷を与えるというような弊害も発生するかもしれません。 また、実はプリフェッチングによってセキュリティ的なリスクが高まるという発見もあるかも知れません。 ただ、今後高速化を行うには恐らくプリフェッチは避けては通れないだろうと思うので、開発や研究は続けるべきだと思います。

恐らくFirefox 3.5のDNSプリフェッチ機能によって、多くのユースケースではWeb閲覧速度が高速化すると思います。 JavaScriptの処理速度なども大幅に高速化されているようですし、来週?のFirefox 3.5リリースが非常に楽しみであると思う今日この頃です。

最近のエントリ

過去記事

過去記事一覧

YouTubeで技術解説やってます!