はじめに
ITの勉強において、やっぱり全範囲を網羅的に勉強しようと思ってもなかなか、先輩・上司に追いつき追い抜くことって時間がかかるものです。そのせいでモチベーション下がったり……
だったら、1つのことに1点集中して『これに関しては同レベルor僕の方が上だ!』と思える領域を少しずつ作っていきましょう!それを続けていけば、どんどんどんどん勝てる領域が多くなり、気づいたら自分が行きたい場所に登り詰めるでしょう!
ということで今回はDNS名前解決の流れについて知見を深めていきましょう!
結論から言います。DNSの流れは①キャッシュ確認②リゾルバの再帰問い合わせです。
では、どういうことなのか見ていきましょう!
DNSの基本知識
DNS(Domain Name System)とはドメイン名とIPアドレスの対応を管理するシステムです。また、このようなシステムを提供するサーバをDNSサーバ(=ネームサーバ)言います。
DNSサーバには以下の種類があります。
- ルートDNSサーバ: ドメイン名のトップレベル(例:
.com
、.jp
など)に関する情報を管理します。 - トップレベルドメイン(TLD)サーバ: 特定のTLD(例:
example.com
)に関する情報を管理します。 - 権威DNSサーバ: 具体的なドメイン(例:
www.example.com
)の詳細な情報を管理します。 - リゾルバ: クライアントが最初に問い合わせるDNSクライアントソフトウェア。クライアントのOSに組み込まれていることが多く、DNSリクエストを処理します。
ここまでが大雑把なDNSについての解説です。では、早速DNS名前解決の流れを見ていきましょう!
ちなみに名前解決とはドメイン名をIPアドレスに変換することです。
名前解決の手順
1. クライアント側のキャッシュを確認
- ブラウザのキャッシュ: 過去にアクセスしたウェブサイトのDNS情報を一時的に保存します。
- OSのキャッシュ: オペレーティングシステムが保持するDNS情報です。
- hostsファイル: ローカルに保存されたドメイン名とIPアドレスの対応表。手動で設定することができます。
- DNSリゾルバのキャッシュ: DNSリゾルバ(クライアントが最初に問い合わせるDNSクライアントソフトウェア)が保持する情報です。リゾルバは、DNSサーバへの問い合わせを効率化するためにキャッシュを利用します。
2. DNSリゾルバがDNSサーバに問い合わせる
*ここでは、例としてwww.example.comを使っていきます。
- ルートDNSサーバに問い合わせ: ドメイン名のトップレベルドメイン(TLD)に関する情報を取得します。→comの情報をゲット
ドメイン名の最後にある「.」(ドット)は、DNS階層構造のルート(最上位)を表しています。通常、ドメイン名を入力する際には「.」が省略されることが多いですが、技術的には完全修飾ドメイン名(FQDN: Fully Qualified Domain Name)の末尾には「.」が存在しています。
2. TLDサーバに問い合わせ: 次に、具体的なドメインの情報を取得します。→example.com
をゲット
3. 権威DNSサーバに問い合わせ: 最後に、要求されたドメインのIPアドレスなどの情報を取得します。→www.example.com
をゲット
4. 取得したIPアドレスをクライアントに返します。
3. 実際にアクセスする
- クライアントは取得したIPアドレスを使用して、対象のウェブサイトやサーバにアクセスします。
再帰問い合わせと反復問い合わせ
再帰問い合わせ(クライアント→リゾルバ):
クライアントがリゾルバ(ローカルDNSサーバ)に1回だけ問い合わせを送ること。リゾルバが全ての問い合わせを代行し、ルートDNS、TLD DNS、権威DNSなどに自動的に問い合わせを行う。最終的にリゾルバが得たIPアドレスをクライアントに返す。
再帰問い合わせは、プログラミングの再帰(自分自身を呼び出す)と同じ考え方です。イメージとしては階乗です。
5! = 5 × 4 × 3 × 2 × 1
という計算は、次のように再帰的に定義できます。
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
2! = 2 × 1!
1! = 1
これと同じで、一度処理を放り投げたらあとは勝手に処理をしてくれるよっていうのが再帰のイメージです。
反復問い合わせ(リゾルバ→各DNSサーバ):
リゾルバ(ローカルDNSサーバ)が各DNSサーバに段階的に問い合わせを行う。リゾルバは各サーバから次に問い合わせるべきサーバの情報を受け取り、自分で次々に問い合わせを進める。
このように、同じ流れを何回も繰り返しています。だから、反復処理です。プログラミングだとFor文に該当する処理です。
まとめ
要するに…
DNS(Domain Name System)は、ドメイン名とIPアドレスの対応を管理するシステムで、これを提供するサーバーをDNSサーバーと呼びます。名前解決とは、ドメイン名から対応するIPアドレスを導き出すプロセスです。この名前解決の流れには、キャッシュの確認とリゾルバの再帰的問い合わせの2つの主要なステップがあります。
まず、クライアントが名前解決を行う際、まず自分のキャッシュを確認します。具体的には、
①ブラウザのキャッシュ、
②OSのキャッシュ、そして
③hostsファイルの内容をチェックします。これらのキャッシュに目的の情報が見つからなかった場合、クライアントは
④DNSリゾルバ(ローカルDNSサーバ)に問い合わせを行います。
DNSリゾルバがクライアントの代わりに名前解決を行うプロセスを再帰問い合わせと呼びます。ここで、クライアントはリゾルバに一度の問い合わせを行い、その後の全ての処理はリゾルバが自動的に進めます。リゾルバは最初に
⑤ルートDNSサーバーに問い合わせを行い、ルートDNSサーバーから
⑥TLDDNSサーバーの情報を得ます。次に、リゾルバはTLD DNSサーバーに問い合わせをし、さらに
⑦権威DNSサーバーの情報を得ます。最終的に、権威DNSサーバーからIPアドレスを取得し、その結果をリゾルバがクライアントに返します。
一方、リゾルバが各DNSサーバーに対して段階的に問い合わせを行うプロセスを反復問い合わせと呼びます。リゾルバは、各DNSサーバーから次のサーバーの情報を受け取りながら、自分で問い合わせを進めていきます。このプロセスを通じて、リゾルバがクライアントに最終的なIPアドレスを返します。
おわりに
本日は『DNS名前解決の流れ』について知見を深めました!
これでまた、一歩成長しました!これからも焦らず、1つずつこれからも頑張っていきましょう!では、さらばじゃっ!また会おうぞ!