前の記事では、 ARPを使ってIPv4アドレスからMACアドレスを調べる仕組み を学びました。
ネットワーク通信では、 最終的にIPアドレスを使って通信相手を識別します。
しかし、普段Webサイトを見るとき、 私たちは次のようなIPアドレスを直接入力することはほとんどありません。
代わりに、
のような、 人間が覚えやすい名前を利用します。
ところが、ネットワーク通信を行うには 最終的にIPアドレスが必要です。
どうやって通信先のIPアドレスを知るのでしょうか?
この問題を解決する仕組みが DNS(Domain Name System)です。
DNSという言葉を覚えるだけではなく、 「ドメイン名を入力するとDNSによってIPアドレスが調べられ、 そのIPアドレスを使って実際の通信が始まる」 という流れを説明できる状態を目指します。
DNSとは?
DNS(Domain Name System)とは、 ドメイン名とIPアドレスなどの情報を対応付ける仕組み です。
Webサイトへのアクセスを例にすると、
というように、 ドメイン名から通信に必要なIPアドレスを調べます。
特に初級では、 「ドメイン名 → IPアドレス」 の名前解決を理解することが重要です。
ARPとDNSは何が違う?
前の記事で学習したARPとDNSは、 どちらも「何かを調べる」仕組みなので混同しやすい部分です。
通信したいサーバーの IPアドレスなどを調べる。
IPv4通信で、 同一リンク上の転送に必要なMACを調べる。
DNS:名前 → IPアドレス
ARP:IPv4アドレス → MACアドレス
と整理すると、それぞれの役割が分かりやすくなります。
DNSによる「名前解決」とは?
ドメイン名などから、 対応するIPアドレスなどの情報を取得する処理を 名前解決と呼びます。
たとえばブラウザへ、
と入力したとします。
ブラウザやOSは通信を開始するために、 まず www.example.comに対応するIPアドレス を知る必要があります。
DNS問い合わせの前にキャッシュを確認する
Webサイトへアクセスするたびに、 毎回すべてのDNSサーバーへ問い合わせているわけではありません。
過去に取得した名前解決結果が DNSキャッシュ に残っていれば、その情報を再利用できます。
キャッシュを利用することで、 DNSサーバーへの問い合わせ回数を減らし、 名前解決を高速化できます。
実際にはOS・ブラウザ・DNSリゾルバなど、 複数の場所でキャッシュが利用される場合があります。 初級では「以前調べた結果を一定期間再利用できる」と理解すれば十分です。
DNSサーバーに名前解決を依頼する
必要な情報がキャッシュにない場合、 端末は通常、 設定されている DNSサーバーへ問い合わせます。
このように、 クライアントからの問い合わせを受け、 必要に応じて他のDNSサーバーへ問い合わせながら 結果を返すDNSサーバーを DNSリゾルバ(キャッシュDNSサーバー) などと呼びます。
DNSサーバー1台が世界中の情報を持っているわけではない
DNSで重要なのは、 1台のDNSサーバーが世界中すべてのドメイン情報を保持しているわけではない という点です。
DNSは階層構造になっており、 必要な情報を持つDNSサーバーまで順番にたどっていきます。
ルートDNS・TLD DNS・権威DNSとは?
ルートDNSサーバー
DNS階層の最上位に位置するのが ルートDNSサーバーです。
ルートDNSは、 たとえば .comや.jpなど、 トップレベルドメインを管理するDNSサーバーへ たどるための情報を持っています。
「.comの情報なら、.comを担当するDNSへ問い合わせてください」
TLD DNSサーバー
TLDは Top Level Domain の略です。
.com、.jp、.netなどのトップレベルドメインごとに、 その下位のドメインを管理するDNSサーバーへ たどるための情報があります。
「example.comの情報なら、この権威DNSへ問い合わせてください」
権威DNSサーバー
最終的に、 対象ドメインのDNS情報を管理しているのが 権威DNSサーバー(Authoritative DNS Server) です。
「この名前に対応する情報はこちらです」
DNS名前解決の流れを最初から見てみよう
ここまでを、 www.example.com へアクセスする場合で整理します。
一般的には、クライアントは設定されたDNSリゾルバへ問い合わせます。 そのリゾルバが必要に応じてルートDNSなどへ問い合わせ、 最終的な結果をクライアントへ返します。
「再帰問い合わせ」と「反復問い合わせ」
DNSの学習では、 再帰問い合わせと 反復問い合わせ という言葉も登場します。
クライアントがDNSリゾルバへ 「最終的な答えを返してください」 と依頼するイメージです。
DNSリゾルバが 「次はどこへ聞けばよいか」 という情報をたどりながら問い合わせます。
初級では、
というイメージを持っておけば十分です。
DNSレコードとは?
DNSでは、 ドメイン名に関するさまざまな情報を DNSレコード(リソースレコード) として管理します。
代表的なレコードを確認してみましょう。
| レコード | 主な役割 | イメージ |
|---|---|---|
| A | 名前とIPv4アドレスを対応付ける | www.example.com → IPv4 |
| AAAA | 名前とIPv6アドレスを対応付ける | www.example.com → IPv6 |
| CNAME | 別名を設定する | 別名 → 正式名 |
| MX | メール配送先を示す | メールサーバー |
| NS | そのゾーンを担当するDNSサーバーを示す | 権威DNS |
Web通信とIPv4の基本を理解する段階では、 Aレコード=名前とIPv4アドレスの対応 をまず押さえてください。
DNSキャッシュは永遠には保存されない
DNSレコードには TTL(Time To Live) という値が設定されます。
TTLは、 DNS情報をどの程度の時間キャッシュとして保持できるかを 判断するために使われます。
TTLが切れれば、 必要に応じて再度名前解決を行い、 新しい情報を取得します。
DNSは何番ポートを使う?
DNSでは一般に 53番ポート が利用されます。
一般的なDNS問い合わせではUDPが利用されることが多いですが、 応答サイズや処理内容などに応じてTCPも利用されます。
DNSではUDP 53だけでなくTCP 53も利用されます。 初級では「DNSは53番ポート、UDP/TCPの両方」 と整理しておきましょう。
DNSでIPアドレスが分かった後はどうなる?
DNSの名前解決は、 あくまで 通信先のIPアドレスなどを調べる処理 です。
IPアドレスを取得したら、 これまで学んできたTCP/IPの仕組みを利用して 実際の通信が行われます。
↓
203.0.113.10
このように、 これまで個別に学習してきた仕組みが 実際のWebアクセスでは組み合わされて動作しています。
ここで実際に動かしてみよう:DNS名前解決シミュレーター
www.example.comのIPアドレスを調べる流れを 順番に確認してみましょう。
DNS Resolution Simulator
DNSキャッシュを確認
DNSリゾルバはまずwww.example.comの名前解決結果を キャッシュしていないか確認します。 今回はキャッシュがないため、DNS階層への問い合わせを開始します。
理解度チェック:どのDNSレコードを使う?
目的を選択すると、 代表的なDNSレコードを確認できます。
Aレコードはドメイン名とIPv4アドレスを対応付けます。 IPv4でWebサーバーなどのアドレスを調べるときに重要です。
DNSの名前解決はコマンドでも確認できる
WindowsやLinuxでは、 実際にDNS名前解決を確認できます。
nslookup
nslookup www.example.com
利用しているDNSサーバーや、 名前解決で取得したIPアドレスなどを確認できます。
dig
dig www.example.com
digでは、 DNSレコードや問い合わせ結果などを より詳しく確認できます。
DNS障害では「IPでは通信できるのに名前では通信できない」ことがある
DNSは実際のトラブルシューティングでも非常に重要です。
たとえば、
という状態であれば、 IP通信そのものではなく DNSによる名前解決に問題がある可能性 を考えることができます。
設定されているDNSサーバーへ 通信可能か確認します。
nslookupやdigなどを使い、 DNS応答を確認します。
想定したIPアドレスが DNSから返されているか確認します。
PCはDNSサーバーのIPアドレスをどうやって知る?
DNSを利用するためには、 PC側に 「どのDNSサーバーへ問い合わせるのか」 という設定が必要です。
さらにPCがネットワーク通信するためには、
など、複数のネットワーク設定が必要になります。
しかし、自宅のスマートフォンやPCをWi-Fiへ接続するたびに、 これらをすべて手入力しているわけではありません。
どうやってPCへ自動設定されているのでしょうか?
そこで利用されるのが、 次の記事で学ぶ DHCP(Dynamic Host Configuration Protocol) です。
確認問題:DNSの仕組みを理解できたか確認しよう
最後に3問の確認問題へ挑戦しましょう。
DNSの主な役割として適切なものはどれですか?
DNSはドメイン名とIPアドレスなどの情報を対応付けます。 Webアクセスでは名前から通信先IPアドレスを調べるために利用されます。
ドメイン名とIPv4アドレスを対応付ける代表的なDNSレコードはどれですか?
Aレコードはドメイン名とIPv4アドレスを対応付けます。 IPv6アドレスとの対応にはAAAAレコードが利用されます。
DNSの階層をたどる順序として適切なものはどれですか?
DNSリゾルバは必要に応じて、 ルートDNSからTLD DNS、 さらに対象ドメインの権威DNSへと 情報をたどります。
3問に挑戦してみましょう。
まとめ
今回は、DNSによる名前解決の仕組みについて解説しました。
DNSは ドメイン名とIPアドレスなどを対応付ける仕組み
Webアクセスでは、 DNSによって名前から通信先IPアドレスを調べる
DNSは階層構造になっており、 ルートDNS → TLD DNS → 権威DNS と情報をたどる
AレコードはIPv4、AAAAレコードはIPv6 との対応に利用される
DNSなどを利用するために必要なネットワーク設定を 自動配布する仕組みとして 次にDHCPを学習する
次は「DHCPとは?IPアドレス自動割り当ての仕組み」を学びましょう
DNSを利用するにはDNSサーバーの情報が必要で、 ネットワーク通信にはIPアドレスやサブネットマスク、 デフォルトゲートウェイなどの設定も必要です。 次は、それらのネットワーク設定を端末へ自動的に配布する DHCPの仕組みを学習します。
次のレッスンへ進む →
