High Level Engineer Blog.

URLバーにURLを入力してからブラウザに表示されるまで(DNS)

Cover Image for URLバーにURLを入力してからブラウザに表示されるまで(DNS)
Kenichi Noshian
Kenichi Noshian

URLバーにURLを入力してからブラウザに表示されるまで(DNS)

URLバーにURLを入力してからブラウザにWebページが表示されるまでを解説していきます。

大枠の流れは以下のシーケンス図の通りです。

Screenshot 2024-02-11 at 15.57.37.png

ブラウザ → ローカルDNSキャッシュ

ユーザーがWebブラウザのアドレスバーにURLを入力し、エンターキーを押すと、ブラウザはそのURLのドメイン名に対応するIPアドレスを見つけるためにDNSクエリを開始します。

  1. ブラウザのDNSキャッシュ

    • ユーザーがWebブラウザにURLを入力した瞬間、ブラウザはまず自身のDNSキャッシュをチェックします。このキャッシには、最近解決されたドメイン名とその対応するIPアドレスが一時的に保存されます。ブラウザのキャッシュに該当するエントリが見つかった場合、そのIPアドレスが直ちに使用され、DNSリクエストはネットワーク外へ送信されません。
    • ブラウザキャッシュの中身を実際に確認する方法
      • Chromeを開いて、アドレスバーにchrome://net-internals/#dns と入力し、Enterキーを押します。ここのフォームにURLを入力すると、そのURLのDNSキャッシュがブラウザに存在しているかを確認できます。
  2. オペレーティングシステムのDNSシステム

    • ブラウザのキャッシュに該当するエントリがない場合、次のオペレーティングシステム(OS)のDNSキャッシュがチェックされます。OSは、以前に解決されたすべてのDNSキャッシュがチェックされます。OSは、以前に解決されたすべてのDNSクエリの結果を保持しており、ブラウザと同様に、キャッシュにエントリがある場合はその情報が使用されます。OSのDNSキャッシュは、ブラウザのキャッシュよりも長い期間データを保持することがあります。

ローカルDNSキャッシュ → ルーターのキャッシュ

OSのキャッシュにも該当するエントリが無い場合、クエリはネットワーク上のルーター(あるいは別のローカルDNSキャッシュサーバー)に送信されます。多くのルーターは、ネットワーク内のデバイスが行ったDNSクエリがネットワーク内の他のデバイスから行われた場合、迅速に解決することができる。

ISPのDNSサーバーへの問い合わせ

ルーターのキャッシュにも該当するエントリが無い場合、クエリはISPのDNSサーバーに転送されます。ISPのDNSサーバーには広範囲のドメイン名とIPアドレスのマッピング情報が含まれており、多くのクエリがこのレベルで解決されます。

ISPのDNSサーバー → 再帰的DNSクエリの実行

ISPのDNSサーバーでもIPアドレスが見つからない場合、サーバーは他のDNSサーバーに問い合わせを行い(再帰的クエリ)、必要な情報を見つけるまでDNSの階層構造をたどります。このプロセスには、ルートDNSサーバー、トップレベルドメイン(TLD)サーバー、そして目的のドメインの権威DNSサーバーへの問い合わせが含まれます。

再帰的DNSクエリ実行の具体的なシナリオ

ISPが提供するDNSサービスが再帰的リゾルバの役割を果たします。

  1. ルートDNSサーバーへの問い合わせ
    • DNSリゾルバはまず、インターネットのドメイン名システムの最上位に位置するルートDNSサーバーに問い合わせます。ルートDNSサーバーは、TLD(例: .com, .net, .orgなど)ごとにどのDNSサーバーが権威(特定ドメインに関する詳細な情報)を持っているかの情報を持っています。
    • ユーザーが訪問しようとしているドメイン(例: www.example.com)に対して、ルートDNSサーバーは.com TLDの権威DNSサーバーへの参照(アドレス)をリゾルバに提供します。ルートDNSサーバー自体は、ドメイン名に対応するIPアドレスを知りませんが、次に問い合わせるべきTLD DNSサーバーを指し示します。
  2. TLD DNSサーバーへの問い合わせ
    • ルートDNSサーバーからの情報を受け取ったあと、リゾルバは指定されたTLD DNSサーバー(この例では.comドメイン用)に問い合わせを行います。このTLD DNSサーバーは、そのTLD内のすべてのドメイン名に関する情報を管理しており、特定のドメイン(この例ではexample.com)の権威DNSサーバーのアドレスを知っています。
    • TLD DNSサーバーは、example.comドメインの権威DNSサーバーへの参照をリゾルバに提供します。このステップではまだ、リゾルバはwww.example.comのIPアドレスを取得していません。
  3. 権威DNSサーバーへの問い合わせ
    • TLD DNSサーバーから得た情報をもとに、リゾルバはexample.com ドメインの権威DNSサーバーに直接問い合わせを行います。権威DNSサーバーは、そのドメインに関連するすべてのサブドメインやレコード情報(Aレコード、MXレコード、TXTレコード)などを管理しています。
    • リゾルバは、具体的にwww.example.com のAレコード(IPv4アドレス)またはAAAAレコード(IPv6アドレス)を要求します。権威DNSサーバーはこの要求に応じて、対応するIPアドレスをリゾルバに返します。

再帰的クエリ → ISPのDNS

ISPのDNSに権威サーバーから返された情報をキャッシュして、クライアントに返します。

ISPのDNS → ルーターのキャッシュ → ローカルDNSのキャッシュ → ブラウザ

最終的に、目的のドメインの権威DNSサーバーからIPアドレスが取得されると、この情報は逆方向に伝播され、ISPのDNSサーバー、ルーター、ユーザーのローカルキャッシュに順に保存されます。これにより、同じドメイン名に対する将来のクエリがより迅速に解決されます。

これらのフェーズを経ることで、DNSクエリは効率的に処理され、ユーザーは目的のウェブサイトにアクセスできるようになります。DNSシステムの階層的な設計とキャッシングメカニズムは、インターネットのスケーラビリティとパフォーマンスを大幅に向上させています。