DNSの根本を理解するポイントは「資源レコードを基本とする対応表を持つ」ということと,「ツリー構造で表されるDNSサーバー同士が連携する」ということの2点だ。

 Part2では,この二つのポイントを中心に,DNSの根本のしくみを確認していこう。

構成要素はリゾルバとDNSサーバー

 DNSはインターネットに多数のサーバー・マシンが分散して,ドメイン名とIPアドレスなどの対応関係を管理する巨大システムである。ただ,数が多いだけで,その構成要素は二つしかない。それは,パソコン上で動く「リゾルバ」と,インターネット上に公開されている「DNSサーバー」である。どちらも,その実態はコンピュータ上で動くソフトウエアだ*1

 話を単純にするために,リゾルバが動いているパソコン1台と,DNSサーバー1台があるケースを想定しよう。こうした環境で,パソコンのユーザーがWebブラウザのアドレス欄に「http://www.example.jp/」などと打ち込むと,Webブラウザはドメイン名に対応するIPアドレスの調査をリゾルバに依頼する。

 そうすると,リゾルバは「ドメイン名がwww.example.jpのコンピュータに割り当てられているIPアドレスを教えてください」といったような検索要求をDNSサーバーへ送る(図2-1(1))。

図2-1●DNSサーバーからさまざまな情報を引き出す
図2-1●DNSサーバーからさまざまな情報を引き出す
DNSサーバーは,資源レコードという単位でドメイン名に対応するいろいろなデータを持っており,クライアントのリゾルバから要求された情報を返す。
[画像のクリックで拡大表示]

情報はDNSサーバーが持つ

 一方のDNSサーバーは,ドメイン名とIPアドレスなどのデータを対応づけた対応表(ゾーン情報)を持っている。この対応表を構成する1行は「資源レコード」と呼ばれる。

 資源レコードは,ドメイン名に何らかのデータを対応づけた情報で,データの種類によって「タイプ」が決まっている。IPアドレスが書かれているタイプは「A」(AはAddressの意味)である。一般にドメイン名とIPアドレスを対応づけた1行は「Aレコード」と呼ばれる。このほか,データ部分にDNSサーバー名を記したNSレコードや,メール・サーバー名を記したMXレコードなどもある。つまりDNSサーバーには,ドメイン名に対してIPアドレス以外の情報も登録できる。

 このようなDNSサーバーが,リゾルバから検索要求を受け取ると,ゾーン情報を検索し,対応するレコード(図2-1ではAレコード)を探し出す(図2-1(2))。そして,その検索結果をリゾルバに返信する((3))。こうした一連の処理は,「名前解決」と呼ばれる。

 ちなみに,リゾルバがAレコード以外のタイプを指定して検索要求をDNSサーバーへ送ると,DNSサーバーはそのタイプと一致する情報を探し出す。例えば,「ドメイン名がexample.jpに対応するメール・サーバー名(MXレコード)を教えて下さい」というような検索要求を受け取ったら,自身のゾーン情報を検索して「example.jpに対応するMXレコードはmail.example.jpです」と返答する(図2-1参照)。

多数のDNSサーバーが連携

 実際のインターネットでは,多数のDNSサーバーが連携するようになっている。それは,それぞれのドメイン名ごとにDNSサーバーを設け,階層をなしている。例えば,example.co.jpドメインを管理するDNSサーバーは,www.example.co.jpやmail.example. co.jpといったドメイン名とIPアドレスの対応関係だけを管理する(図2-2)。

図2-2●DNS全体は複数のサーバーからなるツリー構造になっている
図2-2●DNS全体は複数のサーバーからなるツリー構造になっている
DNSの全体像は,ルート・サーバーを頂点にしたツリー構造になっている。こうして,世界規模の分散処理を実現している。
[画像のクリックで拡大表示]

 こうすれば,個々のDNSサーバーは自分が管理する範囲(ゾーン)が明確に決まる。コンピュータにIPアドレスを割り当て直したためにドメイン名とIPアドレスの対応関係(Aレコード)が変わったりしても,その情報を変更する必要があるのは,そのAレコードを管理しているDNSサーバーだけで済む。

 一方,その上位のco.jpドメインを管理するDNSサーバーには,配下のexample.co.jpやnikkeibp.co.jpのようなドメイン名を管理しているDNSサーバーのありかが登録されている。

 さらに,その上位にはjpドメインを管理するDNSサーバーがある。そして最上位に位置するのが,jpやcom,netなどのドメインを管理するDNSサーバーのありかを登録しているルートDNSサーバーである。