数字の住所と文字の名前を分けて扱う
インターネット上の機器どうしが通信するとき、宛先の識別にはIPアドレスが使われます。しかし、利用者がWebサイトごとの数値を覚え、移転のたびに覚え直すのは不便です。そこで、利用者は「example.jp」のようなドメイン名を指定し、通信の直前にDNS(Domain Name System)で必要なIPアドレスを調べます。この対応を調べる処理を「名前解決」と呼びます。
ドメイン名とIPアドレスは、単純な一対一の置き換えではありません。一つのドメイン名に複数のIPアドレスを対応させ、アクセスを複数のサーバへ分散する場合があります。反対に、一つのIPアドレスで複数のドメイン名のWebサイトを提供することもできます。ドメイン名は人が指定する名前、IPアドレスは通信先を示す情報として、それぞれ別の役割を持っています。
また、URL全体がドメイン名なのではありません。たとえば「https://www.example.jp/news/」では、「https」は通信方法を示す部分、「www.example.jp」がドメイン名、「/news/」がサーバ内の場所を示す部分です。ドメイン名だけを取り出して考えると、DNSが受け持つ範囲が分かりやすくなります。
「jp」から枝分かれする名前の階層
ドメイン名は、ピリオドで区切られた階層構造になっています。「www.example.jp」は、右から「jp」「example」「www」という順に、大きな範囲から細かな範囲へたどれます。「jp」のような右端の部分をトップレベルドメイン、その左の「example.jp」を第2レベルドメインと呼びます。「www」は、そのドメイン内で付けられたホスト名などとして使われる部分です。
DNSが世界規模で働けるのは、この階層ごとに管理を分担できるためです。すべての名前とIPアドレスを一台のサーバに収めるのではなく、上位の階層は次に問い合わせる先を示し、各ドメインの情報はその範囲を担当する権威DNSサーバが管理します。この「担当範囲を委任する」構造により、組織は自分のドメイン内の名前を管理しながら、インターネット全体では重複しない名前の体系を保てます。
ブラウザの入力から名前解決までを追う
ブラウザにドメイン名を入力してからWebサーバへ接続するまでには、複数の役割が連携します。おおまかな流れは次のとおりです。
- ブラウザやOSが、以前に調べた結果を一時保存していないか確認します。
- 保存された結果がなければ、端末は再帰リゾルバと呼ばれるDNSサーバへ問い合わせます。
- 再帰リゾルバは、必要に応じてルート、トップレベルドメイン、対象ドメインの権威DNSサーバへ順に問い合わせ、答えを探します。
- 得られたIPアドレスが端末へ返され、ブラウザはその宛先のWebサーバとの通信を始めます。
端末から見れば、DNSサーバへ質問して回答を受け取るクライアントサーバモデルです。一方、その回答を用いて始まるWeb通信はDNSとは別の処理であり、HTTPなどのプロトコルに従います。DNSはWebページそのものを運ぶのではなく、まず通信相手を見つける役目を果たします。
AレコードだけではないDNSの回答
DNSが管理する情報の単位を「リソースレコード」と呼び、目的に応じた種類があります。Aレコードはドメイン名に対応するIPv4アドレス、AAAAレコードはIPv6アドレスを示します。MXレコードはそのドメイン宛ての電子メールを受け取るサーバ、NSレコードはその範囲を担当するDNSサーバを示します。CNAMEレコードは、ある名前を別の正式な名前の別名として扱うために使われます。
つまり、DNSを「ドメイン名をIPアドレスに変換する仕組み」と説明するのは入口としては便利ですが、DNSが扱う情報はIPアドレスだけではありません。Web閲覧だけでなく、メールの配送先を選ぶ処理や、どのDNSサーバが情報を管理しているかの確認にも同じ仕組みが関わっています。
DNSの問い合わせや回答は、ネットワーク上ではパケットとして運ばれます。誤ったDNS情報を信じると、本物に似せた別の接続先へ誘導されるおそれがあります。DNSSECは、DNSの回答に付けられたデジタル署名を検証し、情報が正当な管理元から来たことや途中で改変されていないことを確認するための仕組みです。ただし、署名の検証は通信内容を秘密にする暗号化とは目的が異なります。
キャッシュが速さと反映待ちを生む
同じ名前を調べるたびに階層の上から問い合わせると、回答までの時間もDNSサーバの負担も増えます。そのため、ブラウザ、OS、再帰リゾルバなどは、名前解決の結果を一定時間キャッシュに保存します。保存済みの有効な回答を再利用できれば、問い合わせ回数が減り、接続を早く始められます。
各DNSレコードには、キャッシュしてよい期間を示すTTLが設定されます。管理者がレコードを書き換えても、以前の回答がTTLの期間内で残っている場所では、すぐには新しい情報へ切り替わらないことがあります。ドメインの設定変更が場所によって異なる時刻に見えるのは、情報が気まぐれに伝わるからではなく、各所のキャッシュがそれぞれ有効期限を迎えるためです。速さを得るための仕組みが、変更時には反映待ちの原因にもなります。
ドメイン名の末尾には見えない「.」がある
DNSの階層の最上位には「ルート」があります。ドメイン名を省略せずに表す完全修飾ドメイン名では、このルートを末尾のピリオドで示せます。そのため「www.example.jp.」の最後の「.」には、そこがDNS階層の根まで含めた名前である、という意味があります。
通常のWebブラウザでは末尾のピリオドを省いた表記を使うため、目にする機会は多くありません。それでも、DNSサーバの設定や名前を厳密に区別する場面では重要です。右端にルートがあり、そこからトップレベルドメイン、さらに下位のドメインへ枝分かれする構造を意識すると、DNSが「分散した巨大な電話帳」ではなく、委任によってつながる名前の木であることが見えてきます。