大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

DNS 名前解決

DNS は www.example.com のようなホスト名から IP アドレスを得る。本課の冷キャッシュ例は再帰リゾルバーが根から下へ進み、根と TLD が参照先を返し、example.com の権威サーバーが目的の A を返す。

受付の案内をたどって事務所へ行くようなものだ。途中は本人を知らなくても次の管理者を知り、最後に答えがある。リゾルバーは案内も保存し、後続の同領域の問い合わせを短縮する。

仕組み

階層は右から読む。根が com を委任し、com が example.com を委任する。www はこの区域内の名前で、自動的に別の委任ゾーンではない。親は委任用の NS などを持ち、子が自分のデータを管理するので、通常のホスト変更を根へ集中させない。

端末の stub resolver は recursive resolver へ最終回答かエラーを求める。本課は一問一答で、再帰側が代わりに反復問い合わせを行う。答えられなければより具体的な管理者を聞き、stub は各段へ自分で行かない。

画面は権威 A、権威 NXDOMAIN、NS referral の三形を扱う。実 DNS には CNAME、NODATA、SERVFAIL などもあり、キャッシュ側も回答できる。根と TLD は自分のデータには権威を持ち、必ず referral だけという意味ではない。

リゾルバーは検証とキャッシュ規則に従い、TTL 付きの回答と委任を保存する。com の NS は同じリゾルバーを共有する他の .com 要求にも再利用できる。

ステップ実行

既定は冷キャッシュの www.example.com で、8 メッセージを数える。

  1. キャッシュは空、階層は未活動。
  2. (root)→com.→example.com.→www.example.com を示す。前三つは区域、最後はホスト名。
  3. stub が再帰 www.example.com A を送る。
  4. cache.best_ns(name) に委任がなく、モデル ROOT を使う。実反復リゾルバーは root hints で始められ、転送型は上流へ任せる場合がある。
  5. 根に完全な www.example.com を聞く。
  6. com. NS a.gtld-servers.net の委任が返る。目的アドレスはまだない。
  7. referral を受ける。stub の問いを含め三メッセージで、A はなくても次の管理者を得た。
  8. 委任を 2 日 TTL で保存する。有効かつ保持中なら後の .com は根の往復を省ける。
  9. a.gtld-servers.net に同じ完全な問いを送る。
  10. example.com. NS a.iana-servers.net が返る。
  11. 二つ目の referral を受け、まだ目的 A はない。
  12. その委任を保存する。
  13. example.com の権威へ聞く。
  14. モデル回答 www.example.com A 93.184.216.34 を返す。
  15. リゾルバーへ届き、本例の反復を終える。
  16. A を TTL とともに保存する。
  17. stub へ住所を返す。stub 自身は一往復だけ。
  18. 8 メッセージで終了。答えの TTL は一時間で、その間の同じ要求は二メッセージになる。

上流三往復で六、stub 二つで八だ。IP と TTL は固定教材値。93.184.216.34 は example.com の歴史的アドレスで、現在値として頼らない。

dig +trace www.example.com は本機から反復を示し、通常 AUTHORITY の NS と最終 ANSWER を見られる。ただし実委任、別名、追加解決で固定トレースとは違い得る。

キャッシュの効果

Warm TLD は com NS a.gtld-servers.net を持つので、cache.best_ns(name) or ROOT が com を選び、根は活動しない。上流二往復と stub で六メッセージ。

Warm answer は有効な A を持ち、resolve が直接返して階層サーバーを一つも呼ばず二メッセージ。実ヒット率は要求分布、TTL、方針によるため、冷問い合わせの八つだけで不具合とは診断できない。

委任は名前空間の管理を分け、キャッシュは案内を複数要求で共有する。全ホストの住所を根に置けば、全更新が集中してこの分担を失う。

境界ケース

  • missing.example.com の NXDOMAIN はこの冷例で全階層を進む。根と com の委任は存在し、example.com の権威が名前の不在を返すので、成功と同じ八メッセージ。他名はより上で失敗したり否定キャッシュで終わったりする。
  • 否定キャッシュの期限は応答 SOA に関する TTL 規則から決まる。綴り間違いの反復が毎回全階層を打つ必要はない。
  • referral は答えのキャッシュではない。Warm TLD はまだ上流二往復を要する。
  • 本課は TTL 期限で行を捨て、その部分を取り直す。移行前の TTL 短縮は先に実施し、既存キャッシュは旧残り期限を使う。短い TTL は要求量を増やす。実装には早期退去や明示的な stale 提供方針もある。
  • 実ゾーンは通常複数 NS を持ち、選択・再送し、UDP 切詰めなどで TCP へ戻る。本課は省く。

よくある間違い

  • 根が com へ転送すると思う。referral を返し、次の対話はリゾルバーが始める。
  • 再帰と反復を混同する。stub は最終結果を委託し、再帰サービスは内部で反復するか上流へ転送できる。
  • 毎段に完全名を送ることを全実装の必須規則にする。本図はそうするが、QNAME minimization は各段に必要な名前部分だけを出す。
  • NS referral を目的アドレスの答えとする。NS は次サーバーで、追加の glue A/AAAA も通常そのサーバーの住所だ。
  • NXDOMAIN が必ず同じ深さから返ると思う。不在の管理境界と否定キャッシュで変わる。
  • キャッシュ、別名、DNSSEC、再送を無視し、毎回八つと数える。

モデルの範囲

一区域一 NS、固定記録と TTL。UDP 再送、TCP フォールバック、EDNS(0)、DNSSEC 検証、CNAME、anycast の複数実体を省く。

実 referral は ADDITIONAL に nameserver の glue を持てる。委任区域内の NS には、親が必要な利用可能 glue を供給して循環依存を避ける。RFC 9471を参照。区域外 NS のアドレスがキャッシュや追加情報になければ別の名前解決が必要で、その入れ子も描かない。目的 A がないことと、パケット内に住所が一切ないことは違う。

基礎は RFC 1034、1035、用語は RFC 8499 を置き換えた RFC 9499を参照する。