2009年12月05日の日記です



google DNS  2009-12-05 11:39:20  コンピュータ

昨日発表されたばかりの新サービスで、いろいろ話題になっていますね。


これを知って、「どんなだろ?」と情報検索してみると、結構出てくる。

今の google は、書かれて数時間後には検索結果に出てくるようになりますね。恐ろしい。


ところが、どうも「的外れ」な記事ばかり。

DNS って、インターネットにとっては「空気のような」技術で、有ってあたりまえだから、詳しい仕組みをわかっている人少ないのですね…




まず、ping しても DNS の速度は測れません。

ping を開始する前の「前準備」としては DNS に問い合わせを行うけど、ping そのものには関係ないから。


また、そもそも DNS の「速度を測る」のが無理です。


インターネットでは刻々と条件が変化しますから、速度を測るのであればできる限り同じ条件で数回試験を行って平均を出す、などしなくては正しい測定にはなりません。


しかし、DNS には「キャッシュ」があるので、2回目以降は高速に動作します。

更に言えば、後で書くように DNS サーバーは「複数のサーバーが協調して動作する」ために、1回目ですら試験を行う時に経路上のどのサーバーもキャッシュを行っていない、などと保証することは出来ません。


だから、複数回試験をして平均を出すことは出来ず、1発試験に望んでも、そのデータが正しい保証が無いのです。



WEB の閲覧速度は、DNS 問い合わせ速度 + 相手の WEB サーバーの反応速度 + 通信経路の速度、が速度となります。ここで、通信経路はクライアントの環境ごとに大体速度が固定するとして、DNS 問い合わせが高速化することで全体が目に見えて高速化するためには、WEB サーバーの速度が速いこと、が条件の一つになります。


というわけで、「相手が google のように高速化されたサーバーだと効果がある」というような記事が出来上がるのでしょうが、google ほどみんながアクセスするサーバーであれば、近所の DNS サーバーを使っていても誰かが問い合わせたキャッシュがあるでしょうから、google DNS を使わないでも十分に高速なはずです。

つまり、こういう場面では google DNS の効果はそれほど出ないはずです。



じゃぁ、google DNS で何が速くなるのかと言えば、「みんなが行かないような小さなサイト」を、初めて訪れる時の速度です。

同じドメインでの2回目以降のアクセス…つまり、サイト内でページ遷移する時などは、手元のローカルマシンが DNS 問い合わせの結果をキャッシュしています。だから、DNS は最早関係ない。関係するのは、あくまでも「初回アクセス」のみ。



でも、実は google で検索を行って、片っ端から情報を見て回るようなときには、小さなサイトを訪れて、最初のページを見ただけで帰る、ということを繰り返しているはず。

そういう作業が高速になるのが、google DNS の1つ目のメリットです。




ここで、DNS の仕組みについて書いておきます。

よく言われる比喩だけど、DNS は「知らないことは、知っていそうな人に聞く」ことで動いています。


あなたの使っているパソコンは、ドメイン名について何も知りません。

www.wizforest.com というドメインを指示されても、何もわからない。


そこで、上流の DNS に問い合わせます。

PC が DHCP 設定で動作している場合など、「上流の DNS」という存在を意識したことなど無いでしょう。DHCP は全てを設定してくれますから。


でも、PC はどこか「近くの」DNS サーバーを知っていて、わからないことはそのサーバーに聞くのです。



ところが、聞かれたサーバーだって、全てを知っているわけじゃない。

世の中には情報が多すぎて、サーバーが知っていることなんてその、ほんの一部です。


でも、www.wizforest.com は知らなくても、.com については知っているかもしれない。

そんな時、近くの DNS サーバーは、.com について知っているサーバーに「www.wizforest.com を知っているか?」と問い合わせます。


では、.com を知っているサーバーは www.wizforest.com を知っているか? これも、そんなことは無いでしょう。

でも、wizforest.com なら知っているようです。そこで、.com のサーバーは、wizforest.com を知っているサーバーに、「www.wizforest.com を知っているか?」と問い合わせます。


wizforest.com の DNS サーバーは、僕が設定した DNS サーバーです。こいつは、www.wizforest.com を知っています。

そこで、やっと「あぁ、その IP アドレスは、xxx.xxx.xxx.xxx だよ」と返します。


返事をもらった、.com を知っているサーバーは、最初に問い合わせた「近くのDNSサーバー」に返事を送ります。

と、同時に、次の問い合わせに備えて、今回知ったことを覚えて(キャッシュして)おきます。


近くのDNSサーバーは、問い合わせた PC に返事を送ります。そして、やはりキャッシュします。


こうして、PC は IP アドレスを知ることができました。


IP アドレスは、ネット上の「住所」です。これがわかれば、目的地にたどり着くことが出来ます。

これで問題解決。



これが DNS の仕組み。

すばらしいことです。おかげで、僕は自分の管理するパソコンを、自分の DNS に登録するだけで、世界中の人に知らせることが出来ます。




でも、問題点がいくつか。

この方式は、遅いです。


一応、遅いことは考慮していて、どのマシンも一度問い合わせたことは「一定時間」覚えておく努力をします。

(一定時間が来る前に忘れることもあるけど。…メモリの制約などで)


あなたの手元のパソコンだってそう。

一度問い合わせたドメイン名を、次の瞬間にもう一度問い合わせるような間抜けはやりません。

だから、同じ WEB ページ内でブラウズしている分には、DNS 問い合わせを省略した分だけ高速に動作するのです。


でも、初めて訪れるページについては、やはり遅い。これは動かしようの無い事実。

だって、それが DNS の仕組みなんだから。



もうひとつ、「嘘つきがいたらどうするの?」という問題があります。

DNS は「知らないことは、知っていそうな人に聞く」という仕組みで動いていますが、知りもしないのに知ったふりをする「シッタカ」がいたらどうなるんでしょう?


悪意をもって応用すれば、有名サイトに成りすましたり、銀行サイトに成りすまして人の口座番号を盗む事だって可能です。


これは、特定のサーバープログラムにバグがある、などの問題ではなく「DNS の思想設計そのものにバグがある」という問題です。




というわけで、やっと話は google DNS へ。


google は、「何でも知っている DNS」を開発しました。


一度問い合わせた内容は忘れません。

…本当に忘れないと、サーバー構成の移動などがあった場合に困るので、「忘れて欲しい期限が近づくと、自働的に再確認を行って、最新データに更新し続ける」のですけど。


だから、伝言リレーは始まりません。google DNS に聞いたら即座に答えてくれます。



伝言リレーが無いのだから、嘘つきが混ざることもありません。

キャッシュ更新の際には、キャッシュ期限切れの「直前」なので、まだ相手のサーバーを知っているため、伝言リレーを行うのではなく「本人に直接問い合わせ」ます。


これで全てが解決! …というほどお気楽なものではないでしょうが、DNS の問題のいくつかは解決できるでしょう。


「多数の小さなマシンが協調動作する」という、インターネットの理想とはかけ離れ、パワーを持った1つのマシン(実際はそうではないが、1つに見える)が全てを支配する、という、別の問題は引き起こしますが。


僕は、自宅内の DNS サーバーの上流として、早速 google DNS を設定しました。

検索結果を次々見ていくときなどは、多少速くなった気はします。


…が、そもそもは、こういうときは「遅いから、Chrome で次々タブを開いて、読み込み終わったものから見る」という習慣が身に付いているのでした。



翌日追記

上の日記を書いた時点では、ちゃんと DNS が理解できて検証している、というような日本語の記事がネット上に見当たらなかったために、理解してもらうための記事を書いたのでした。


その後、SlashDot で話題に上り、アレゲな人が集まるサイトだけに正しい議論が行われていました。

現時点でもっとも有用と思われる記事には、正しい見解とともに、簡単な試験データが数値つきで載っています。


ローカルのサーバーに DNS を立てて、上流に google DNS を設定するのがよさそうだ、とのこと。

うちでやっている設定がそれです :-)


論理的に一番よさそう、と思って作業したものが、数値的に正しいと確かめられたわけで、ちょっと嬉しい。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

ミッキーマウス&ポール・モカペトリス 誕生日【日記 13/11/18】

google DNS【日記 14/10/14】

ポール・モカペトリスの誕生日(1946)【日記 14/11/18】

ICANN設立日(1998)【日記 13/09/18】

Programming Tips

別年同日の日記

02年 夢占い

03年 高速?

04年 潜入!巨大眼科

05年 子連れで外食

12年 水星とプラネタリウム

13年 一眼レフ購入

15年 サーバ故障

15年 たくさん交換


名前 内容


戻る
トップページへ

-- share --

1000

-- follow --




- Reverse Link -