コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
名前解決の流れ
最初の 1 バイトを送る前に、何往復もしている
アドレス欄に URL を入れてから画面が出るまで、体感では一瞬です。その一瞬の最初のほうは、まだ目的のサーバーとは一言も話していません。名前から数字を引く問い合わせが先に走っています。ここが遅ければ、サーバーがどれだけ速くても待たされます。
自分は 1 回聞くだけ、代わりに走る係が 3 回聞く
パソコンは、聞き役のサーバーに 1 回だけ聞きます。この聞き役をリゾルバと呼びます。あとは待つだけで、最終的な答えが返ってきます。
走り回っているのはリゾルバのほうです。
プレーンテキスト
自分 → リゾルバ example.com の数字は
リゾルバ → 一番上 com の担当はどこ
リゾルバ → com の担当 example.com の担当はどこ
リゾルバ → 担当サーバー 数字は 192.0.2.5
自分 ← リゾルバ 192.0.2.5聞かれた側が答えを持っていなければ、次はあちらに聞いて、と返します。リゾルバはそれをたどって順に降りていきます。頼む側から見れば 1 往復、実際には 4 往復です。
2 回目からは、ほとんど聞きに行かない
この 4 往復を毎回やっていたら、一番上のサーバーが持ちません。実際には、リゾルバは受け取った答えを手元に置いておきます。
置いておくのは最終的な数字だけではありません。com の担当はここ、という途中の答えも一緒に残ります。だから 2 回目以降は上の段を全部飛ばし、担当サーバーに 1 回聞くだけ、あるいは手元の答えを返すだけで終わります。よく使われるドメインほど、往復は短くなります。
裏返すと、書き換えた直後にすぐ反映されない理由もここにあります。古い答えが手元にあるうちは、そもそも聞きに行かないからです。担当サーバーの側をいくら直しても、聞かれなければ伝わりません。
誰に聞いているかは、自分で選べる
リゾルバは自動で決まります。家の Wi-Fi なら回線業者のもの、会社なら社内のものが、つないだ時点で配られます。設定で 1.1.1.1 や 8.8.8.8 のような公開されているリゾルバを自分で指定することもできます。
ただし、その手前にもう 1 段あります。パソコンの中の hosts ファイルです。ここに名前と数字を書いておくと、リゾルバに聞く前にそれが採用されます。切り替え先のサーバーを本番の名前で先に確認したいときに便利ですが、消し忘れると厄介です。自分だけ違う場所につながり続け、DNS をいくら調べても原因が出てきません。
どこに聞いてどう返ってきたかは、手元で確かめられます。
プレーンテキスト
$ dig example.com +short
192.0.2.5なお、この問い合わせは長らく暗号化されていませんでした。どのサイトを見ようとしたかが、経路上から丸見えということです。今は HTTPS や TLS の中に問い合わせを入れて隠す方式が広まっていて、最近のブラウザは既定で有効にしていることがあります。会社の中で名前が引けなくなったときは、ブラウザがこの機能を使って社内のリゾルバを迂回していないかを疑います。
復習ミニクイズ
リゾルバが行う問い合わせのスタイルとして正しいものはどれですか