はじめに: DNSはドメイン名とIPアドレスをつなぐ仕組み
Webサイトへアクセスするとき、私たちは多くの場合、IPアドレスを直接入力しません。代わりに、example.com のようなドメイン名を使います。
ドメイン名は人間にとって扱いやすい名前です。一方、ネットワーク上で通信相手を見つけるには、IPアドレスが必要になります。そこで使われるのがDNSです。
DNSは、ドメイン名とIPアドレスを対応付ける仕組みです。ブラウザでURLを入力したとき、いきなりHTTPリクエストが送られるのではなく、まず接続先のIPアドレスを調べる処理が行われます。
基本情報技術者試験でも、DNSはネットワーク分野の重要な用語です。この記事では、DNSを「名前から宛先を調べる仕組み」として捉え、Web開発でどのように関係するのかを見ていきます。
DNSは、人間が扱いやすいドメイン名を、通信に必要なIPアドレスへ対応付ける仕組みです。
DNSは「名前から宛先を調べる」仕組み
IPアドレスは、ネットワーク上で通信相手を見つけるための宛先情報です。ただし、IPアドレスは数字の並びなので、人間が覚えたり入力したりするにはあまり向いていません。
そこで、Webではドメイン名を使います。たとえば、ブラウザのアドレスバーにドメイン名を含むURLを入力すると、裏側ではそのドメイン名に対応するIPアドレスが調べられます。
この処理を名前解決と呼びます。
ドメイン名 → DNSで名前解決 → IPアドレスDNSはよく「インターネットの電話帳」に例えられます。名前を手がかりに、実際の連絡先を調べるイメージです。ただし、実際のDNSは1冊の電話帳ではありません。複数のDNSサーバーが役割を分担しながら、問い合わせに答えます。
最初は細かいサーバー構成まで覚えるより、「ドメイン名からIPアドレスを調べる仕組み」と押さえることが大切です。
DNSを理解すると、ブラウザで入力したURLがどのサーバーへ向かうのかを追いやすくなります。
名前解決の流れをざっくり見る
ブラウザでURLを入力してからWebページが表示されるまでには、いくつかの処理があります。DNSは、その中でもHTTP通信が始まる前の準備に関係します。
流れを簡単に書くと、次のようになります。
URLを入力する
ドメイン名を取り出す
DNSでIPアドレスを調べる
IPアドレスを宛先にして接続する
HTTPリクエストを送る
HTTPレスポンスを受け取るたとえば、https://example.com/articles というURLにアクセスする場合、ブラウザはまず example.com というドメイン名に注目します。そして、そのドメイン名に対応するIPアドレスを調べます。
IPアドレスが分かると、ブラウザはその宛先へ接続し、HTTPリクエストを送れるようになります。つまり、DNSはHTTPの中身そのものではありませんが、HTTP通信を始めるための前段にあります。
名前解決の結果は、毎回必ず外部へ問い合わせるとは限りません。ブラウザ、OS、ネットワーク機器などが以前の結果を一時的に覚えていることがあります。これをDNSキャッシュと呼びます。
名前解決は、HTTPリクエストを送る前に、ドメイン名から接続先のIPアドレスを調べる処理です。
JavaScriptでURLからドメイン名を取り出す
JavaScriptからDNSへ直接問い合わせるコードをブラウザ上で自由に実行することは、通常のWebページではできません。ただし、URLの中から「DNSで名前解決される部分」を確認することはできます。
JavaScriptの URL オブジェクトを使うと、URLを部品ごとに分けられます。
const url = new URL("https://example.com/articles?page=1");
console.log(url.protocol);
console.log(url.hostname);
console.log(url.pathname);出力は次のようになります。
https:
example.com
/articlesこのうち、hostname がドメイン名です。ブラウザはこのドメイン名を使ってIPアドレスを調べ、接続先を決めます。
URL全体を見ると、パスやクエリ文字列に目が行きがちです。しかし、DNSに関係するのは主にホスト名の部分です。HTTPリクエストで「どのリソースをください」と伝える前に、「どのサーバーへ行くか」を決める必要があります。
ブラウザやJavaScriptで扱うURLの中には、DNSで名前解決されるドメイン名が含まれています。
DNSレコードの基本
DNSでは、ドメイン名に対してさまざまな情報を設定できます。この設定情報をDNSレコードと呼びます。
代表的なものを押さえておきます。
Aレコード → ドメイン名をIPv4アドレスへ対応付ける
AAAAレコード → ドメイン名をIPv6アドレスへ対応付ける
CNAMEレコード → 別のドメイン名への別名を設定する
MXレコード → メールを受け取るサーバーを示すWebサイトの表示で特に関係しやすいのは、AレコードやAAAAレコードです。これらは、ドメイン名からIPアドレスを調べるときに使われます。
CNAMEレコードは、ある名前を別の名前の別名として扱うときに使います。たとえば、サービス側から指定されたホスト名へ向ける設定で見かけることがあります。
MXレコードはメールに関係します。同じDNSでも、Webサイトの表示だけでなく、メール配送にも使われていることが分かります。
最初からすべてのレコードを暗記する必要はありません。まずは、AレコードがIPv4アドレス、AAAAレコードがIPv6アドレスに関係することを押さえると理解しやすくなります。
DNSレコードは、ドメイン名に対してどのような情報を返すかを定める設定です。
DNSキャッシュとTTL
DNSの問い合わせ結果は、毎回ゼロから調べ直されるとは限りません。以前に調べた結果を一時的に保存しておき、次回以降に再利用することがあります。これがDNSキャッシュです。
DNSキャッシュがあると、同じドメイン名へアクセスするときに毎回問い合わせなくてよくなります。結果として、表示までの時間を短くしたり、DNSサーバーへの負荷を減らしたりできます。
一方で、キャッシュがあるために、DNS設定を変更してもすぐ反映されないことがあります。たとえば、サーバー移転でAレコードを変更しても、一部の環境では古いIPアドレスを見続ける場合があります。
このとき関係するのがTTLです。TTLは、DNSの結果をどれくらいの時間キャッシュしてよいかを示す値です。TTLが長いとキャッシュが残りやすく、短いと変更が反映されやすくなります。
DNSにはキャッシュがあるため、設定を変更しても反映まで時間がかかることがあります。
試験ではどう問われるか
基本情報技術者試験では、DNSは「ドメイン名とIPアドレスを対応付ける仕組み」として問われます。
特に重要なのは、名前解決という考え方です。人間が入力するドメイン名を、コンピュータが通信に使うIPアドレスへ変換する、という流れを押さえます。
また、Aレコード、AAAAレコード、MXレコードなど、代表的なDNSレコードが出てくることもあります。すべてを細かく覚えるより、何のためのレコードなのかを分類して理解すると覚えやすくなります。
Webアクセスの流れとセットで理解することも大切です。DNSでIPアドレスを調べ、その宛先に接続し、HTTPリクエストとレスポンスをやり取りします。
試験では、DNSを「ドメイン名からIPアドレスを調べる仕組み」として押さえることが基本です。
実務ではどう使われるか
実務では、DNSを意識する場面がよくあります。
たとえば、独自ドメインをWebサイトに設定するとき、DNSレコードを追加します。サーバー移転では、ドメイン名が新しいサーバーを向くようにAレコードやCNAMEレコードを変更することがあります。
メールを使う場合は、MXレコードや関連するレコードを設定します。Webサイトは表示されるのにメールだけ届かない、という場合は、DNSのメール関係の設定が原因になっていることもあります。
接続エラーの調査でもDNSは重要です。ページが表示されないとき、サーバーが落ちているのか、DNSで正しいIPアドレスが返っていないのか、キャッシュで古い情報を見ているのかを切り分ける必要があります。
ドメイン設定を変更した直後に「自分の環境では新しいサイトが見えるが、別の人には古いサイトが見える」ということがあります。これはDNSキャッシュやTTLが関係している場合があります。
実務では、DNSを理解していると、ドメイン設定や接続先の切り分けを落ち着いて進めやすくなります。
まとめ: DNSを理解するとURL入力後の流れが見える
DNSは、ドメイン名とIPアドレスを対応付ける仕組みです。人間はドメイン名を使い、ネットワーク上の通信ではIPアドレスが使われます。その間をつなぐのがDNSです。
ブラウザでURLを入力すると、ドメイン名からIPアドレスを調べる名前解決が行われます。IPアドレスが分かると、その宛先へ接続し、HTTPリクエストを送れるようになります。
DNSには、Aレコード、AAAAレコード、CNAMEレコード、MXレコードなどの設定があります。また、DNSキャッシュやTTLによって、設定変更の反映に時間がかかることもあります。
DNSを理解すると、URLを入力してからHTTP通信が始まるまでの見えにくい準備段階をイメージしやすくなります。

コメント