はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在インターネットについて勉強していますが、そこで出てきたDNSサーバーへの情報の登録方法や検索方法についての記述があったので忘れないように記述しようと思いました
DNSサーバーはドメイン名を渡せばIPアドレスが返ってくる仕組みについて解説します
DNSサーバへの登録方法
ドメインの階層構造
DNSは階層的に管理されており、最上位には ルートドメイン (.
) が存在します。ルートドメインの下には、例えば com
, net
, org
, jp
などのトップレベルドメイン(TLD)が続き、さらにその下位に独自ドメイン (例: example.com
) が配置されるという構成です。
例えばwww.example.com
というドメインがあった場合、最上位にはルートドメイン(.
)、次にcom
、example
、www
の順番で登録していきます。
DNSサーバーのDBに登録されている情報
DNSサーバーにドメインを渡すと、DNSサーバー上のDBの中から探すのですが、以下のようなデータが保持されています。
-
名前 (Name)
- Webサーバーもしくはメールサーバーのドメイン名が書いてあります。
-
クラス (Class)
- ここではインターネットを表す
IN
が書かれています。
- ここではインターネットを表す
-
タイプ (Type)
- IPアドレスを問い合わせる時は
A
(IPv4) やAAAA
(IPv6)、メールサーバーの場合はMX
など、さまざまな種類が指定されます。
- IPアドレスを問い合わせる時は
このようなレコードをまとめたゾーンファイルを、権威DNSサーバーが保持し、正しいDNS情報を提供します。
DNSサーバーからIPアドレスを探す方法
www.example.com
というドメインアドレスを探す例を考えてみましょう。
-
ルートドメインのDNSサーバーを問い合わせて、
com
のDNSサーバーを調べる- ルートDNSサーバーは、各トップレベルドメイン(TLD)のDNSサーバー情報を持っています。
-
com
のDNSサーバーを問い合わせて、example.com
のDNSサーバーを調べる- ルートDNSサーバーの情報をもとに、TLDである
com
のDNSサーバーへ問い合わせます。 - そこで
example.com
を管理している権威DNSサーバー (NSレコード) の情報と、必要に応じて glue レコードを受け取ります。
- ルートDNSサーバーの情報をもとに、TLDである
-
example.com
のDNSサーバーを問い合わせて、www.example.com
のAレコードを取得する-
com
のDNSサーバーから得た権威DNSサーバーの情報をもとに、example.com
のゾーンを管理するDNSサーバーへ問い合わせます。 -
www.example.com
に対応する Aレコード (IPv4アドレス) や AAAAレコード (IPv6アドレス) などが登録されていれば、これを取得できます。
-
-
最終的にクライアントへ返却
- クライアント (PCやスマホ) は、この取得した IPアドレスをもとに実際の通信を開始します。もしキャッシュがあれば次回からはより高速に応答できるようになります。
補足解説
再帰的問い合わせと反復問い合わせ
多くの場合、ユーザーが利用するDNSリゾルバ(プロバイダのDNSやOS内のDNSキャッシュなど)は 再帰的問い合わせ を行います。これは、最終的な回答(IPアドレスなど)を得るために、ルートDNSサーバー、TLDのDNSサーバー、権威DNSサーバーを自動的にたどっていき、取得した結果をクライアントに一括して返す方式です。
一方で 反復問い合わせ は、DNSリゾルバがまずルートサーバーに問い合わせ、その応答をもとに次に問い合わせる先をクライアント自身が逐次判断していく方法を指します。実際には、OSやアプリケーションが細かく問い合わせ先を追いかけることは少なく、多くは再帰的問い合わせをDNSサーバーに任せています。
まとめ
-
DNSの階層構造: ルートドメイン(
.
)から始まり、TLD(com
など)を経由して、最終的に特定のドメイン(example.com
)へとたどり着く仕組みになっています。 -
ゾーンと権威DNSサーバー: 各ドメインには権威DNSサーバーが存在し、ゾーンファイルによって管理するレコード(AやMXなど)が登録されています。上位ドメインは下位ドメインの権威DNSサーバーを登録(委任)する形で接続されています。
-
問い合わせの流れ: ルート -> TLD -> サブドメインという具合に段階的に下位ドメインを探し、最終的にIPアドレスなどの情報(Aレコードなど)を取得する再帰的問い合わせを行います。