ネットワークはなぜつながるのか 「DNSの基本動作」


ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

DNSサーバーの基本動作
 DNSサーバーの基本動作は、クライアントから問い合わせメッセージを受け取り、その問い合わせメッセージには図1.10上部の表にある3つの情報が含まれます。DNSサーバーにはこの3つの情報に対応付けるようにして、クライアントに回答する情報を登録しておきます。その登録情報から問い合わせに該当するものを探して、クライアントに情報を返答するわけです。

図1.10

問い合わせ項目 説明
名前 サーバーやメール配信先(メール・アドレスの@以後の名前)などの名前
クラス 名前のクラスを表す。DNSの仕組みが考案されたときは、インターネット以外のネットワークでの利用も考えられていたためクラスが設けられていたが、今は、インターネット以外では使われていないので、クラスは常にインターネットを表すINという値をとる
タイプ 名前のタイプ(種類)を表す。そのタイプによってクライアントに回答する情報の内容が異なる。

A : 登録されている名前がサーバー名であることを表し、クライアントにはIPアドレスを回答する。

MX : 名前はメール配送先を表し、メール・サーバーのドメイン名、優先順位、IPアドレスなどを回答する。

例)

名前 クラス タイプ クライアントに回答する項目
www.lab.glasscom.com IN A 192.0.2.226
glasscom.com IN MX 10 mail.glasscom.com
mail.glasscom.com IN A 192.0.2.227

IPアドレスを問い合わせるときは、Aというタイプ(Aはaddressの略)を使いますが、メール配送先を問い合わせるときは「MX」(Mail eXchange)というタイプを使います。IPアドレスの情報はAというタイプで登録され、メール配送先はMXというタイプでDNSサーバー内部に登録されているからです。

名前とタイプによって調べる情報を指定し、それに従って登録情報から該当するものを探してクライアントに回答するのがDNSサーバーの基本動作です。

具体例を一つ。
tone@glasscom.comというメール・アドレスがあり、その配送先を調べる場合は、@より後にある名前がメール配送先となるので、その名前を問い合わせます。問い合わせメッセージの項目は次のようになるでしょう。
(a) 名前 = glasscom.com
(b) クラス = IN
(c) タイプ = MX
すると、DNSサーバーは、10 mail.glasscom.comという項目を回答します。タイプがMXの場合は、回答する項目には、メール・サーバーの優先順位とメール・サーバーの名前の2つがあります。それが10とmail.glasscom.comというわけです。また、MXの場合はこの解答だけでなく、mail.glasscom.comというメール・サーバーのIPアドレスも一緒に回答することになっています。表の3行目にIPアドレスを登録した行があるので、mail.glasscom.comという名前からその行を探し出して一緒に回答するわけです。

ここでは、AとMXという2つのタイプしか説明しませんでしたが、この他にもいろいろなタイプがあります。IPアドレスから名前を調べるときに情報を登録する「PTR」というタイプ、名前にニックネーム(エイリアス)を付けるための「CNAME」、DNSサーバーのIPアドレスを登録する「NS」、ドメインそのものの属性情報を登録する「SOA」などです。DNSサーバーの動作は問い合わせメッセージ中の名前とタイプに該当する情報を探し出して回答するという単純なものですが、タイプを使いわければいろいろな情報を登録して、問い合わせに回答することができることになります。
 なお、図1.10では表の形で登録情報を書いてありますが、実際には、これが設定ファイルなどに書き込まれています。そして、この表の1行分の情報に相当するものを「リソース・レコード」と呼びます。


DNSサーバーへ問い合わせるパケット
では、DNSサーバーに問い合わせメッセージを送る場面に戻りましょう。リゾルバがDNSサーバーに送る問い合わせメッセージの実体は、1つのパケットです。実際にはUDPという仕様に従って作られたパケットなのですが、ここでは1つのパケットだということだけ理解しておけば良いでしょう。そのパケットの中に図1.10の上にある表に記した項目が書いてあります。その中身はバイナリ・データなので詳しい事は省略しますが、DNSサーバーがそのパケットを受け取れば、サーバー名に対応するIPアドレスを必要としているのだということが分かるようになっています。
 この問い合わせのパケットがDNSサーバーに届くと、DNSサーバーはパケットの中に書いてある名前とタイプ(IPアドレスを調べるときのタイプはA)に該当するリソース・レコードを探し出し、そこに登録されている情報(IPアドレス)を応答メッセージに書き込み、クライアントに送り返します。
 そのパケットは、ネットワークを通ってクライアント側に届き、TCP/IPソフトを経由してリゾルバに渡され、リゾルバが中身を解読してそこからIPアドレスを取り出し、アプリケーションにIPアドレスを渡します。実際には、指定したメモリー領域にIPアドレスを格納します。
 実際のプログラムでは、そこにメモリー領域を表す名前が書いてあるでしょう。これでリゾルバの動作が終わり、制御がアプリケーションに戻ってきます。アプリケーションはメモリー領域に格納したIPアドレスを必要な時に取り出すことができますから、これでIPアドレスがアプリケーションに渡されたことになります。


DNSサーバーの担当範囲と階層構造
 上の説明では、問い合わせメッセージを受け取ったDNSサーバーに名前とIPアドレスが登録されている場合を想定ています。普通、DNSサーバーは社内のWebサーバーやメール・サーバーに登録しておきますから、Webサーバーが社内にあれば上のように動くでしょう。しかし、社外のサーバーまで全部登録するわけにはいきませんから、問い合わせた名前がDNSサーバーに登録されていない場合だってあります。その場合、DNSサーバーがどう動くのか説明しましょう。
 問い合わせメッセージの情報がDNSサーバーに登録されていない場合は、それが登録されているDNSサーバーを探し出し、そこに問い合わせを送ってIPアドレスを調べます。このとき、問い合わせた名前から登録されているDNSサーバーを探し出すのですが、そこがDNS全体の仕組のポイントとなります。
 DNSで扱う名前は、www.lab.glasscom.comというようにドットで区切って階層化されており、右に位置する名前が上位の階層を表すことになっています。この例では、comというドメインが上位にあり、その下位にglasscom、さらにその下にlabというドメインがあり、その中にwwwというコンピュータがあることを表しています。会社の事業部、部、課、といった階層化と同じように考えればよいでしょう。それを、下位の階層から順番に左から右に列挙するわけです。
 このように階層化したドメインの一つひとつがDNSサーバーの担当範囲を表す単位となります。つまり、glasscom.comやlab.glasscom.comというドメインの一つ一つがDNSサーバーの担当範囲を表す単位となるわけです。そして、ひとつ、あるいは、複数のドメインを1台のDNSサーバーが担当します。xx事業部を担当するDNSサーバー、xx部を担当するDNSサーバー、といった具合です。xx部とxx課の両方を担当する、というように複数のドメインを担当するDNSサーバーもあります。
 ただし、ひとつのドメインが最小の単位となるので、それを複数のDNSサーバーで分割して担当することはありません。一つのドメインを複数のDNSサーバーで分担したいときはドメイン分割します。ドメインを分割すると言うのは、そのドメインの下位に位置するドメイン(これそ「サブ・ドメイン」と呼びます)を複数作ることです。それで下位ドメインの数だけ分割できたことになります。そして、その下位ドメインの一つひとつをDNSサーバーに分担させます。そうやって、全世界で分担を広げていったのが今のドメインです。
 こうやって作ったドメインの中にWebサーバーやメール・サーバーを登録します。たとえば、www.lab.glasscom.comというWebサーバーはlab.glasscom.comというドメインに登録されていることになります。ですから、Webサーバーを登録したドメインDNSサーバーを探し出せれば、具体的には、そのIPアドレスがわかればその後は簡単です。そのDNSサーバーに問い合わせメッセージを送れば、答えが返ってきます。


■担当のDNSサーバーを探し、IPアドレスを取得
 ここでポイントとなるのは、Webサーバーが登録されているDNSサーバーを探し出す方法です。インターネットにはDNSサーバーが何百台もありますから、片っぱしから聞いて回るわけにはいきませんし、最寄のDNSサーバーにインターネットのDNSサーバーを全部登録しておくわけにもいきません。DNSサーバーを探さなければ、問い合わせメッセージを送ることができませんから、DNSの仕組みは成り立たなくなってしまいます。
 そこで考え出された方法が次のようなものです。まず、下位のドメインを担当するDNSサーバーを、すぐ上に位置するドメインDNSサーバーに登録します。そして、その上位のDNSサーバーをさらにその上位のDNSサーバーに登録する、というように順に登録していきます。つまり、lab.glasscom.comというドメインを担当するDNSサーバーをglasscom.comのDNSサーバーに登録し、glasscom.comのDNSサーバーをcomドメインDNSに登録すると言った具合です。
 こうして登録していくと、comやjpといったドメイン(これを「トップレベル・ドメイン」と呼びます)のDNSサーバーに下位のDNSサーバーを登録したところで終わりのように見えますが、実は、そうではなく、インターネットのドメインには、comやjpの上位にもう一つドメインがあります。それを「ルート・ドメイン」と呼びます。
 ル―ト・ドメインには、comやjpといったドメイン名がないので、普通にドメイン名を書くときはそれを省略しますが、ルート・ドメインを明示的に書く場合は、www.lab.glasscom.com.というように最後にピリオドを付け、このピリオドがルート・ドメインを表します。しかし、普通はそう書かないので、ルート・ドメインの存在に気付かないわけです。でも、ルート・ドメインは存在するので、そのDNSサーバーにcomやjpのDNSサーバーを登録します。
 そして、最後にルート・ドメインDNSサーバーをDNSサーバー全部に登録します。ルート・ドメインDNSサーバーは全世界で13台しかありませんし、滅多に変更されませんから、それを各DNSサーバーに登録してもそれほど手間ではありません。実際には、ルート・ドメインDNSサーバーに関する情報はDNSサーバー・ソフトと一緒に設定ファイルとして配布されていますから、DNSサーバー・ソフトをインストールすれば、自動的に登録が終わってしまうと言えます。
 ここまでがいわば準備段階です。DNSサーバーをインストールして設定するときに、ここまでの登録を済ませておきます。
 DNSサーバーを探すときは、DNSサーバー同士の登録を逆にたどります。そうすれば、DNSサーバーを階層の上から順番に調べることができ、目的のDNSサーバーにたどり着きます。たとえば、lab.glasscom.comのDNSサーバーに、www.nikeibp.co.jpというWebサーバーに関する問い合わせが届いたとしましょう。lab.glasscom.comのDNSサーバーにはルート・ドメインDNSサーバーが登録されていますから、そこに問い合わせればjpドメインDNSサーバーが登録されているはずですから、そこに問い合わせればjpドメインDNSサーバーの所在が分かります。そうしたら、次はjpのDNSサーバーに問い合わせを送ります。すると、その下のco.jpのDNSサーバーの所在が分かります。そうしたら、nikkeibp.co.jpのDNSサーバーにwww.nikkeibp.co.jpのIPアドレスの問い合わせを送ることができます。これでWebサーバーのIPアドレスが分かります。
 クライアントからの問い合わせを受けたDNSサーバーはこうやってIPアドレスを調べ、それをクライアントに返送します。これでクライアントはWebサーバーにアクセスできるようになります。


DNSサーバーはキャッシュ機能で素早く回答
 なお上の動作は基本となる動作を表したもので、現実のインターネットとは動きが異なる部分があります。現実のインターネットとは動きが異なる部分があります。現実のインターネットでは、jpドメインとco.jpドメインは同じサーバーが担当します。
 また、最上位ルート・ドメインから順にたどっていくという原則どおりに動かないこともあります。DNSサーバーは一度調べた名前をキャッシュに記録しておく機能があり、問い合わせた名前に該当する情報がキャッシュにあれば、その情報を回答するからです。すると、その位置から階層構造を下に向かって探すことができます。ルート・ドメインから探し始めるより、この方が手間が省けます。 また、問い合わせた名前がドメインに登録されていない場合には、名前が存在しないという回答が返ってきますが、それをキャッシュに保存することもあります。これで名前が存在しない場合にも素早く回答できます。
 このキャッシュの仕組みには注意点が一つあります。キャッシュに情報を保存した後、登録情報が変更される場合もあるので、キャッシュ中に保存した情報は正しいとは限らない、と言うことです。そのため、DNSサーバーに登録する情報には有効期限を設定します。そして、キャッシュに保存したデータの有効期限が過ぎたら、そのデータはキャッシュから削除します。さらに、問い合わせに回答するとき、情報がキャッシュに保存されたものか、登録元のDNSサーバーからの回答のなかを知らせることになっています。


ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識