LESSON 30分

ストーリー

あなた
先輩、DNSがドメイン名をIPアドレスに変換するのは分かりました。でも、具体的にどういう順番で調べるんですか?
先輩
いい質問だね。実はDNSの名前解決って、何段階ものステップを経ているんだ
あなた
何段階も!?
先輩
でも心配しないで。一度流れを理解すれば簡単だよ

名前解決(DNS Resolution)とは

ドメイン名からIPアドレスを調べることを 名前解決 と呼びます。

graph LR
    A["www.example.com"] --> B["名前解決"] --> C["93.184.216.34"]

名前解決の全体フロー

www.example.com にアクセスしたときの流れ:

graph TD
    S1["Step 1: ブラウザのキャッシュを確認"] -->|見つからない| S2["Step 2: OSのキャッシュ・hostsを確認"]
    S2 -->|見つからない| S3["Step 3: DNSリゾルバに問い合わせ"]
    S3 -->|キャッシュにない| S4["Step 4: ルートDNSサーバーに問い合わせ"]
    S4 -->|".comのTLDサーバーはこれだよ"| S5["Step 5: .com TLDサーバーに問い合わせ"]
    S5 -->|"example.comの権威サーバーはこれだよ"| S6["Step 6: example.comの権威DNSサーバーに問い合わせ"]
    S6 -->|"www.example.comのIPは93.184.216.34だよ"| S7["Step 7: DNSリゾルバがキャッシュして、結果を返す"]
    S7 --> S8["Step 8: ブラウザがIPアドレス宛てに接続"]

各ステップの詳細

Step 1〜2: ローカルキャッシュの確認

まず、一番近い場所(自分のPC)に答えがないか確認します。

graph TD
    B["ブラウザ<br/>www.example.com のIPアドレスを知ってる?"]
    B -->|キャッシュにある| B1["すぐにIPアドレスを使う"]
    B -->|キャッシュにない| OS["OS"]
    OS --> H["/etc/hosts を確認"]
    H -->|あり| H1["それを使う"]
    H -->|なし| DC["OSのDNSキャッシュを確認"]
    DC -->|あり| DC1["それを使う"]
    DC -->|なし| R["DNSリゾルバに聞く"]

Step 3: DNSリゾルバへの問い合わせ

PCが設定されているDNSサーバー(通常はISPのDNSサーバー)に問い合わせます。

graph LR
    PC["あなたのPC"] -->|"www.example.com のIPは?"| DNS["DNSリゾルバ"]

DNSリゾルバのキャッシュにあればここで解決。なければ次のステップへ。

Step 4: ルートDNSサーバーへの問い合わせ

graph LR
    R["DNSリゾルバ"] -->|"www.example.com のIPは?"| ROOT["ルートDNSサーバー"]
    ROOT -->|".comはこのTLDサーバーに聞いて"| R

ルートサーバーは「.com」「.jp」「.org」 などの管理先を知っています。

Step 5: TLDサーバーへの問い合わせ

graph LR
    R["DNSリゾルバ"] -->|"www.example.com のIPは?"| TLD[".com TLDサーバー"]
    TLD -->|"example.comはこの権威サーバーに聞いて"| R

TLDサーバーは「example.com」の権威サーバーの場所を知っています。

Step 6: 権威DNSサーバーへの問い合わせ

graph LR
    R["DNSリゾルバ"] -->|"www.example.com のIPは?"| AUTH["example.com 権威サーバー"]
    AUTH -->|"93.184.216.34 だよ"| R

権威サーバーが最終的な「正解」を返します。

Step 7〜8: 結果の返却と接続

graph LR
    R["DNSリゾルバ"] --> CACHE["キャッシュに保存"]
    R -->|"93.184.216.34 だよ"| PC["あなたのPC"]
    BR["ブラウザ"] -->|"93.184.216.34 に接続"| WEB["Webページが表示される"]

再帰問い合わせと反復問い合わせ

再帰問い合わせ

PCがDNSリゾルバに「答えを見つけてきて」と丸投げする方式。

graph LR
    PC["PC"] -->|"www.example.com のIPを教えて"| R["リゾルバ"]
    R -->|"93.184.216.34 だよ"| PC

反復問い合わせ

DNSリゾルバがルート→TLD→権威サーバーに順番に聞いていく方式。

graph LR
    R1["リゾルバ"] -->|問い合わせ| ROOT["ルート"]
    ROOT -->|".com TLDに聞いて"| R2["リゾルバ"]
    R2 -->|問い合わせ| TLD[".com TLD"]
    TLD -->|"権威サーバーに聞いて"| R3["リゾルバ"]
    R3 -->|問い合わせ| AUTH["権威"]
    AUTH -->|"93.184.216.34 だよ"| R4["リゾルバ"]

通常、PCからリゾルバへは再帰問い合わせ、リゾルバから各DNSサーバーへは反復問い合わせが使われます。


名前解決にかかる時間

キャッシュがある場合

所要時間: 1ms 以下

キャッシュにヒットすれば、ほぼ瞬時に解決します。

キャッシュがない場合(フル解決)

所要時間: 20〜100ms程度

ルートサーバーから順番に問い合わせるため、少し時間がかかります。

実感

通常はキャッシュのおかげで遅延を感じることはありません。ただし、初めてアクセスするサイトや、キャッシュが切れた直後は少し遅く感じることがあります。


逆引き(Reverse DNS)

通常の名前解決は「名前→IPアドレス」ですが、逆に「IPアドレス→名前」を調べることもできます。

graph LR
    subgraph 正引き
        A1["www.example.com"] --> A2["93.184.216.34"]
    end
    subgraph 逆引き
        B1["93.184.216.34"] --> B2["www.example.com"]
    end

逆引きはメールサーバーの認証やログの分析で使われます。


まとめ

ポイント内容
名前解決ドメイン名からIPアドレスを調べること
解決の順序キャッシュ → リゾルバ → ルート → TLD → 権威
キャッシュ結果を一時保存して高速化
逆引きIPアドレスからドメイン名を調べること

チェックリスト

  • 名前解決の流れを順番に説明できる
  • DNSリゾルバの役割を理解した
  • ルート→TLD→権威サーバーの階層を理解した
  • キャッシュが名前解決を高速化することを理解した

次のステップへ

名前解決の仕組みが理解できましたね。

次のセクションでは、DNSレコードの種類 を学びます。Aレコード、CNAMEレコードなど、DNSにはさまざまな情報が登録されています。


推定読了時間: 30分