ネットワークの教科書NETWORK

第5章 アプリケーション層5-1コース全体 19回中16本目

入門読了 約8分

DNS ― 名前をIPアドレスに変える

ブラウザにwww.example.comと打ち込むだけでサーバにたどり着けるのはなぜか。ルート→TLD→権威の順に問い合わせる名前解決の流れと、反復・再帰問い合わせの違いを扱います。

結論

通信で使われるのはIPアドレス。名前から住所を引くのがDNS

IPアドレスは住所です。しかし人間が覚えて打ち込むには、www.example.com のような名前の方が扱いやすいのが現実です。この名前(ドメイン名)から 実際の通信で使う住所(IPアドレス)を引く仕組みが DNS(Domain Name System)です。

この記事の核心DNSの実体は、世界中に分散した住所録です。PCは近くのキャッシュDNSサーバに「代わりに丸ごと調べて」と 頼み(再帰問い合わせ)、そのキャッシュDNSサーバがルート→TLD→権威の順に同じ質問を投げ直して 答えにたどり着きます(反復問い合わせ)。
しくみ

名前解決の流れ:キャッシュ → ルート → TLD → 権威

www.example.com のIPアドレスを調べる例で、問い合わせの順番を追います。

  1. 1

    PCがキャッシュDNSサーバに聞く

    PC(スタブリゾルバ)は、まず自分の設定されたキャッシュDNSサーバに丸ごと問い合わせる。

  2. 2

    キャッシュになければルートDNSサーバへ

    過去に調べた答えが残っていなければ、キャッシュDNSサーバはルートDNSサーバに問い合わせる。

  3. 3

    ルートは「.comはここ」とTLDサーバを教える

    ルートDNSサーバは最終的な答えを知らないので、.comを管理するTLDサーバの場所だけを教える(委任)。

  4. 4

    TLDサーバは「example.comはここ」と権威DNSサーバを教える

    同じ質問をTLDサーバに投げ直すと、example.comを管理する権威DNSサーバの場所を教えてくれる。

  5. 5

    権威DNSサーバがIPアドレスを答える

    最後に権威DNSサーバへ問い合わせると、203.0.113.10のような最終的なIPアドレスが返る。

① 再帰問い合わせ(1往復)② 反復問い合わせ(上から順に3往復)PC(スタブリゾルバ)キャッシュDNSサーバ(フルサービスリゾルバ)www.example.comのIPを教えて203.0.113.10ですルートDNSサーバ(すべての起点)www.example.comのIPは?.comの権威はTLDサーバへTLDサーバ(.com)(同じ質問をそのまま)example.comの権威は権威サーバへ権威DNSサーバ(example.com)(同じ質問をそのまま)203.0.113.10です
点線は問い合わせ、実線は回答。PCとキャッシュDNSサーバの間は「まるごと調べて」と頼む再帰問い合わせの1往復だけだが、 キャッシュDNSサーバとルート・TLD・権威の各サーバとの間は同じ質問を投げ直す反復問い合わせで、 知らないサーバは次の行き先だけを教える(委任)ため3往復かかる。

キャッシュDNSサーバが代わりに何往復もして答えを持ち帰り、PCには最終的なIPアドレス1つだけが返ります。 PC自身がルートやTLDに直接問い合わせることはありません。

用語

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

上の図に出てきた2種類の問い合わせは、頼み方が違います。再帰問い合わせは「知らなくてもいいので、 とにかく代わりに調べて最終的な答えだけ返して」と頼む問い合わせです。PCがキャッシュDNSサーバに対して行うのはこちらで、 キャッシュDNSサーバは自分で最後まで調べ切る責任を負います。

一方反復問い合わせは「知っていれば答えて、知らなければ次に聞くべき場所を教えて」と頼む問い合わせです。 キャッシュDNSサーバがルート・TLD・権威の各サーバに対して行うのはこちらで、ルートDNSサーバやTLDサーバは 「自分は知らないが、この先のサーバなら知っている」という委任情報だけを返します。調べ切る責任はキャッシュDNSサーバ側に残ったままです。

誰が誰に問い合わせるか種類答え方
PC → キャッシュDNSサーバ再帰問い合わせ最終的な答えだけを返す(1往復)
キャッシュDNSサーバ → ルート・TLD・権威反復問い合わせ知らなければ次の行き先だけを教える(複数往復)
混同しやすいですが、キャッシュDNSサーバは「PCに対しては再帰問い合わせを引き受ける側」で、 「ルート・TLD・権威に対しては反復問い合わせを行う側」という、2つの役割を同時に持っています。
効率化

キャッシュとTTL ― 毎回ルートから聞かない理由

世界中のアクセスのたびにルートDNSサーバまで問い合わせていては、ルートDNSサーバがすぐに音を上げてしまいます。 そこでDNSの応答にはTTL(Time To Live、生存時間。単位は秒)が付いています。

キャッシュDNSサーバは一度得た答えをTTLの間だけ保存し、同じ質問が来てもルートまで聞きに行かず、保存した答えをそのまま返します。 TTLが切れると答えを破棄し、次に同じ質問が来たときだけ改めてルートから調べ直します。

TTLは、答えの新しさ(IPアドレスが変わったときにどれだけ早く反映されるか)と、 問い合わせの効率(ルートやTLDへの負荷)のバランスを取るための値です。短くすれば変更がすぐ反映されますが問い合わせは増え、 長くすれば問い合わせは減りますが変更の反映が遅れます。
中身

主要なレコードの種類

DNSサーバが持っている情報は「レコード」という単位で管理され、いくつかの種類があります。 よく出てくる5種類だけ押さえておけば十分です。

種別何を返すか
AIPv4アドレス
AAAAIPv6アドレス
CNAME別のドメイン名への別名(エイリアス)
MXメールを受け取るサーバの宛先
NSそのドメインを管理する権威DNSサーバ

ここまでの例で使ってきた「名前からIPアドレスを引く」動きはAレコード(IPv4)やAAAAレコード(IPv6)の話です。 CNAMEは、あるドメイン名を別のドメイン名に付け替えるための別名で、最終的にはその先のドメイン名がAレコードで解決されます。

通信

使うポートとプロトコル

DNSの問い合わせと応答は、通常UDPの53番ポートを使います。UDPは1回のやり取りで完結する軽い通信に向いており、 多くのDNS問い合わせはこれで十分です。ただし、応答のデータサイズが大きくなる場合や、 サーバ間で大量のデータをやり取りする場合は、信頼性の高いTCPの53番ポートに切り替わります。

なお、通信内容の暗号化や改ざん防止を目的としたDNSSECDoH(DNS over HTTPS)・DoT(DNS over TLS)といった 拡張もありますが、ここでは名前だけ押さえておけば十分です。
練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1キャッシュDNSサーバが、自分のキャッシュに答えを持っていないとき、最初に問い合わせるのはどのサーバ?
Q2再帰問い合わせの説明として正しいものは?
Q3ルートDNSサーバに「www.example.comのIPは?」と問い合わせたとき、ルートDNSサーバが返す内容として正しいものは?
Q4キャッシュとTTLの説明として正しいものは?
Q5レコード種別の組み合わせとして正しいものは?
次の回

コースを読み進める