リンドくん
たなべ先生、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年内の特別割引)
リンドくん
DNSって、結局何をするものなんですか?電話帳みたいなものなんでしょうか?
たなべ
まさにそのイメージで合ってるよ!
電話帳が「田中太郎さん → 090-1234-5678」と対応付けているように、DNSは「google.com → 142.250.207.46」というように、ドメイン名とIPアドレスを対応付けているんだ。
DNS(Domain Name System)は、人間が理解しやすいドメイン名をコンピュータが通信に使用するIPアドレスに変換するシステムです。この変換プロセスを名前解決と呼びます。
なぜこのような仕組みが必要なのでしょうか? それは以下の理由があります。
もしDNSがなかったらどうなるでしょうか? 私たちは以下のような不便な状況に陥ります。
DNSは、こうした問題を解決し、インターネットを誰でも使いやすいものにしている重要な基盤技術なのです。
インターネットの黎明期には実際に、小さな「hosts」ファイルに手動でIPアドレスとホスト名の対応を記述していました。しかし、インターネットの爆発的な成長に伴い、この方法では限界があることが明らかになり、DNSという分散型のシステムが開発されたという歴史的背景があります。
リンドくん
「google.com」の「.com」とか「.jp」って何なんですか?何か意味があるんですか?
たなべ
DNSは階層構造になっていて、「.」(ドット)で区切られた部分それぞれに意味があるんだ。右から順に階層が上がっていくイメージなんだよ。
ドメイン名「www.example.co.jp」を例に、その構造を見ていきましょう。
この構造は右から左へ、上位から下位へと読んでいきます。つまり、最も右側(ルート)が最上位で、左に行くほど詳細な情報になっていきます。
トップレベルドメインには、主に以下のような種類があります。
国コードTLD(ccTLD).jp - 日本.us - アメリカ.uk - イギリス.cn - 中国.com - 商業組織(もっとも一般的).org - 非営利組織.net - ネットワーク関連.edu - 教育機関.gov - 政府機関.tech - テクノロジー関連.shop - ショッピングサイト.app - アプリケーション.dev - 開発者向けDNSが階層構造を採用している理由は、管理の分散化と効率化にあります。
もし全世界のドメイン名を一つの巨大なリストで管理しようとしたら、以下のような問題が発生します。
階層構造にすることで、各レベルの管理者が自分の担当範囲だけを管理すればよくなり、システム全体の安定性と拡張性が大幅に向上します。
例えば、「.jp」ドメインは日本のレジストリが管理し、その下の「co.jp」は日本の企業向けドメインとして管理されています。さらにその下の「example.co.jp」は、その企業が自由に管理できるという仕組みです。
リンドくん
DNSサーバって一つじゃないんですか?何種類もあるんですか?
たなべ
そうなんだ!実はDNSシステムには複数の種類のサーバが協力して動いているんだよ。それぞれに専門の役割があって、連携することで高速で信頼性の高い名前解決を実現しているんだ。
DNSシステムには、以下のような役割を持つサーバが存在します。
フルリゾルバ(キャッシュDNSサーバ)クライアント(あなたのパソコンやスマートフォン)からの問い合わせを受け付け、最終的な回答を返すDNSサーバです。代表的なものとして以下があります。
フルリゾルバは、クライアントに代わって必要な情報を収集し、一度調べた結果をキャッシュ(一時保存)することで、次回以降の問い合わせを高速化します。
権威DNSサーバ(オーソリティDNSサーバ)特定のドメインに関する正式な情報を保持しているサーバです。例えば、「example.com」の権威DNSサーバは、そのドメインの正確なIPアドレス情報を持っています。
ルートDNSサーバ
DNS階層の最上位に位置し、TLD(.com、.jpなど)の権威DNSサーバの情報を管理しています。世界中に13系統のルートサーバが存在し、インターネットの基盤を支えています。
TLD DNSサーバ
各トップレベルドメイン(.com、.org、.jpなど)を管理するサーバです。セカンドレベルドメインの権威DNSサーバの情報を保持しています。
これらのサーバの役割を整理すると、以下のようになります。
この役割分担により、世界中の膨大なドメイン情報を効率的に管理し、高速な名前解決を実現しています。
リンドくん
じゃあ、実際にブラウザで「www.example.com」って入力したとき、裏側ではどんな流れで名前解決が行われるんですか?
たなべ
これが一番面白いところだよ!
複数のDNSサーバがリレー形式で協力しながら、最終的な答えを導き出していくんだ。順を追って見ていこう。
まず、ブラウザは自分自身のキャッシュ(過去に調べた記録)を確認します。最近アクセスしたサイトであれば、ここで即座に答えが見つかり、以降の手順は不要になります。
ブラウザのキャッシュに情報がなければ、次にOS(オペレーティングシステム)のDNSキャッシュを確認します。OSは、システム全体で使用されたDNS情報を記憶しています。
ローカルのキャッシュに情報がない場合、設定されているフルリゾルバ(通常はISPのDNSサーバや、設定した公開DNSサーバ)に問い合わせます。
フルリゾルバも、自身のキャッシュを確認します。他のユーザーが最近同じドメインを調べていれば、ここで答えが見つかります。
フルリゾルバのキャッシュにも情報がない場合、再帰的問い合わせが開始されます。
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です」と、最終的な答えを返します。
フルリゾルバは得られた答えをクライアントに返すと同時に、自身のキャッシュに保存します。次に誰かが同じドメインを調べたときに、すぐに答えられるようにするためです。
このように、一見シンプルに見えるドメイン名の入力の裏側では、複数のDNSサーバが協力して、階層的に情報を辿りながら最終的な答えを導き出しているのです。
リンドくん
さっきから「キャッシュ」って言葉が何度も出てきますけど、これって重要なんですか?
たなべ
とても重要なんだ!
もしキャッシュがなかったら、同じサイトにアクセスするたびに毎回全ての手順を踏まないといけなくなって、インターネットが遅くて使い物にならなくなるんだよ。
DNSキャッシュとは、一度調べたドメイン名とIPアドレスの対応を一時的に記憶しておく仕組みです。
これにより、同じドメインに再度アクセスする際に、改めて全てのDNSサーバを巡る必要がなくなります。
DNSキャッシュは、以下の複数の場所に保存されます。
これらのキャッシュは階層的に機能し、より近い場所にキャッシュがあれば、それだけ高速に名前解決が完了します。
キャッシュにはTTL(生存時間)という有効期限が設定されています。これは、権威DNSサーバが「この情報は◯◯秒間は有効です」と指定する値です。
例えば、TTLが3600秒(1時間)に設定されている場合、フルリゾルバやOSのキャッシュは1時間その情報を保持し、期限が切れたら改めて最新の情報を取得します。
TTLが重要な理由は以下の通りです。
一般的に、頻繁に変更されないWebサイトは長いTTL(数時間〜1日)を設定し、CDNなど頻繁に変更される可能性があるサービスは短いTTL(数分〜数十分)を設定します。
DNSキャッシュには、キャッシュポイズニングという攻撃手法が存在します。これは、悪意のある攻撃者が偽のDNS情報をキャッシュに混入させ、ユーザーを偽サイトに誘導する攻撃です。
この対策として、以下のような技術が使われています。
リンドくん
DNSって、IPアドレスを調べるだけじゃないんですか?他にも何かあるんですか?
たなべ
実はね、DNSは単なる「名前→IPアドレス」の変換だけじゃなくて、いろんな種類の情報を管理しているんだよ。それがDNSレコードと呼ばれるものなんだ。
DNSには、様々な目的に応じた複数のレコードタイプが存在します。
Aレコード(Address Record)ドメイン名をIPv4アドレス(32ビット)に対応付けるレコードです。最も基本的で、よく使われるレコードタイプです。
ドメイン名をIPv6アドレス(128ビット)に対応付けるレコードです。IPv6対応サイトで使用されます。
あるドメイン名を別のドメイン名に転送するエイリアス(別名)を設定するレコードです。
これにより、「blog.example.com」へのアクセスは「www.example.com」のIPアドレスに解決されます。
MXレコード(Mail Exchange Record)そのドメイン宛のメールを受け取るメールサーバーを指定するレコードです。メール配送に不可欠です。
数値(この例では10)は優先度を示し、小さいほど優先されます。
NSレコード(Name Server Record)そのドメインの権威DNSサーバーを指定するレコードです。
任意のテキスト情報を格納できるレコードです。SPF(送信者認証)やDKIM(メール認証)などで使用されます。
これらのレコードは、実際のサービス運用で以下のように使用されます。
Webサイトの公開
メールサービスの設定
負荷分散
このように、DNSは単なるIPアドレスの解決だけでなく、インターネット上の様々なサービスを支える重要な情報基盤となっています。
リンドくん
DNSって、想像以上に奥深くて重要な仕組みなんですね!これがないとインターネットは成り立たないですね。
たなべ
その通りだよ!
普段は意識することはないけど、DNSは24時間365日、休むことなく働いている縁の下の力持ちなんだ。Web開発者やネットワークエンジニアを目指すなら、DNSの仕組みをしっかり理解しておくことは本当に大切だよ。
この記事では、DNS(Domain Name System)の基本的な仕組みと名前解決のフローについて、段階的に解説してきました。
重要なポイントを改めて整理しましょう。
DNSの本質
名前解決のプロセス
実用的な知識
今後、Web開発やネットワーク管理を学んでいく上で、DNSは避けて通れない重要な技術です。
この記事で学んだ基礎知識を土台に、ぜひ実際にDNSの設定や運用に挑戦してみてください。
実践を通じて理解が深まり、より高度な技術も身につけられるようになります。