next up previous contents
Next: 5.2 IPv6とDNS Up: 5. DNS Previous: 5. DNS

5.1 DNSの仕組み

DNS以前の古代のネットワークでは全てのホスト名とIPアドレスの対応は HOSTS.TXTで相互に配布し、全てのホスト情報を全てのサーバが持って いた。これはネットワークが少し大きくなるだけで直に破綻を来し、DNS の登場が要請された。DNSを理解する上で基本となるのは、巨大な データをより少なく所有し、より少ないトラフィックでその情報を交換する 柔軟なシステムであるという点である。つまり、要請としては、一つのサーバ に世界中のホストのデータを保持することは容量の点でも、トラフィック( 及びトランザクション)の面でも、さらには柔軟性の面でも明らかに不経済 であるが故に、いかにして分散させるかということを意味する。当然、 分散した場合にはそのトラフィックを最小化させる必要もある。こうした 観点でDNSを捉え、その機能を理解することが重要なのである。

DNSでは、全ての名前をファイルシステムのようにして管理する。 ファイルシステムでは、名前は、

    /home/net/staff/kanayama
のように左から / をセパレータとして一意に決まる。同時に、 最初のセパレータ/はツリー構造の出発点であるルートの 意味も持つ。一方、DNSでは右から出発する。
    s01.wakhok.ac.jp.
は、jp,ac,wakhok,s01の順に より名前構造としては深い名前へと並び、ディレクトリ構造における ルート/の役割は、一番右の .が持ち、.は 同時にセパレータとしての役割も持っている。ディレクトリに相当する jpwakhokという名前はドメインと呼ばれる。各 ドメインはより下位のドメインを含む(例えば、jpドメインは acドメインを含む)。しかしながら、ドメインのサーバは下位の 全てのドメインのデータを持つわけではなく、下位のドメインの情報を 掌握するサーバのデータのみを持ち、そのドメイン内部のデータは そのサーバが持つ。このように、ドメインは下位のドメインの情報を 最小化して持つので、ドメインという言葉に対して、実際にドメインの サーバが管理する情報範囲をゾーンと呼ぶ。従って、各ドメインの 管理者が管理すべき情報はゾーンについての情報であることになるが、 少なくとも下位のサーバについての情報は含まれなければならない。 このことから、DNSサーバは任意に立ち上げても意味を持たず、 上部のゾーンへの登録が必要であることが分かる(勿論、勝手に立ち上げ ても良いことを意味しない)。

図 5.1: DNSのツリー構造
\begin{figure}\begin{center}
\epsfile{file=dns,scale=0.7}
\end{center}
\end{figure}

DNSにおける名前(FQDN)は先に述べたように、厳密にはルートからの 順位を表す.を末尾に持つ。これはディレクトリ構造の 絶対パスに相当する。一方、我々は通常こうした絶対パスを使用せず、 s01.wakhok.ac.jps01 のように末尾のルートドメインや自ドメイン名を省略して 利用しているが、これは一つにはデフォルトドメインが適用されて解釈 されていることと、DNS自身にある程度のドメイン名に対する補完機能が あることに由来する。しかし、通常こうした利用では問題がなくとも、 複雑なドメイン構造を持たせた場合などには、こうした補完機能があだと なり、DNSが混乱を来す場合があることを覚えておくことは重要である。 また、DNSサーバでホスト情報を記述する際には、この厳密なFQDNでの 指定が必要であることもこれに関連している。

DNSにおいて、ホスト情報を保持し、リクエストに対して情報を提供する ものをDNSサーバ、あるいはネームサーバと呼んでいるが、 リクエストを出す側は一般にリゾルバと呼ばれ、通常ライブラリとして実装 されている。リゾルバは単にネームサーバに対して名前の解決のリクエスト を出すだけで、基本的にはネームサーバが必要であれば上位の サーバへのリクエストを出す。当然、外部への名前解決の第一歩は 初期においてはルートネームサーバ(.を管理するサーバ、 言わば世界の最初のサーバ)へのリクエストとなる。このために、ルート ネームサーバは膨大なトランザクションを処理しなければならないので、 現在では多くのルートサーバが世界中で稼働している。同時に、こうした 名前解決が常にルートサーバに集中しないために、ネームサーバには キャッシュと呼ばれる以前の名前解決の記憶を持つようになっている。 これはルートネームサーバを始めとする上位のサーバの負荷を下げる ための賢い方法であるが、同時にこのことによってDNS情報がある時点で 変更された場合、それが直には反映されないことになることも注意して おかなければならない。

通常、DNSにおいては名前からIPアドレスへの変換が主となるが、逆に IPアドレスから名前への変換も提供されている。前者を表引きと呼び、 後者を逆引きと呼ぶこともある。IPアドレスをDNSのメカニズムで検索する ためには、FQDNと同じ名前空間を考えれば良い。FQDNでは上位の ものは右にあることを思い出せば、IPアドレスもより上位の区分を右に 配置すればDNSの検索アルゴリズムに適合することが分かる。例えば、 192.168.0 はDNS的には 0.168.192であることになる。 勿論、これだけではFQDNとの区別がつかないので、末尾に(上部に) .in-addr.arpaを付け加えてホスト名と区別する。つまり、 0.168.192.in-addr.arpaがDNS的な192.168.0のゾーン の名前になる訳である。



Noriyo Kanayama