Lesson1でDNSが果たす役割を説明した。続くLesson2では,アプリケーションがDNSサーバーにドメイン名を問い合わせ,対応するIPアドレスを教えてもらうまでの処理をもう少し掘り下げて見てみよう。

リゾルバが問い合わせ役を担当

 これまでWebブラウザがDNSサーバーにIPアドレスを問い合わせると説明してきたが,正確に言うと,IPアドレスを問い合わせるのはWebブラウザなどのアプリケーションに含まれる「リゾルバ」と呼ばれるプログラムである。

 Lesson1で説明した「www.aaa.jp」というWebサイトにアクセスする場合を例に,リゾルバの動きに注目して見てみよう(図2)。

図2●DNSはリゾルバとDNSサーバーの連係プレイで成り立つ
図2●DNSはリゾルバとDNSサーバーの連係プレイで成り立つ
リゾルバがドメイン名をDNSサーバーに問い合わせると,DNSサーバーが自分の持つ情報(ゾーン情報)から対応するIPアドレスを調べてくれる。 [画像のクリックで拡大表示]

 ユーザーがWebブラウザにURLを入力すると,Webブラウザはwww.aaa.jpというWebサーバーにアクセスするということは理解できるが,WebサーバーのIPアドレスがわからない。そのため,Webブラウザは自分の内部に組み込まれているリゾルバを呼び出し,IPアドレスを調べるように指令する。

 Webブラウザに命じられたリゾルバはDNSサーバーに問い合わせメッセージを送る((1))。問い合わせメッセージとは「www.aaa.jpに対応するIPアドレスは何ですか」というメッセージをIPパケットに詰めたものだ。これにDNSサーバーあてのIPヘッダーを付けて送り出す。

DNSサーバーが調べて応答

 DNSサーバーは,問い合わせメッセージを受け取るとこれを開封して中身を確認する。そして,自分が持っている「ゾーン情報」を調べて答えを探す。ゾーン情報とは,ドメイン名とそれに対応するIPアドレスなどの登録情報を記した対応表だ。IPアドレス以外に,ドメイン名に対応するDNSサーバーの名前やメール・サーバーの名前を記している場合もある。

 この対応表を見て,ドメイン名と対応するIPアドレスがわかったら,今度はDNSサーバーがリゾルバに応答メッセージを送信する。応答メッセージの内容は「www.aaa.jpに対応するIPアドレスは192.168.0.1ですよ」というものである((2))。

 リゾルバは応答メッセージを受け取ると,パケットを開いて内容を確認し,教えてもらったIPアドレスをWebブラウザに伝える。こうしてWebブラウザはWebサイトにアクセスできるようになる((3))。

 なお,このような名前解決のプロセスでは,リゾルバとDNSサーバーはUDPで通信するのが一般的だ。それは,DNSの問い合わせと応答でやりとりするデータがたいてい1パケットに収まるからである。UDPの通信はTCPに比べ,信頼性は低いが処理が軽いという特徴がある。一定時間に渡って複数のパケットをやりとりする場合はTCPの方が確実だが,小さいデータを短時間でやりとりするならUDPの方が効率的なのだ。

実際は複数のDNSサーバーが連係

 ここまでは1台のDNSサーバーで名前解決をする場合を説明したが,実際のインターネットには多数のDNSサーバーが点在し,相互に連係してDNSという巨大なシステムを構成している。インターネットには膨大な数のコンピュータがつながっているので,1台のDNSサーバーですべてのIPアドレスを管理できない。そのため,複数のDNSサーバーがドメイン名を分散管理しているのだ。各DNSサーバーは,リゾルバから問い合わせを受けると自分のゾーン情報を調べるが,そこに答えがないときは,別のDNSサーバーに問い合わせて答えを探す。