DNSとは

DNS(Domain Name System)は、ホストの名前であるホスト名からIPアドレスを求めるためのプロトコルです。TCP/IPの通信では必ずIPアドレスを指定しなければいけません。TCP/IPでやり取りするデータにはIPヘッダを付加して、IPヘッダにIPアドレスを指定しなければいけないからです。

しかし、IPアドレスは数字の羅列なので、アプリケーションを利用するユーザにはわかりにくいものです。1つや2つならともかく、何個もIPアドレスを覚えておくことは難しいでしょう。

IPアドレスを利用しているのですが、ユーザにはそのことを意識させないようにしています。そのためにアプリケーションが動作するサーバやクライアントPCなどのホストにわかりやすい名前の「ホスト名」を付けます。アプリケーションを利用するユーザが意識するのは、WebサイトのアドレスであるURLやメールアドレスなどです。URLやメールアドレスには、ホスト名そのものやホスト名を求めるための情報が含まれています。

ユーザがURLなどのアプリケーションのアドレスを指定すると、ホスト名に対応するIPアドレスを自動的に求めるのがDNSの役割です。このようなホスト名からIPアドレスを求めることを名前解決と呼びます。DNSは最もよく利用されている名前解決の方法です。

hostsファイルという特別なテキストファイルにホスト名とIPアドレスをあらかじめ登録しておくことで名前解決を行うこともできます。ただ、hostsファイルを利用した名前解決は拡張性やセキュリティに問題があります。一般的には名前解決の手段としてDNSを利用します。

DNSはアプリケーション層に位置していますが、アプリケーションの機能やデータのフォーマットを規定しているものではありません。宛先のIPアドレスを自動的に求めるためのプロトコルであることをしっかりと把握しておきましょう。DNSはトランスポート層にTCPとUDPの両方を使います。ウェルノウンポート番号はともに53です。通常の名前解決に利用するネームクエリーはUDP53で、DNSサーバ同士でゾーンファイルを転送するなどサイズが大きい転送をするときにはTCP53を利用します。

DNSはTCP/IPネットワークの電話帳

DNSは普段、私たちが利用している携帯電話の電話帳のようなイメージです。電話をかけるには電話番号が必要です。しかし、電話番号をいくつも覚えておくことは難しいです。そこで、あらかじめ電話帳に名前と電話番号を登録しておきます。電話をかけるときには、相手の名前を指定すれば、自動的に電話番号がダイアルされます。

TCP/IPの通信に必要なIPアドレスは、TCP/IPネットワークの電話帳であるDNSに問い合わせて調べることになります。

DNSはネットワークの「電話帳」
図 DNSはネットワークの「電話帳」

DNSの名前解決は、あまり目立ちませんが、ネットワークの仕組みを知る上でとても重要です。DNSの設定が正しくなかったり、障害などの影響で利用できなくなったりすると、通信する宛先IPアドレスがわからなくなってしまいます。その結果、TCP/IPの通信そのものが成り立ちません。普段、ネットワークを利用してさまざまな通信を行っていますが、DNSが非常に重要な役割を果たしています。DNSはあまり目立ちませんが、ネットワークの通信を支えるとても重要なプロトコルです。

ドメイン

クライアントPCやサーバなどの名前であるホスト名は「ドメイン」で管理します。企業や学校、政府機関などといったある組織のホスト名の集まりが「ドメイン」です。同じ組織の機器は同じドメイン名のホスト名をつけます。ドメインの例は「n-study.com」です。ここからWebサーバには「www.n-study.com」、メールサーバには「mail.n-study.com」ファイルサーバには「file.n-study.com」といったように最後の「n-study.com」の部分を共通にします。

ドメイン
図 ドメイン

ドメインも含めた全体をFQDN(Fully Qualified Domain Name)と呼びます。私たちの名前になぞらえて考えると、ドメイン名は姓(ファミリーネーム)、ホスト名は名(ファーストネーム)で、FQDNはフルネームです。なお、「ホスト名」という言葉が指す範囲は、上記の例の「www」や「mail」だけのこともあれば、ドメイン名も含めたFQDN全体のこともあります。前後の文脈によって、「ホスト名」という言葉がどこまでを指しているかが異なります。

FQDNの例
図 FQDNの例
1つのドメインをさらにサブドメインに分割することもできます。

ドメインの階層

インターネット上には膨大な数の機器が接続されています。インターネット全体のホスト名はドメインを階層構造とすることで、分散して管理しています。

ドメインの階層はルートを頂点としたツリー構造を取ります。ルートの配下に「com」「jp」「org」などのドメインが続きます。ルートドメインの配下のドメインをTLD(Top Level Domain)と呼びます。そして、「jp」の配下には「co」「ac」「go」「ne」などのドメインが続きます。

ドメインの階層の例
図 ドメインの階層の例

それぞれのドメインにはDNSサーバが設置されます。各ドメインのDNSサーバは、ルートのDNSサーバのIPアドレスを知っています。そして、下の階層のドメインのDNSサーバのIPアドレスも知っています。インターネット上の膨大なホスト名とIPアドレスの対応は、このようなドメインの階層構造で管理されています。

リソースレコード

DNSを利用するには、DNSサーバが必要です。DNSサーバにあらかじめホスト名とIPアドレスの対応を登録しておきます。DNSサーバにホスト名とIPアドレスの対応を登録します。DNSサーバにはホスト名とIPアドレスの対応だけではなく、他にもいろんな情報を登録します。DNSサーバで登録する情報をリソースレコードと呼び、以下のような種類があります。

表 主なリソースレコード

タイプ

意味

A

ホスト名に対応するIPアドレス

AAAA

ホスト名に対応するIPv6アドレス

CNAME

ホスト名に対応する別名

MX

ドメイン名に対応するメールサーバ

NS

ドメイン名を管理するDNSサーバ

PTR

IPアドレスに対応するホスト名

DNSの名前解決

DNSの名前解決の仕組みについて見ていきましょう。まず、DNSサーバに必要な情報(リソースレコード)を正しく登録していることが大前提です。自分のドメイン以外の情報は、そのドメインを管理する組織が正しくDSNサーバの設定をしているはずというのが前提です。

そして、アプリケーションを動作するホストにはDNSサーバのIPアドレスを設定しておきます。アプリケーションを利用するユーザがホスト名を指定すると、自動的にDNSサーバに対応するIPアドレスを問い合わせます。DNSサーバへの問い合わせ機能はWindowsなどのOSに組み込まれていて、DNSリゾルバと呼びます。

問い合わせするホスト名の情報を、必ずしも近くのDNSサーバが持っているとは限りません。自身が管理するドメイン以外のホスト名の問い合わせは、ドメインの階層構造をルートからたどって、何度か問合せを繰り返します。次の図は、「www.n-study.com」のIPアドレスの問い合わせの例です。

DNSの名前解決の例
図 DNSの名前解決の例

このようなDNSの名前解決の問い合わせを繰り返すことを「再帰問い合わせ」と呼んでいます。なお、毎回、毎回、ルートからたどって再帰問い合わせすると効率がよくありません。そこで、DNSサーバやリゾルバは問い合わせた情報をしばらくの間キャッシュに保存します。どのぐらいの時間キャッシュに保存するかは設定次第ですが、過去の問い合わせ結果のキャッシュが残っていれば、ルートから辿らずに名前解決ができます。


DNSの名前解決を手動で行うnslookupコマンドについて、以下の記事で解説しています。