フリーキーズ | 独学プログラミング

DNS入門!名前解決の仕組みを初心者にもわかりやすく解説

リンドくん

リンドくん

たなべ先生、Webサイトを見るときに「google.com」って入力するだけでページが表示されますよね。
でも、コンピュータは数字のIPアドレスで通信してるって聞いたんですけど...どうやって繋がってるんですか?

たなべ

たなべ

素晴らしい疑問だね!
その裏側で活躍しているのがDNS(Domain Name System)なんだ。
簡単に言うと、人間が覚えやすい「google.com」のような名前を、コンピュータが理解できる「142.250.207.46」みたいなIPアドレスに変換してくれるインターネットの住所録のような仕組みだよ。

インターネットを使う上で、私たちは普段から当たり前のように「yahoo.co.jp」や「amazon.com」といったドメイン名を入力してWebサイトにアクセスしています。
しかし、その裏側ではDNSという重要なシステムが動いており、私たちの入力した名前を瞬時にIPアドレスへ変換しているのです。

この記事では、ネットワーク学習を始めたばかりの方でも理解できるよう、DNSの基本的な仕組みと名前解決のフローについて、段階的にわかりやすく解説していきます。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

DNSとは何か?インターネットの住所録システム

リンドくん

リンドくん

DNSって、結局何をするものなんですか?電話帳みたいなものなんでしょうか?

たなべ

たなべ

まさにそのイメージで合ってるよ!
電話帳が「田中太郎さん → 090-1234-5678」と対応付けているように、DNSは「google.com → 142.250.207.46」というように、ドメイン名とIPアドレスを対応付けているんだ。

DNSの基本的な役割

DNS(Domain Name System)は、人間が理解しやすいドメイン名コンピュータが通信に使用するIPアドレスに変換するシステムです。この変換プロセスを名前解決と呼びます。

なぜこのような仕組みが必要なのでしょうか? それは以下の理由があります。

  • 人間の記憶の限界 - 「142.250.207.46」のような数字の羅列を覚えるのは困難です
  • 可読性の向上 - 「google.com」の方が意味が分かりやすく、間違いも少なくなります
  • 柔軟性の確保 - IPアドレスが変更されても、ドメイン名はそのまま使い続けられます
  • 複数サービスの管理 - 一つのドメインで複数のサービス(メール、Webなど)を管理できます

DNSがない世界を想像してみる

もしDNSがなかったらどうなるでしょうか? 私たちは以下のような不便な状況に陥ります。

  • Googleにアクセスするたびに「142.250.207.46」と入力しなければならない
  • IPアドレスの変更があるたびに、利用者全員が新しいアドレスを覚え直す必要がある
  • サーバー移転のたびにユーザーに告知し、アクセス方法を変更してもらう必要がある

DNSは、こうした問題を解決し、インターネットを誰でも使いやすいものにしている重要な基盤技術なのです。
インターネットの黎明期には実際に、小さな「hosts」ファイルに手動でIPアドレスとホスト名の対応を記述していました。しかし、インターネットの爆発的な成長に伴い、この方法では限界があることが明らかになり、DNSという分散型のシステムが開発されたという歴史的背景があります。

DNSの階層構造とドメインの仕組み

リンドくん

リンドくん

「google.com」の「.com」とか「.jp」って何なんですか?何か意味があるんですか?

たなべ

たなべ

DNSは階層構造になっていて、「.」(ドット)で区切られた部分それぞれに意味があるんだ。右から順に階層が上がっていくイメージなんだよ。

ドメイン名の読み方と階層

ドメイン名「www.example.co.jp」を例に、その構造を見ていきましょう。

www.example.co.jp.
 ↑    ↑    ↑ ↑ ↑
 |    |    | | └─ ルートドメイン
 |    |    | └─── トップレベルドメイン(TLD)
 |    |    └───── セカンドレベルドメイン(SLD)
 |    └────────── サードレベルドメイン
 └─────────────── ホスト名(サブドメイン)

この構造は右から左へ、上位から下位へと読んでいきます。つまり、最も右側(ルート)が最上位で、左に行くほど詳細な情報になっていきます。

主なトップレベルドメイン(TLD)

トップレベルドメインには、主に以下のような種類があります。

国コードTLD(ccTLD)
  • .jp - 日本
  • .us - アメリカ
  • .uk - イギリス
  • .cn - 中国
一般TLD(gTLD)
  • .com - 商業組織(もっとも一般的)
  • .org - 非営利組織
  • .net - ネットワーク関連
  • .edu - 教育機関
  • .gov - 政府機関
新しいgTLD
  • .tech - テクノロジー関連
  • .shop - ショッピングサイト
  • .app - アプリケーション
  • .dev - 開発者向け

なぜ階層構造なのか?

DNSが階層構造を採用している理由は、管理の分散化と効率化にあります。

もし全世界のドメイン名を一つの巨大なリストで管理しようとしたら、以下のような問題が発生します。

  • データベースが膨大すぎて管理不可能になる
  • 更新や検索に時間がかかりすぎる
  • 障害が発生すると全世界のインターネットが停止する

階層構造にすることで、各レベルの管理者が自分の担当範囲だけを管理すればよくなり、システム全体の安定性と拡張性が大幅に向上します。
例えば、「.jp」ドメインは日本のレジストリが管理し、その下の「co.jp」は日本の企業向けドメインとして管理されています。さらにその下の「example.co.jp」は、その企業が自由に管理できるという仕組みです。

DNSサーバの種類と役割

リンドくん

リンドくん

DNSサーバって一つじゃないんですか?何種類もあるんですか?

たなべ

たなべ

そうなんだ!実はDNSシステムには複数の種類のサーバが協力して動いているんだよ。それぞれに専門の役割があって、連携することで高速で信頼性の高い名前解決を実現しているんだ。

主要なDNSサーバの種類

DNSシステムには、以下のような役割を持つサーバが存在します。

フルリゾルバ(キャッシュDNSサーバ)

クライアント(あなたのパソコンやスマートフォン)からの問い合わせを受け付け、最終的な回答を返すDNSサーバです。代表的なものとして以下があります。

  • ISP(インターネットサービスプロバイダ)が提供するDNSサーバ
  • Googleの公開DNSサーバ(8.8.8.8)
  • Cloudflareの公開DNSサーバ(1.1.1.1)

フルリゾルバは、クライアントに代わって必要な情報を収集し、一度調べた結果をキャッシュ(一時保存)することで、次回以降の問い合わせを高速化します。

権威DNSサーバ(オーソリティDNSサーバ)

特定のドメインに関する正式な情報を保持しているサーバです。例えば、「example.com」の権威DNSサーバは、そのドメインの正確なIPアドレス情報を持っています。

ルートDNSサーバ

DNS階層の最上位に位置し、TLD(.com、.jpなど)の権威DNSサーバの情報を管理しています。世界中に13系統のルートサーバが存在し、インターネットの基盤を支えています。

TLD DNSサーバ

各トップレベルドメイン(.com、.org、.jpなど)を管理するサーバです。セカンドレベルドメインの権威DNSサーバの情報を保持しています。

それぞれの役割の違い

これらのサーバの役割を整理すると、以下のようになります。

  • フルリゾルバ: クライアントの代理で情報を集める「調査員」
  • 権威DNSサーバ: 正式な情報を持つ「データベース管理者」
  • ルートサーバ: 全体の案内役である「総合受付」
  • TLDサーバ: 各分野の案内役である「部門受付」

この役割分担により、世界中の膨大なドメイン情報を効率的に管理し、高速な名前解決を実現しています。

名前解決のフロー

リンドくん

リンドくん

じゃあ、実際にブラウザで「www.example.com」って入力したとき、裏側ではどんな流れで名前解決が行われるんですか?

たなべ

たなべ

これが一番面白いところだよ!
複数のDNSサーバがリレー形式で協力しながら、最終的な答えを導き出していくんだ。順を追って見ていこう。

ステップ1. ブラウザのキャッシュ確認

まず、ブラウザは自分自身のキャッシュ(過去に調べた記録)を確認します。最近アクセスしたサイトであれば、ここで即座に答えが見つかり、以降の手順は不要になります。

ステップ2. OSのキャッシュ確認

ブラウザのキャッシュに情報がなければ、次にOS(オペレーティングシステム)のDNSキャッシュを確認します。OSは、システム全体で使用されたDNS情報を記憶しています。

ステップ3. フルリゾルバへの問い合わせ

ローカルのキャッシュに情報がない場合、設定されているフルリゾルバ(通常はISPのDNSサーバや、設定した公開DNSサーバ)に問い合わせます。

ステップ4. フルリゾルバのキャッシュ確認

フルリゾルバも、自身のキャッシュを確認します。他のユーザーが最近同じドメインを調べていれば、ここで答えが見つかります。

ステップ5. 再帰的問い合わせの開始

フルリゾルバのキャッシュにも情報がない場合、再帰的問い合わせが開始されます。

5-1. ルートDNSサーバへの問い合わせ

フルリゾルバは、まずルートDNSサーバに「www.example.comのIPアドレスはどこにありますか?」と尋ねます。
ルートサーバは「.comドメインのことは、.comのTLDサーバに聞いてください」と、TLDサーバのIPアドレスを教えてくれます。

5-2. TLD DNSサーバへの問い合わせ

次に、フルリゾルバは.comのTLDサーバに同じ質問をします。
TLDサーバは「example.comのことは、example.comの権威DNSサーバに聞いてください」と、権威サーバのIPアドレスを教えてくれます。

5-3. 権威DNSサーバへの問い合わせ

最後に、フルリゾルバはexample.comの権威DNSサーバに問い合わせます。
権威サーバは正式な情報を持っているので、「www.example.comのIPアドレスは93.184.216.34です」と、最終的な答えを返します。

ステップ6. 結果の返却とキャッシュ

フルリゾルバは得られた答えをクライアントに返すと同時に、自身のキャッシュに保存します。次に誰かが同じドメインを調べたときに、すぐに答えられるようにするためです。

名前解決フローの図解イメージ

[ユーザーのPC]
    ↓ ①「www.example.comのIPは?」
[フルリゾルバ]
    ↓ ②「www.example.comのIPは?」
[ルートDNSサーバ] → ③「.comのTLDサーバはこちら」
    ↓ ④「www.example.comのIPは?」
[.com TLDサーバ] → ⑤「example.comの権威サーバはこちら」
    ↓ ⑥「www.example.comのIPは?」
[example.com権威サーバ] → ⑦「93.184.216.34です」
    ↓ ⑧ 結果を返す
[フルリゾルバ] → キャッシュに保存
    ↓ ⑨ 結果を返す
[ユーザーのPC] → Webサイトにアクセス

このように、一見シンプルに見えるドメイン名の入力の裏側では、複数のDNSサーバが協力して、階層的に情報を辿りながら最終的な答えを導き出しているのです。

DNSキャッシュの仕組み

リンドくん

リンドくん

さっきから「キャッシュ」って言葉が何度も出てきますけど、これって重要なんですか?

たなべ

たなべ

とても重要なんだ!
もしキャッシュがなかったら、同じサイトにアクセスするたびに毎回全ての手順を踏まないといけなくなって、インターネットが遅くて使い物にならなくなるんだよ。

DNSキャッシュとは

DNSキャッシュとは、一度調べたドメイン名とIPアドレスの対応を一時的に記憶しておく仕組みです。
これにより、同じドメインに再度アクセスする際に、改めて全てのDNSサーバを巡る必要がなくなります。

キャッシュが保存される場所

DNSキャッシュは、以下の複数の場所に保存されます。

  • ブラウザキャッシュ - 各Webブラウザが独自に管理
  • OSのDNSキャッシュ - WindowsやmacOSなどのOSレベルで管理
  • フルリゾルバのキャッシュ - DNSサーバ側で管理

これらのキャッシュは階層的に機能し、より近い場所にキャッシュがあれば、それだけ高速に名前解決が完了します。

TTL(Time To Live)の役割

キャッシュにはTTL(生存時間)という有効期限が設定されています。これは、権威DNSサーバが「この情報は◯◯秒間は有効です」と指定する値です。

例えば、TTLが3600秒(1時間)に設定されている場合、フルリゾルバやOSのキャッシュは1時間その情報を保持し、期限が切れたら改めて最新の情報を取得します。

TTLが重要な理由は以下の通りです。

  • 鮮度の保証 - サーバーのIPアドレスが変更された場合でも、一定時間後には新しい情報が反映される
  • 負荷分散 - すべての問い合わせが権威サーバに集中することを防ぐ
  • 柔軟性 - サービスの性質に応じてキャッシュ時間を調整できる

一般的に、頻繁に変更されないWebサイトは長いTTL(数時間〜1日)を設定し、CDNなど頻繁に変更される可能性があるサービスは短いTTL(数分〜数十分)を設定します。

キャッシュポイズニングとセキュリティ

DNSキャッシュには、キャッシュポイズニングという攻撃手法が存在します。これは、悪意のある攻撃者が偽のDNS情報をキャッシュに混入させ、ユーザーを偽サイトに誘導する攻撃です。

この対策として、以下のような技術が使われています。

  • DNSSEC(DNS Security Extensions) - DNSの応答に電子署名を付けて改ざんを検知
  • ランダム化 - DNS問い合わせの識別子をランダムにして予測困難にする
  • 信頼できるDNSサーバの使用 - セキュリティ対策が施された公開DNSサーバの利用

DNSレコードの種類と用途

リンドくん

リンドくん

DNSって、IPアドレスを調べるだけじゃないんですか?他にも何かあるんですか?

たなべ

たなべ

実はね、DNSは単なる「名前→IPアドレス」の変換だけじゃなくて、いろんな種類の情報を管理しているんだよ。それがDNSレコードと呼ばれるものなんだ。

主要なDNSレコードタイプ

DNSには、様々な目的に応じた複数のレコードタイプが存在します。

Aレコード(Address Record)

ドメイン名をIPv4アドレス(32ビット)に対応付けるレコードです。最も基本的で、よく使われるレコードタイプです。

www.example.com.  IN  A  00.000.000.00
AAAAレコード(IPv6 Address Record)

ドメイン名をIPv6アドレス(128ビット)に対応付けるレコードです。IPv6対応サイトで使用されます。

www.example.com.  IN  AAAA  2606:2800:220:1:248:1893:25c8:1946
CNAMEレコード(Canonical Name Record)

あるドメイン名を別のドメイン名に転送するエイリアス(別名)を設定するレコードです。

blog.example.com.  IN  CNAME  www.example.com.

これにより、「blog.example.com」へのアクセスは「www.example.com」のIPアドレスに解決されます。

MXレコード(Mail Exchange Record)

そのドメイン宛のメールを受け取るメールサーバーを指定するレコードです。メール配送に不可欠です。

example.com.  IN  MX  10  mail.example.com.

数値(この例では10)は優先度を示し、小さいほど優先されます。

NSレコード(Name Server Record)

そのドメインの権威DNSサーバーを指定するレコードです。

example.com.  IN  NS  ns1.example.com.
TXTレコード(Text Record)

任意のテキスト情報を格納できるレコードです。SPF(送信者認証)やDKIM(メール認証)などで使用されます。

example.com.  IN  TXT  "v=spf1 include:_spf.google.com ~all"

DNSレコードの実用例

これらのレコードは、実際のサービス運用で以下のように使用されます。

Webサイトの公開

メールサービスの設定

  • MXレコードでメールサーバーを指定
  • TXTレコードでSPFやDKIMを設定してメールの信頼性を向上

負荷分散

  • 複数のAレコードを登録することで、簡易的な負荷分散(ラウンドロビンDNS)を実現

このように、DNSは単なるIPアドレスの解決だけでなく、インターネット上の様々なサービスを支える重要な情報基盤となっています。

まとめ

リンドくん

リンドくん

DNSって、想像以上に奥深くて重要な仕組みなんですね!これがないとインターネットは成り立たないですね。

たなべ

たなべ

その通りだよ!
普段は意識することはないけど、DNSは24時間365日、休むことなく働いている縁の下の力持ちなんだ。Web開発者やネットワークエンジニアを目指すなら、DNSの仕組みをしっかり理解しておくことは本当に大切だよ。

この記事では、DNS(Domain Name System)の基本的な仕組みと名前解決のフローについて、段階的に解説してきました。
重要なポイントを改めて整理しましょう。

DNSの本質

  • 人間が理解しやすいドメイン名をコンピュータが使用するIPアドレスに変換する「インターネットの住所録」
  • 階層構造を採用することで、分散管理と高速な検索を実現
  • キャッシュ機構により、効率的な名前解決を可能にしている

名前解決のプロセス

  • ブラウザ→OS→フルリゾルバ→ルートサーバ→TLDサーバ→権威サーバという階層的な問い合わせフロー
  • 各段階でキャッシュを活用することで、実際の通信を最小限に抑えている
  • 複数のDNSサーバが協力して、ドメイン情報を提供している

実用的な知識

  • AレコードやMXレコードなど、目的に応じた様々なレコードタイプが存在
  • DNSトラブル時の基本的な診断方法と対処法
  • セキュリティ面での注意点(キャッシュポイズニングなど)

今後、Web開発やネットワーク管理を学んでいく上で、DNSは避けて通れない重要な技術です。
この記事で学んだ基礎知識を土台に、ぜひ実際にDNSの設定や運用に挑戦してみてください。

実践を通じて理解が深まり、より高度な技術も身につけられるようになります。

この記事をシェア

関連するコンテンツ