第5章 アプリケーション層|5-1|コース全体 19回中16本目
DNS ― 名前をIPアドレスに変える
ブラウザにwww.example.comと打ち込むだけでサーバにたどり着けるのはなぜか。ルート→TLD→権威の順に問い合わせる名前解決の流れと、反復・再帰問い合わせの違いを扱います。
通信で使われるのはIPアドレス。名前から住所を引くのがDNS
IPアドレスは住所です。しかし人間が覚えて打ち込むには、www.example.com のような名前の方が扱いやすいのが現実です。この名前(ドメイン名)から 実際の通信で使う住所(IPアドレス)を引く仕組みが DNS(Domain Name System)です。
名前解決の流れ:キャッシュ → ルート → TLD → 権威
www.example.com のIPアドレスを調べる例で、問い合わせの順番を追います。
- 1
PCがキャッシュDNSサーバに聞く
PC(スタブリゾルバ)は、まず自分の設定されたキャッシュDNSサーバに丸ごと問い合わせる。
- 2
キャッシュになければルートDNSサーバへ
過去に調べた答えが残っていなければ、キャッシュDNSサーバはルートDNSサーバに問い合わせる。
- 3
ルートは「.comはここ」とTLDサーバを教える
ルートDNSサーバは最終的な答えを知らないので、.comを管理するTLDサーバの場所だけを教える(委任)。
- 4
TLDサーバは「example.comはここ」と権威DNSサーバを教える
同じ質問をTLDサーバに投げ直すと、example.comを管理する権威DNSサーバの場所を教えてくれる。
- 5
権威DNSサーバがIPアドレスを答える
最後に権威DNSサーバへ問い合わせると、203.0.113.10のような最終的なIPアドレスが返る。
キャッシュDNSサーバが代わりに何往復もして答えを持ち帰り、PCには最終的なIPアドレス1つだけが返ります。 PC自身がルートやTLDに直接問い合わせることはありません。
反復問い合わせと再帰問い合わせの違い
上の図に出てきた2種類の問い合わせは、頼み方が違います。再帰問い合わせは「知らなくてもいいので、 とにかく代わりに調べて最終的な答えだけ返して」と頼む問い合わせです。PCがキャッシュDNSサーバに対して行うのはこちらで、 キャッシュDNSサーバは自分で最後まで調べ切る責任を負います。
一方反復問い合わせは「知っていれば答えて、知らなければ次に聞くべき場所を教えて」と頼む問い合わせです。 キャッシュDNSサーバがルート・TLD・権威の各サーバに対して行うのはこちらで、ルートDNSサーバやTLDサーバは 「自分は知らないが、この先のサーバなら知っている」という委任情報だけを返します。調べ切る責任はキャッシュDNSサーバ側に残ったままです。
| 誰が誰に問い合わせるか | 種類 | 答え方 |
|---|---|---|
| PC → キャッシュDNSサーバ | 再帰問い合わせ | 最終的な答えだけを返す(1往復) |
| キャッシュDNSサーバ → ルート・TLD・権威 | 反復問い合わせ | 知らなければ次の行き先だけを教える(複数往復) |
キャッシュとTTL ― 毎回ルートから聞かない理由
世界中のアクセスのたびにルートDNSサーバまで問い合わせていては、ルートDNSサーバがすぐに音を上げてしまいます。 そこでDNSの応答にはTTL(Time To Live、生存時間。単位は秒)が付いています。
キャッシュDNSサーバは一度得た答えをTTLの間だけ保存し、同じ質問が来てもルートまで聞きに行かず、保存した答えをそのまま返します。 TTLが切れると答えを破棄し、次に同じ質問が来たときだけ改めてルートから調べ直します。
主要なレコードの種類
DNSサーバが持っている情報は「レコード」という単位で管理され、いくつかの種類があります。 よく出てくる5種類だけ押さえておけば十分です。
| 種別 | 何を返すか |
|---|---|
| A | IPv4アドレス |
| AAAA | IPv6アドレス |
| CNAME | 別のドメイン名への別名(エイリアス) |
| MX | メールを受け取るサーバの宛先 |
| NS | そのドメインを管理する権威DNSサーバ |
ここまでの例で使ってきた「名前からIPアドレスを引く」動きはAレコード(IPv4)やAAAAレコード(IPv6)の話です。 CNAMEは、あるドメイン名を別のドメイン名に付け替えるための別名で、最終的にはその先のドメイン名がAレコードで解決されます。
使うポートとプロトコル
DNSの問い合わせと応答は、通常UDPの53番ポートを使います。UDPは1回のやり取りで完結する軽い通信に向いており、 多くのDNS問い合わせはこれで十分です。ただし、応答のデータサイズが大きくなる場合や、 サーバ間で大量のデータをやり取りする場合は、信頼性の高いTCPの53番ポートに切り替わります。
練習問題(全5問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:ルートDNSサーバ
まずルートDNSサーバに問い合わせ、そこから「.comの権威はこのTLDサーバ」「example.comの権威はこの権威DNSサーバ」と、上から順に絞り込んでいきます。
正解:「知らなくてもいいので、とにかく代わりに調べて最終的な答えだけ返して」と頼む問い合わせ
再帰問い合わせは、相手に最後まで調べさせて最終的な答えだけをもらう問い合わせ方です。PC(スタブリゾルバ)がキャッシュDNSサーバに対して行うのがこれにあたります。
正解:.comを管理しているTLDサーバの情報(委任先)
ルートDNSサーバはwww.example.comの答えそのものは知りません。「.comの管理はこのTLDサーバです」という委任情報だけを返し、キャッシュDNSサーバはそこへ改めて問い合わせます。
正解:TTLは応答に付いてくる有効期間で、切れるまではキャッシュを再利用しルートから聞き直さない
DNSの応答にはTTL(生存時間、単位は秒)が付いており、キャッシュDNSサーバはその間、同じ質問が来てもルートから聞き直さず保存した答えを返します。期限が切れると、次の問い合わせで改めて調べ直します。
正解:CNAME ― ドメイン名の別名
Aレコードは IPv4アドレス、AAAAレコードは IPv6アドレス、MXレコードはメールサーバの宛先、NSレコードはそのドメインを管理する権威DNSサーバを返します。CNAMEだけが「ドメイン名の別名」で正しい組み合わせです。