目次
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は最もよく利用されている名前解決の方法です。
DNSはアプリケーション層に位置していますが、アプリケーションの機能やデータのフォーマットを規定しているものではありません。宛先のIPアドレスを自動的に求めるためのプロトコルであることをしっかりと把握しておきましょう。DNSはトランスポート層にTCPとUDPの両方を使います。ウェルノウンポート番号はともに53です。通常の名前解決に利用するネームクエリーはUDP53で、DNSサーバ同士でゾーンファイルを転送するなどサイズが大きい転送をするときにはTCP53を利用します。
DNSはTCP/IPネットワークの電話帳
DNSは普段、私たちが利用している携帯電話の電話帳のようなイメージです。電話をかけるには電話番号が必要です。しかし、電話番号をいくつも覚えておくことは難しいです。そこで、あらかじめ電話帳に名前と電話番号を登録しておきます。電話をかけるときには、相手の名前を指定すれば、自動的に電話番号がダイアルされます。
TCP/IPの通信に必要なIPアドレスは、TCP/IPネットワークの電話帳である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全体のこともあります。前後の文脈によって、「ホスト名」という言葉がどこまでを指しているかが異なります。
ドメインの階層
インターネット上には膨大な数の機器が接続されています。インターネット全体のホスト名はドメインを階層構造とすることで、分散して管理しています。
ドメインの階層はルートを頂点としたツリー構造を取ります。ルートの配下に「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の名前解決を手動で行うnslookupコマンドについて、以下の記事で解説しています。
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順