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」のようなドメイン名を使用します。Webブラウザは、インターネットプロトコル(IP)アドレスを使用して、相互に通信しています。DNSは、ブラウザがインターネットリソースを読み込めるように、ドメイン名をIPアドレスに変換します。

インターネットに接続された個々のデバイスに一意のIPアドレスがあり、このIPアドレスを使用して、ほかのマシンがそのデバイスを検出します。DNSサーバーの登場で、192.168.1.1などのIPアドレス(IPv4の場合)や、さらに複雑な2400:cb00:2048:1:c629:d7a2のような新しい英数字のIPアドレス(IPv6の場合)を覚える必要がなくなりました。

DNS

DNSの仕組みとは?

DNS解決のプロセスには、ホスト名(www.example.comなど)をコンピューターに優しいIPアドレス(192.168.1.1など)に変換することが含まれます。IPアドレスはインターネット上の各デバイスに与えられ、そのアドレスは適切なインターネットデバイスを見つけるために必要です。特定の家を見つけるために番地が使用されるのと同様です。ユーザーがWebページを読み込む場合、ユーザーがWebブラウザに入力したもの(example.com)を、example.com のWebページを見つけるために必要な機械が読み取れるアドレスに変換する必要があります。

DNS解決の背後にあるプロセスを理解するには、DNSクエリが渡す必要があるさまざまなハードウェアコンポーネントについて学習することが重要です。Webブラウザの場合、DNSルックアップは「舞台裏」で行われ、最初の要求以外はユーザーのコンピューターからの対話を必要としません。

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

  • DNSリカーサー- リカーサーは、図書館のどこかから特定の本を探してくるように求められる司書に例えることができます。DNSリカーサーは、Webブラウザのようなクライアントマシンからアプリケーションを介してクエリを受け取るためのサーバーです。一般に、リカーサーはクライアントのDNSクエリに応えるためにリクエストを追加します。
  • ルートネームサーバー - ルートサーバーは、人間が読めるホスト名をIPアドレスに変換(解決)するための最初のステップです。図書館の目録のようなもので、いろいろな本棚を示すと考えることができます。通常、さらに他の特定場所への参照として機能します。
  • TLDネームサーバー - 最上位のドメインサーバー(TLD)は、図書館の特定の本棚と考えることができます。このネームサーバーは、特定のIPアドレスの検索を引き継ぎ、ホスト名の最後の部分(example.comでは、TLDサーバーは「com」にあたる)をホストします。
  • 権威ネームサーバー- この最終ネームサーバーは、本棚にある辞書に例えることができ、特定の名前をその定義に翻訳できます。権威ネームサーバーは、ネームサーバークエリの最後の段階です。権威ネームサーバーが要求されたレコードへのアクセス権を持つ場合、要求されたホスト名のIPアドレスを、最初のリクエストを行ったDNSリカーサー(図書館司書)に返します。

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

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

再帰DNSリゾルバー

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

DNSの仕組み - DNSクエリの10のステップ

権威DNSサーバー

簡単に言えば、権威DNSサーバーは、DNSリソースレコードを実際に保持し、その責任を負うサーバーです。これは、問い合わせされたリソースレコードで応答するDNSルックアップチェーンの一番下にあるサーバーであり、最終的に、リクエストしているWebブラウザがWebサイトその他のWebリソースにアクセスするために必要なIPアドレスに到達するようにします。権威ネームサーバーは、特定のDNSレコードの信頼できる唯一の情報源であるため、別のソースを照会する必要なく、自身のデータからのクエリを満たすことができます。

DNSクエリの図

foo.example.comや blog.cloudflare.comなどのサブドメインに対するクエリの場合、権威ネームサーバーの後にシーケンスに追加のネームサーバーが追加されることに注意してください。このネームサーバーはサブドメインのCNAMEレコードの保存します。

DNSクエリの図

多くのDNSサービスとCloudflareが提供するDNSサービスには大きな違いがあります。Google DNS、OpenDNS、Comcastなどのプロバイダーなど、さまざまなDNS再帰リゾルバーはすべて、DNS再帰リゾルバーのデータセンターインストールを保持しています。これらのリゾルバーは、DNSに最適化されたコンピューターシステムの最適化されたクラスターを介した迅速かつ簡単なクエリを可能にしますが、Cloudflareがホストするネームサーバーとは根本的に異なります。

Cloudflareは、インターネットの機能に不可欠なインフラストラクチャレベルのネームサーバーを維持しています。重要な例として、Cloudflareがホスティングを部分的に担当する f-rootサーバーネットワークがあります。Fルートは、1日に数十億のインターネットリクエストを処理するルートレベルのDNSネームサーバーインフラストラクチャコンポーネントの1つです。Anycast Networkにより、当社はサービスを中断することなく、大量のDNSトラフィックを処理することが可能です。

DNSルックアップの手順とは?

ほとんどの場合、DNSは適切なIPアドレスに変換されるドメイン名に関係しています。このプロセスがどのように機能するかを学習するには、DNSルックアップが、WebブラウザからDNSルックアッププロセスを通過し、再び戻ってくるパスをたどることが役立ちます。ステップを見てみましょう。

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

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

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

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

  10. ブラウザはIPアドレスに対してHTTPリクエストを行います。
  11. このIPを持つサーバーは、ブラウザにレンダリングするWebページを送信します(ステップ10)。
DNSクエリの図

DNSリゾルバーとは?

DNSリゾルバーは、DNSルックアップの最初の目的地であり、最初の要求を行ったクライアントの対応を担当します。リゾルバーは一連のクエリを開始し、最終的にURLが必要なIPアドレスに変換されます。

注:一般的な非キャッシュDNSルックアップには、再帰クエリと反復クエリの両方が含まれます。

再帰DNSクエリと、再帰DNSリゾルバーを区別することは重要です。クエリは、クエリの解決を必要とするDNSリゾルバーに対して行われるリクエストを指します。DNS再帰リゾルバーは、再帰クエリを受信し、必要なリクエストを送信して応答を処理するコンピュータープログラムです。

DNSクエリの図

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

一般的なDNSルックアップでは、3種類のクエリが発生します。これらのクエリを組み合わせて使用することにより、DNS解決のための最適化されたプロセスにより、移動距離が短縮されます。理想的な状況では、キャッシュされたレコードデータが利用でき、DNSネームサーバーが非再帰クエリを返すことができます。

3種類のDNSクエリ:

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

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

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

DNS Cachingとは?DNS Cachingはどこで行われるか

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

ブラウザDNSキャッシュ

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

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

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

オペレーティングシステムレベルのDNSリゾルバーは、DNSクエリがマシンを離れる前の2番目で最後のローカルの目的地です。このクエリを処理するように設計されたオペレーティングシステム内のプロセスは、一般に「スタブリゾルバー」またはDNSクライアントと呼ばれます。スタブリゾルバーは、アプリケーションからリクエストを取得すると、まず自身のキャッシュをチェックして、レコードがあるかどうかを確認します。もしない場合は、ローカルネットワークの外側で、インターネットサービスプロバイダー(ISP)内のDNS再帰リゾルバーにDNSクエリ(再帰フラグを設定)を送信します。

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

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

  1. リゾルバーにAレコードがなく、権威ネームサーバーのNSレコードがある場合、DNSクエリのいくつかのステップを省略して、これらのネームサーバーに直接クエリします。このショートカットは、ルートおよび.comネームサーバー(example.comの検索)からのルックアップを防止して、DNSクエリの解決をより迅速に行うのに役立ちます。
  2. リゾルバーにNSレコードがない場合はルートサーバーを省略し、TLDサーバー(このケースでは.com)へのクエリを送信します。
  3. 万が一、リゾルバーにTLDサーバーをポイントするレコードがない場合はルートサーバーにクエリが送信されます。こうした場合は、通常DNSキャッシュが削除された後に行われます。

Cloudflare DNSと他のDNSプロバイダーとの違いを詳しく説明します。