DNS とは何ですか? | DNS の仕組み

DNSとは、ユーザーがIPアドレスではなく、ドメイン名を使用して、Webサイトに接続できるようにするものです。DNSの仕組みを学習します。

Share facebook icon linkedin icon twitter icon email icon

DNS

学習目的

この記事を読み終えると、以下のことができます。

  • DNSの定義
  • DNSの仕組みを理解する
  • 再帰DNSルックアップと対話型DNSルックアップの違い
  • 再帰DNSリゾルバーと権威ネームサーバーの区別
  • DNSキャッシングの仕組みを学習します

DNSとは?

ドメインネームシステム(DNS)とは、いわばインターネットの「電話帳」です。オンラインの情報にアクセスする際には、「nytimes.com」や「espn.com」のようなドメイン名を使用します。ウェブブラウザは、インターネット・プロトコル(IP)アドレスを使用して、相互に通信しています。DNSは、ドメイン名を、IPアドレスに変換(翻訳)することで、ブラウザが、インターネットで情報を読み込めるようになります。

インターネットに接続されたデバイスには、一意のIPアドレスが割り当てられており、他のデバイスが、そのデバイスを見つけるために使用されます。DNSサーバーは、たとえば人間のユーザーが「192.168.1.1」(IPv4)あるいはより複雑で新しい英数字のIPアドレス「2400:cb00:2048:1::c629:d7a2」(IPv6)のようなIPアドレスを記憶する必要をなくします。

DNS

DNSの仕組みは?

DNS解決プロセスには、ホスト名(www.example.comなど)をコンピューターが読み取れるIPアドレス(192.168.1.1のような)に変換することが含まれます。IPアドレスは、インターネット上の各デバイスに割り当てられ、探しているインターネットデバイスを見つけるために必要なものです - これは、番地を使用して、特定の住宅を見つけることに例えられます。 ユーザーがウェブページを読み込む場合、ウェブブラウザにユーザーが入力した英数字のアドレス(example.com)を、この「example.com」ウェブページを見つけるため、機械で読み取れるアドレスに翻訳する必要があります。

DNS解決のプロセスを理解するには、DNSクエリを処理するさまざまなハードウェア構成部品に関して学習することが重要です。ウェブブラウザでは、DNSルックアップは「バックグラウンドで」行われています。また最初のリクエスト以外には、ユーザーのコンピューターからの操作や応答は必要としません。

ウェブ・ページの読み込みには4つのDNSサーバーが関与しています:

  • DNSリカーサー-リカーサーは、図書館員のように、ユーザーの依頼を受けて、図書館のどこかにある特定の本を見つけます。DNSリカーサーは、ウェブブラウザのようなクライアントマシンからアプリケーションを介してクエリを受け取るためのサーバーです。典型的には、リカーサーは、クライアントのDNSクエリに応えるためにリクエストを追加します。
  • ルートネームサーバー- ルートサーバーは、人間が判読できるホスト名を、最初にIPアドレスに翻訳(解決)します。これは、図書館内で、さまざまな書棚や書架を示すインデックスのような役割をしており、典型的にはより詳しい位置を参照します。
  • TLDネームサーバー-「トップレベルドメインサーバー」(TLD)とは、いわば図書館内で、目的の本が収蔵されている書架のようなものです。このネームサーバーは、特定のIPアドレスの検索を引き継ぎ、ホスト名の最後の部分(example.comでは、TLDサーバーは「com」にあたる)をホストします。
  • 権威ネームサーバー-この最終ネームサーバーは、書架の辞書の役割をしており、特定の名前を、定義に翻訳します。権威ネームサーバーはネームサーバークエリの最後の段階です。権威ネームサーバーが要求された記録にアクセスすると最初に要求したDNS リカーサー(図書館員)に、要求されたホスト名のIPアドレスを送信します。

権威DNSサーバーと再帰DNSリゾルバ―の違いは?

いずれの概念も、DNSインフラストラクチャに不可欠なサーバー(グループのサーバー)を指します。しかし、それぞれ異なる役割を果たし、DNSクエリのパイプライン内部で異なる場所に位置しています。違いの一つは、再帰リゾルバーは、DNSクエリの初めにあり、権威ネームサーバーはクエリの最後にある点です。

再帰DNSリゾルバー

再帰リゾルバーは、クライアントからの再帰リクエストに応え、DNSレコードを追跡するコンピューターです。要求されたレコードのある権威DNSネームサーバーに達するまで、一連のリクエストを行います(あるいはレコードが見つからない場合は、タイムアウトするか、エラーを返します)。幸い、再帰DNSリゾルバーは、クライアントに応答するレコードを見つけるために、必ずしも何度もリクエストを送信する必要はありません。キャッシングは、DNSルックアップから以前要求されたことがあるリソースレコードを提供することで、必要なリクエスト応答を素早く送信するデータパーシスタンスプロセスです。

DNS query diagram

権威DNSサーバー

簡単に言えば、権威DNSサーバーは、実際にDNSリソースレコードを保持し、管理するサーバーです。このサーバーは、DNSルックアップチェーンの最下部のサーバーです。クエリを受けたリソースレコードを応答し、究極的には、Webサイトあるいはその他ウェブリソースにアクセスできるIPアドレスを、Webブラウザで取得するためのリクエストを行えるようにします。権威ネームサーバーは、あるDNSレコードの最終的なリソースであり、このため、別のリソースにクエリを送信する必要がなく、このサーバー自身のデータでクエリに応答できます。

DNS query diagram

クエリが「foo.example.com」あるいは「blog.cloudflare.com」のようなサブドメインについてのものである場合、権威ネームサーバーの後のシーケンスにネームサーバーが追加されます。追加されたネームサーバーは、サブドメインのCNAMEレコードの保存を行います。

DNS query diagram

その他の多くのDNSサービスと、Cloudflareが提供するサービスには、重要な違いがあります。 Google DNS, OpenDNSなどのDNS再帰リゾルバーおよびコムキャストのようなプロバイダーは、すべて、DNS再帰リゾルバーのデータセンターデバイスを維持しています。これらのリゾルバーは、DNS最適化コンピュータ・システムのクラスタを最適化することで、迅速で容易なクエリを可能にします。しかし、これらは、Cloudflareがホストしているネームサーバーとは根本的に異なります。

Cloudflareは、インターネットの機能に不可欠な、インフラストラクチャレベルのネームサーバーを維持しています。1つの重要な例はF-ルートサーバーネットワークで、Cloudflareが一部をホストしています。F-ルートは、1日当たりの数十億ものインターネット・リクエストを処理する、ルートレベルDNSネームサーバーインフラストラクチャの構成部分の1つです。私たちのAnycast Networkは、多くのDNSトラフィックを中断なく処理する、独自のサービスを提供します。

DNSルックアップの各段階はどのようなものですか?

ほとんどの状況で、DNSは適切なIPアドレスに翻訳されたドメイン名に関係しています。このプロセスの仕組みを理解するために、ウェブ・ブラウザからDNSルックアッププロセスまでの往復のDNSルックアップ経路をたどってみましょう。ではステップを見ていきます。

注:DNSルックアップ情報には、しばしば、クエリを行うコンピューターの内部でローカルによるキャッシュ、あるいはDNSインフラストラクチャでリモートによるキャッシュが行われています。DNSルックアップには、通常8つのステップがあります。DNS情報がキャッシュされる場合、迅速化が行われ、DNSルックアッププロセスから一部のステップがスキップされます。下の例は、何もキャッシュされたものがなく、8つすべてのステップが実行されている場合です。

DNSルックアップの 8 つのステップ:

  1. ユーザーは「example.com」をウェブ・ブラウザに入力します。クエリはインターネットに送信され、DNS再帰リゾルバー」がクエリを受け取ります。
  2. その後、リゾルバーはDNSルートネームサーバー (.)へのクエリを行います。
  3. その後、ルートサーバーがリゾルバーに応答し、そのドメインの情報を保存しているトップレベル・ドメイン(TLD)DNSサーバーのアドレス(.comまたは.netなど)を送信します。「example.com」を検索する場合、リクエストは.「com」の TLDをポイントして(指し示して)います。
  4. リゾルバー」は「.com」TLDへのリクエストを行います。
  5. 次にTLDサーバーが応答し、ドメインネームサーバー「example.com」のIPアドレスを送信します。
  6. 最後に再帰リゾルバーは、ドメインネームサーバーへのクエリを送信します。
  7. その後、ネームサーバーからリゾルバーに応答し、「example.com」のIPアドレスが送信されます。
  8. 次に、DNSリゾルバーがウェブブラウザに応答し、当初要求されたドメインのIPアドレスを送信します。

  9. 8ステップを完了し、DNSルックアップでexample.comのIPアドレスを取得すると、ブラウザはWebページにリクエストを送信することができるようになります:

  10. ブラウザは取得したIPアドレスにHTTPリクエストを行います。
  11. このIPを持つサーバーは、ブラウザに、要求されたウェブページを送信します(ステップ10)。
DNS query diagram

DNSリゾルバーとは?

DNSリゾルバーは、DNSルックアップ中の最初の段階として、最初のリクエストを行ったクライアントに応答します。リゾルバーは、必要なURLを、IPアドレスに変換(翻訳)するクエリのシーケンスの、最初の部分です。

注:キャッシュを行わない場合の典型的なDNSルックアップは再帰と対話型クエリの両方を含みます。

再帰DNSクエリと、再帰DNSリゾルバーを区別することは重要です。クエリとは、DNSリゾルバーに送信されるリクエストを指し、クエリの「解決」を要求しています。DNS再帰リゾルバーは、再帰クエリを受信し、必要な応答を送信してレスポンスを処理するコンピューターです。

DNS query diagram

DNSクエリにはどのような種類がありますか?

典型的なDNSルックアップには3つのタイプのクエリがあります。これらのクエリを組み合わせて使用することによって、DNS解決のプロセスを最適化し、距離が縮小できます。理想的な状態では、キャッシュされたレコード・データが提供され、DNSネームサーバーでは、非再帰クエリを返すことが可能になります。

3種類のDNSクエリ:

  1. 再帰クエリ-再帰クエリでは、DNSクライアントが、DNSサーバー(典型的にDNS再帰リゾルバー)に対して、要求されたリソースレコードをクライアントに応答する、あるいはリゾルバーがレコードを見つけることができない場合にはエラー・メッセージを応答することを要求します。

  2. 反復クエリ-DNSクライアントは、DNSサーバーが、可能な限り最良の応答ができるようにします。DNSサーバー内で、クエリ名に一致するものがない場合は、応答として、より低いレベルのドメインネームスペースの権威DNSサーバーへのリファラルが送信されます。その後、DNSクライアントから、参照されたアドレスへのクエリを行います。このプロセスは、クエリチェーンのDNSサーバーをたどり、エラーかタイムアウトのいずれかが生じるまで続きます。

  3. 非再帰クエリ-典型的に、DNSリゾルバークライアントがDNSサーバーにクエリを送信し、送信先がそのレコードの権威サーバーであった、あるいはレコードがキャッシュ内部にすでに存在した場合に生じます。典型的には、DNSサーバーは、DNSレコードをキャッシュで保存し、帯域幅消費を防止し、上流サーバーで読み込めるようにしています。

DNSキャッシュとは?DNSキャッシュはどこで生じていますか?

キャッシュ保存の目的は、データを一時的に保存し、データ・リクエストのパフォーマンスおよび信頼性を改善することです。DNSキャッシングには、リクエストを行ったクライアントに近いデータを保存し、DNSクエリを迅速に解決し、DNSルックアップチェーンのそれ以上のクエリが不要になり、これによって所要時間を改善し、帯域幅/CPU消費を削減することが含まれます。DNSデータはキャッシュとして様々な位置に保存することができます。それぞれの場所にDNSレコードを一定時間保存し、保存時間は、「タイムトゥーリブ (TTL)」によって決定されています。

ブラウザDNSキャッシング

最新のウェブブラウザは、一定時間DNSレコードをデフォルトでキャッシュするよう設計されています。その目的は明白です。DNSキャッシングがウェブブラウザから近い位置で生じるほど、キャッシュをチェックする処理ステップが少なくなり、IPアドレスへのリクエストを正確に行えるようになるためです。DNSレコードのリクエストが行われた場合、要求されたレコードがあるかどうか、最初にブラウザ内のキャッシュをチェックします。

Chromeで、chrome://net-internals/#dnsから、DNSキャッシュのステータスを見ることができます。

オペレーティング・システム(OS)レベルのDNSキャッシュ

オペレーティングシステム・レベルDNSリゾルバーは、―DNSクエリーがPCから送信される前の二番目と最後の段階です。オペレーティング・システムの内部でこのクエリーを処理するプロセスは一般に「スタブリゾルバー」あるいはDNSクライアントと呼ばれます。スタブリゾルバーがアプリケーションからリクエストを取得した場合、最初に自身のキャッシュに、一致するレコードがあるかどうかチェックします。一致するレコードがない場合、インターネットサービスプロバイダー(ISP)の内部かつローカル・ネットワークの外部で、DNS再帰リゾルバーに、DNSクエリ(再帰フラグをセットした状態)を送信します。

ISP内部の再帰リゾルバーが、DNSクエリを受け取ると、前のすべてのステップと同様に、ホストから要求されたIPアドレスへの翻訳がローカルのパーシスタンス層内部に既にあるかどうかをチェックします。

再帰リゾルバーにはキャッシュされたレコードのタイプに応じた追加機能もあります:

  1. リゾルバーにはA レコードがなく、権威ネームサーバーのNSレコードがある場合は、DNSクエリの数ステップを省略し、これらのネームサーバーに直接クエリを送信します。このショートカットで、ルートと「.com」のネームサーバーのルックアップを防止し(この検索ではexample.com)、DNSクエリの解決を高速化します。
  2. リゾルバーにNSレコードがない場合はルートサーバーを省略し、TLDサーバー(このケースでは「com」)へのクエリを送信します。
  3. 万が一リゾルバーにTLDサーバーをポイントするレコードがない場合はルートサーバーにクエリが送信されます。こうした場合は、典型的にはDNSキャッシュが削除された後に発生します。

その他のDNSプロバイダーとCloudflare DNSの違いについてを学習します。