はじめに
「ブラウザはどうやってホームページにアクセスしているのか?」を全4回でまとめました。
前回はリクエストメッセージのフォーマットや作成方法について説明しました。
その3ではリクエストを送信する方法について説明します。
- ネットワークの基礎知識(IPアドレスとドメイン名)
- サーバにデータをリクエストする
- サーバのIPアドレスを取得する ← 今回はココ
- サーバからデータを受け取る
間違っている点がありましたら、コメントで指摘いただけると幸いです。
DNSの基礎知識
リクエストメッセージを作成したので、次は目的のサーバにメッセージを届けます。
しかし、データを送信するためには宛先のIPアドレスを知らなければ送り届けることができません。
URLから得られる情報はドメイン名ですので、これをIPアドレスに変換する必要があります。
そこで登場するのがDNS(Domain Name System)です。
DNSはIPアドレスとドメイン名を対応付けする仕組みです。
IPアドレスを調べる際は一番近いDNSサーバに「
www.google.comのIPアドレスを教えてください。」と問い合わせます。
すると、DNSサーバがIPアドレスを教えてくれます。
このようにDNSを使用してIPアドレスを取得することを名前解決と呼びます。
次に、DNSはどのようにドメイン名をIPアドレスに変換しているのかについて詳しく説明します。
リゾルバ
DNSサーバにIPアドレスを問い合わせる際に使用するクライアントのことをリゾルバと呼びます。
このリゾルバは簡単にいうと、「
www.google.comのIPアドレスを教えてください。」と聞く側のことです。
リゾルバの実体はOSに組み込まれているSocketライブラリの1機能である
gethostbynameというプログラムであり、
Cで書かれたプログラム内で
gethostbyname([hostname])と記述することでIPアドレスを取得できます。
DNSサーバ
DNSサーバはリゾルバから来た問い合わせに対して、返答するサーバのことです。
リソースレコード
リゾルバからの問い合わせには以下の3つの情報が含まれています。
1. 名前
* サーバやメール配送先(メアドの@以降)などの名前。
2. クラス
* DNSがどのような目的で使用されているかを記述。
* DNSがインターネット以外でも使用される可能性を考慮して作成した項目だが、今は
INというパラメータ以外使用されていない。
3. タイプ
* Aタイプ: 名前とIPアドレスが対応付けされている場合。
* MXタイプ: 名前とメールサーバが対応付されている場合。
DNSではこの3つの情報と返答する値を対応付けて管理しています。
これらの情報をリソースレコードと呼びます。
上記の図を例に以下のリクエストをDNSサーバへ送信する場合を考えます。
名前: www.google.com クラス: IN タイプ: A |
このレコードを受け取ったDNSサーバが該当するレコードがないかを検索し、存在する場合レスポンスを返します。
タイプがAなので、この返り値はIPアドレス
216.58.197.132が返送されます。
名前: google.com クラス: IN タイプ: MX |
こちらも同様に、DNSサーバは該当するレコードを検索し、レスポンスを返します。
タイプMXの場合は、
20 alt1.aspmx.l.google.com.というように2つの値が返されます。
1つ目はメールサーバの優先順位で、2つ目はメールサーバの名前です。
メールサーバが1台しかない場合、障害が発生した時にメールが送れなくなってしまうので、メールサーバを複数個設定するのが一般的です。
この時、どのメールサーバを優先的に使用するかを示すのが1つ目の値で、登録されている数字が小さいほど優先度が高いです。
MXレコードの場合はDNSサーバからIPアドレスではなくメールサーバの名前が返されるので、クライアントは受け取ったメールサーバの名前を基にDNSへ検索をかけます。
DNSサーバの連携
ここまで1台のDNSサーバがすべてのリソースレコードを管理している想定で説明していますが、
実際にはDNSサーバは複数存在し、それらが互いに連携することでリソースレコードを返しています。
インターネット上には何万台という数のDNSサーバが存在するため、管理しやすいように各DNSサーバは自分が担当するドメインというものを持っています。
下位ドメインのIPアドレスを管理することで、上位ドメインから順番に検索をしています。
www.google.comのIPアドレスを検索する様子を以下の図に示します。
comドメインを担当するDNSサーバにgoogle.comを担当するDNSサーバのIPアドレスを聞きます。
その後、google.comドメインを担当するDNSサーバにwww.google.comを担当するDNSサーバのIPアドレスを聞きます。
このように、上位ドメインから順番にひとつ下のドメイン情報のIPアドレスを取得していくことで、名前解決を行います。
では、comドメインのIPアドレスはどのように取得するのでしょうか?
comやjpといった最上位レベルのドメイン(トップレベルドメインと呼ぶ)にはさらに上位のドメインが存在し、これをルートドメインと言います。※1
ルートドメインのIPアドレスはDNSソフトウェアをインストールした際に取得できるため、全DNSサーバが知っており、
名前解決の際には近くのDNSサーバからルートドメインのDNSサーバを経由して目的のDNSサーバに到達します。
※1:ルートドメインには名前がなく、明示的に書く場合は com.というように記述しますが、これは省略可能です。
まとめ
- IPアドレスとドメイン名を対応付けする仕組みをDNSという。
- IPアドレスを問い合わせる方をリゾルバ、答える方をDNSサーバという。
- DNSサーバは自分の担当ドメインを持っており、階層上に探索することで目的ドメインのIPアドレスを取得することが出来る。
この記事を書いた人
最近書いた記事
- 2023.06.09【CakePHP】Fixture Factoriesを使って増えすぎたFixtureをなんとかするお話
- 2022.12.25CakePHPを用いたバッチ開発
- 2022.03.18ブラウザはどうやってホームページにアクセスしているのか? その4
- 2022.01.28ブラウザはどうやってホームページにアクセスしているのか? その3