0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DNSの仕組みを理解してみた

Posted at

DNSとは?

DNS(Domain Name System)とは、ドメイン名をIPアドレスに変換し、特定のサーバーにリクエストを送ることができるようにするための仕組みです。

必要な理由

インターネット上で通信を行う際、コンピュータは実際にはIPアドレス(例:192.0.2.1)を使用して通信を行います。しかし、人間にとってexample.comのようなドメイン名の方が覚えやすく、理解しやすいため、ドメイン名とIPアドレスを対応付ける仕組みが必要になりました。

DNSは以下の理由で必要不可欠です:

  • 人間にとって分かりやすいgoogle.comの方が142.250.191.14よりも覚えやすい
  • 負荷分散:1つのドメイン名に複数のIPアドレスを紐付けることで、トラフィックを分散できる
  • サービス管理:同じサーバーで複数のサービスを提供する際に、異なるドメイン名で区別できる

名前解決に必要な主要な構成要素

DNSの名前解決には、以下の主要な構成要素が関与します:

1. DNSクライアント(リゾルバ)

  • ブラウザやアプリケーションからDNS問い合わせを開始するプログラム
  • 通常はOSに組み込まれている

2. 再帰リゾルバ(Recursive Resolver)

  • クライアントからの問い合わせを受け取り、最終的な答えを見つけるまで問い合わせを続けるサーバー
  • ISPが提供するDNSサーバーや、Google Public DNS(8.8.8.8)、Cloudflare DNS(1.1.1.1)など
  • キャッシュ機能を持ち、一度解決したドメイン名を一時的に保存する

3. ルートネームサーバー(Root Name Server)

  • DNS階層の最上位に位置するサーバー
  • 全世界に13台存在し、各トップレベルドメイン(.com、.org、.jpなど)の権威ネームサーバーの情報を保持
  • 例:.comドメインの権威ネームサーバーはどこにあるかを教えてくれる

4. 権威ネームサーバー(Authoritative Name Server)

  • 特定のドメインに関する情報を正式に管理するサーバー
  • ドメインの所有者が設定・管理する
  • 最終的なIPアドレス情報を提供する

クライアントがIPアドレスを知るまで

クライアントがIPアドレスを知るまでの流れは、以下のような段階を経ます:

  1. クライアント側の問い合わせ:ブラウザがexample.comにアクセスしようとする
  2. 再帰リゾルバへの問い合わせ:クライアントは再帰リゾルバに「example.comのIPアドレスは?」と問い合わせる
  3. 階層的な問い合わせ:再帰リゾルバがルートサーバー、TLDサーバー、権威ネームサーバーへ順に問い合わせる
  4. 結果の返却:最終的に得られたIPアドレスがクライアントに返される
  5. キャッシュ:再帰リゾルバは結果をキャッシュし、次回の問い合わせを高速化する

名前解決のステップ

再帰的な問い合わせの流れ

以下は、www.example.comのIPアドレスを取得する際の典型的な再帰的な問い合わせの流れです:

┌─────────┐
│ クライアント │
│ (ブラウザ) │
└────┬────┘
     │ 1. www.example.comのIPアドレスは?
     ▼
┌─────────────────┐
│ 再帰リゾルバ      │
│ (ISPのDNSサーバー)│
└────┬────────────┘
     │ 2. www.example.comのIPアドレスは?
     ▼
┌─────────────────┐
│ ルートネームサーバー │
│ (.)              │
└────┬────────────┘
     │ 3. .comの権威ネームサーバーは?
     ▼
┌─────────────────┐
│ TLDネームサーバー  │
│ (.com)          │
└────┬────────────┘
     │ 4. example.comの権威ネームサーバーは?
     ▼
┌─────────────────┐
│ 権威ネームサーバー  │
│ (example.com)   │
└────┬────────────┘
     │ 5. www.example.comのIPアドレスは 192.0.2.1
     ▼
┌─────────────────┐
│ 再帰リゾルバ      │
│ (結果をキャッシュ) │
└────┬────────────┘
     │ 6. IPアドレス: 192.0.2.1
     ▼
┌─────────┐
│ クライアント │
│ (ブラウザ) │
└─────────┘

詳細なステップ説明

  1. クライアントから再帰リゾルバへ

    • ブラウザがwww.example.comにアクセスしようとする
    • OSのDNSリゾルバが、設定されている再帰リゾルバ(例:8.8.8.8)に問い合わせる
  2. 再帰リゾルバからルートサーバーへ

    • 再帰リゾルバは、まずルートネームサーバーに問い合わせる
    • ルートサーバーは「.comドメインの情報は、.comのTLDネームサーバーに聞いてください」と返答
  3. TLDネームサーバーへ

    • 再帰リゾルバは.comのTLDネームサーバーに問い合わせる
    • TLDサーバーは「example.comの情報は、example.comの権威ネームサーバーに聞いてください」と返答
  4. 権威ネームサーバーへ

    • 再帰リゾルバはexample.comの権威ネームサーバーに問い合わせる
    • 権威ネームサーバーは「www.example.comのIPアドレスは192.0.2.1です」と返答
  5. 結果の返却とキャッシュ

    • 再帰リゾルバは結果をクライアントに返す
    • 同時に、結果をキャッシュに保存する(TTL:Time To Liveに従って一定時間保持)

キャッシュの重要性

一度名前解決が完了すると、再帰リゾルバは結果をキャッシュに保存します。次回同じドメイン名への問い合わせがあった場合、キャッシュから即座に結果を返すことができるため、DNS問い合わせの速度が大幅に向上します。

まとめ

DNSは、人間が理解しやすいドメイン名を、コンピュータが通信に使用するIPアドレスに変換するための重要な仕組みです。

  • DNSの役割:ドメイン名とIPアドレスの対応付け
  • 主要な構成要素:DNSクライアント、再帰リゾルバ、ルートネームサーバー、TLDネームサーバー、権威ネームサーバー
  • 再帰的な問い合わせ:階層的な構造を利用して、ルートサーバーから順に問い合わせを進め、最終的に権威ネームサーバーからIPアドレスを取得する
  • キャッシュ機能:一度解決した結果を保存することで、次回の問い合わせを高速化する

この仕組みにより、私たちはgoogle.comgithub.comのようなドメイン名で、世界中のサーバーにアクセスできるようになっています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?