ストーリー
名前解決(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分