こんにちは、かつコーチです。
前回の記事で、DNSは「ドメイン名とIPアドレスを紐付ける電話帳のような仕組み」だと解説しました。
では実際にブラウザにURLを入力してから、IPアドレスが返ってくるまでの間、裏側では何が起きているのでしょうか。
この記事では、名前解決の詳しいステップを、電話帳を調べる手順に例えながら初中級者向けに解説します。
流れを理解すると、dig +traceのようなコマンドの出力もすっきり読めるようになります。
名前解決とは?
電話帳で番号を調べる手順に似た仕組み
名前解決とは、ドメイン名からIPアドレスを導き出す一連の問い合わせ処理のことです。
電話帳で知人の電話番号を調べるときのことを思い出してみてください。
分厚い電話帳をいきなり最初のページから読む人はいません。
まず「あ行・か行…」といった大まかな索引で該当のページ範囲を絞り込み、次にその中から名前を探して番号にたどり着くはずです。
名前解決も同様に、いきなり最終的な答えにたどり着くのではなく、複数の窓口に段階的に問い合わせることでIPアドレスにたどり着きます。
なぜ1か所に集約しないのか
もし世界中のすべてのドメイン情報を1台のサーバーだけで管理していたら、そのサーバーが落ちた瞬間にインターネット全体が使えなくなってしまいます。
電話帳が「全国版」「地域版」のように階層的に分かれているのと同じ発想で、DNSも情報を複数の階層に分散させることで、負荷分散と障害耐性を実現しています。
名前解決の詳しいステップ
ステップ1:ブラウザ・OSのキャッシュを確認する
ブラウザにexample.comと入力すると、まずブラウザ自身が過去に調べた結果をキャッシュしていないか確認します。
次にOS(DNSキャッシュ)にも同様の問い合わせが行われます。
「最近調べた電話番号は、電話帳を開かなくてもメモ書きですぐ思い出せる」のと同じ仕組みです。
キャッシュに情報があれば、以降のステップは省略されます。
ステップ2:DNSキャッシュサーバー(リゾルバ)に問い合わせる
キャッシュに情報がなければ、契約しているプロバイダなどが用意するDNSキャッシュサーバー(フルサービスリゾルバ)に問い合わせます。
このサーバーが、電話帳で言うところの「案内窓口」の役割を果たし、以降の問い合わせを代行してくれます。
ステップ3:ルートDNSサーバーに問い合わせる
案内窓口(リゾルバ)は、まずルートDNSサーバーに「.comを管理しているのはどこですか」と尋ねます。
電話帳で言えば「あ行の担当窓口はどこですか」と最初に大枠を確認する動きに近いイメージです。
ステップ4:TLDサーバーに問い合わせる
ルートサーバーから教えられたTLDサーバー(.comや.jpなど、トップレベルドメインを管理するサーバー)に、今度は「example.comを管理しているのはどこですか」と尋ねます。
ステップ5:権威DNSサーバーから最終的な回答を得る
最後に、example.comの情報を直接管理している権威DNSサーバーに問い合わせ、ようやく実際のIPアドレスが返ってきます。
これは電話帳の「あ行→さらに細かい索引→該当ページの本人の連絡先」というように、絞り込みの末に目的の番号へたどり着く流れと同じです。
dig +traceで問い合わせの流れを可視化する
この一連の流れは、digコマンドに+traceオプションを付けることで、実際に目で確認できます。
# ルートサーバーから順に問い合わせる流れを表示する
dig example.com +trace
出力には、ルートサーバー→TLDサーバー→権威DNSサーバーという順番で、各段階の応答が表示されます。
よくあるつまずきポイント・エラー対処
更新したはずのDNSレコードが古いまま表示される
❌Before(つまずいた実例)
サーバー移転にともないAレコードを更新したのに、自分のPCだけいつまでも古いIPアドレスにアクセスしてしまい、原因調査に時間を溶かしたことがあります。
✅After(解決方法)
原因は、ステップ1・2で紹介したキャッシュに古い情報が残っていたことでした。
自分のPCのDNSキャッシュを明示的にクリアしたところ、最新の情報を取得できるようになりました。
# macOSでDNSキャッシュをクリアする
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
「自分のメモ書き(キャッシュ)が古いままだと、電話帳を新しく調べ直しても気づけない」と考えると、キャッシュを疑う発想を持ちやすくなります。
応用・一歩先の使い方
権威DNSサーバーとキャッシュサーバーの役割の違い
中級者がつまずきやすいのが、「権威DNSサーバー」と「DNSキャッシュサーバー(リゾルバ)」の違いです。
権威DNSサーバーは、そのドメインの情報を一次情報として保持しているサーバーです。
一方リゾルバは、権威DNSサーバーに問い合わせた結果を一時的に取り次いで保存するだけの窓口です。
電話帳で言えば、権威DNSサーバーは「本人から直接届け出を受けた原本の電話帳」、リゾルバは「その原本をもとにコピーを作って手元に置いている案内窓口」というイメージです。
まとめ
この記事のポイント
- 名前解決は、ブラウザ・OSキャッシュ→リゾルバ→ルートサーバー→TLDサーバー→権威DNSサーバーという段階的な問い合わせで行われる
- 情報を1か所に集約せず階層化しているのは、負荷分散と障害耐性のため
dig example.com +traceで、実際の問い合わせの流れを確認できる- 古いDNS情報が残る場合は、自分のPCのDNSキャッシュのクリアを試す
次に読むべき記事
DNSの仕組みがわかったら、次はWebの基本ルールである「HTTPとは?Webの通信ルールを理解する」を読んでみてください。
タグ: ネットワーク, 中級者向け, DNS