この記事では、ドメイン ネーム システム (DNS) クエリ プロセスの概要と、DNS サーバーがクエリを解決する方法について説明します。 また、DNS サーバーが再帰とイテレーションを使用してクエリを解決する方法についても説明します。
DNS クエリのしくみ
DNS クライアントは、名前を検索する必要がある場合、DNS サーバーにクエリを実行して名前を解決します。 クライアントが送信する各クエリ メッセージには、サーバーが回答するための質問を指定する 3 つの情報が含まれています。
- 完全修飾ドメイン名 (FQDN) として記述された、指定された DNS ドメイン名。
- 指定したクエリの種類。リソース レコード (RR) を種類別に指定することも、特殊な種類のクエリ操作を指定することもできます。
- DNS ドメイン名の指定されたクラス。 Windows オペレーティング システムを実行している DNS サーバーの場合、このクラスは常にインターネット (IN) クラスとして指定する必要があります。
たとえば、指定した名前は、 host-a.example.contoso.com.などのコンピューターの FQDN と、その名前でアドレス (A) RR を検索するために指定されたクエリの種類です。 DNS クエリは、サーバーに 2 部構成の質問をするクライアントと考えます。たとえば、" hostname.example.contoso.com.という名前のコンピューターのリソース レコードはありますか?クライアントは、サーバーから応答を受信すると、応答された A RR を読み取って解釈し、名前で要求したコンピューターの IP アドレスを学習します。
次の表では、一般的な DNS クエリの種類と対応する ID について説明します。
| タイプ | ID |
|---|---|
| A | 1 |
| AAAA | 28 |
| SOA | 6 |
| SRV | 33 |
DNS クエリは、さまざまな方法で解決されます。 クライアントは、前のクエリから取得したキャッシュされた情報を使用して、ローカルでクエリに応答できる場合があります。 DNS サーバーは、リソース レコード情報の独自のキャッシュを使用してクエリに応答できます。 DNS サーバーは、クライアントに代わって他の DNS サーバーにクエリを実行することもできます。 このプロセスは再帰と呼ばれます。 サーバーは名前を解決し、応答をクライアントに返します。
さらに、クライアント自体は、他の DNS サーバーに接続して名前を解決しようとします。 クライアントは、その場合、サーバーからの紹介の回答に基づいて個別のクエリを使用します。 このプロセスはイテレーションと呼ばれます。
一般に、DNS クエリ プロセスは次の 2 つの部分で行われます。
- 名前クエリはクライアント コンピューターで開始され、解決のためにリゾルバー (DNS クライアント サービス) に渡されます。
- クエリをローカルで解決できない場合は、名前を解決するために必要に応じて DNS サーバーを照会できます。
各プロセスについては、この記事で詳しく説明します。
イテレーションのしくみ
イテレーションは、次の条件が有効な場合に DNS クライアントとサーバーの間で使用される名前解決の種類です。
- クライアントは再帰の使用を要求しますが、DNS サーバーでは再帰が無効になっています。
- クライアントは、DNS サーバーに対してクエリを実行するときに再帰の使用を要求しません。
クライアントからの反復的な要求は、他の DNS サーバーに接続することなく、DNS サーバーがすぐに提供できる最善の答えをクライアントが期待していることを DNS サーバーに通知します。
反復処理を使用すると、DNS サーバーは、クエリ対象の名前データに関する名前空間に関する独自の特定の知識に基づいてクライアントに応答します。 たとえば、イントラネット上の DNS サーバーがローカル クライアントから www.contoso.comのクエリを受け取った場合、その名前キャッシュから応答が返される可能性があります。 クエリされた名前が現在サーバーの名前キャッシュに格納されていない場合、サーバーは紹介を提供して応答する可能性があります。 紹介とは、クライアントによってクエリが実行される名前に近い他の DNS サーバーの NS と RR の一覧です。
反復処理を使用すると、DNS サーバーは、クライアントに独自の最良の回答を返すだけでなく、名前クエリの解決に役立ちます。 ほとんどの反復クエリでは、プライマリ DNS サーバーがクエリを解決できない場合、クライアントはローカルに構成された DNS サーバーの一覧を使用して、DNS 名前空間全体の他のネーム サーバーに接続します。
Windows DNS クライアント サービスは再帰を実行しません。
キャッシュのしくみ
DNS サーバーは、再帰または反復を使用してクライアント クエリを処理すると、DNS 名前空間に関する重要な情報のストアを検出して取得します。 その後、サーバーはこの情報をキャッシュします。
キャッシュを使用すると、一般的な名前の後続のクエリに対する DNS 解決のパフォーマンスを高速化しながら、ネットワーク上の DNS 関連のクエリ トラフィックを大幅に削減できます。
DNS サーバーは、クライアントに代わって再帰クエリを実行するため、リソース レコードを一時的にキャッシュします。 キャッシュされたリソース レコードには、DNS サーバーから取得した情報が含まれます。 これらのサーバーは、DNS ドメイン名に対して権限を持ちます。 この情報は、反復クエリの実行中に学習されます。 これらのクエリは、クライアントに代わって実行される再帰クエリに完全に応答するのに役立ちます。 後で、他のクライアントがキャッシュされたレコードに一致するリソース レコード情報を要求する新しいクエリを実行すると、DNS サーバーはキャッシュされた情報を使用して応答できます。
情報がキャッシュされると、Time-To-Live (TTL) 値がキャッシュされたすべてのリソース レコードに適用されます。 キャッシュされたリソース レコードの TTL が期限切れにならない限り、DNS サーバーはキャッシュを続行できます。 これらのレコードに一致するクライアントからのクエリに応答するときに、キャッシュされたリソース レコードを再度使用できます。 ほとんどのゾーン構成でリソース レコードによって使用されるキャッシュ TTL 値には、ゾーンの Start of Authority (SOA) リソース レコードで設定されている最小 (既定) TTL が割り当てられます。 既定では、最小 TTL は 3,600 秒 (1 時間) ですが、調整することも、必要に応じて各リソース レコードで個別のキャッシュ TTL を設定することもできます。
Note
既定では、DNS サーバー サービスは、サーバー コンピューターのcache.dns フォルダーに格納されているルート ヒント ファイル (<systemroot>\System32\Dns) を使用します。 このファイルには、DNS 名前空間のルート サーバー (インターネット ルート サーバーまたはイントラネット ルート サーバー) の NS および A リソース レコードが含まれています。 DNS サーバー サービスが開始されると、ルート サーバーの一覧に対して、すべてのルート サーバーの現在の一覧が照会されます。 クエリの結果は、ルート ヒント ファイルの更新に使用されます。 この操作は、サービスの実行中にも定期的に実行されます。 管理者によってルート ヒントに変更が加えられた場合、これらの変更はルート ヒント ファイルに書き戻されます。
DNS クライアント サービス リゾルバー
ローカル コンピューター上のプログラムで DNS ドメイン名が使用されている場合、要求は解決のために DNS クライアント サービスに渡され、最初にローカルにキャッシュされた情報がチェックされます。 クエリされた名前を解決できる場合は、クエリに応答し、プロセスが完了します。
次の図は、名前解決のために DNS クライアント サービスにクエリを実行する DNS クライアントの簡単な例を示しています。
ローカル リゾルバー キャッシュには、次の 2 つの可能なソースから取得した名前情報を含めることができます。
Hosts ファイルがローカルで構成されている場合、DNS クライアント サービスの開始時に、そのファイルからホスト名とアドレスへのマッピングがキャッシュに読み込まれます。
以前の DNS クエリからの応答で取得されたリソース レコードはキャッシュに追加され、Time-to-Live (TTL) によって決定された時間保持されます。
クエリがキャッシュ内のエントリと一致しない場合、解決プロセスはクライアントが DNS サーバーに対してクエリを実行して名前を解決します。
次の図は、DNS クエリのキャッシュをチェックする DNS クライアント サービスを示しています。
複数の DNS サーバー IP を使用して DNS クライアントを構成すると、DNS インフラストラクチャにフォールト トレランスが追加されます。 複数の DNS サーバー IP を追加すると、プライマリ DNS サーバー、ネットワーク リンク、またはサポート インフラストラクチャで障害が発生した場合でも、DNS 名を解決できます。
名前エラーによって、アプリケーションまたはコンポーネントのハング、依存タイムアウトの有効期限を待機するリソース停止が発生し、運用エラーを直接または間接的に引き起こす可能性があります。 考えられるすべてのシナリオについて詳しくは、 DNS クライアント解決のタイムアウト に関する記事をご覧ください。
これらの理由から、複数の DNS サーバーを使用して Windows クライアントを構成することをお勧めします。 ただし、Windows クライアント解決プロセスは、構成されている DNS サーバーの数によって異なります。
DNS サーバーのクエリ プロセス
DNS サーバーは、クエリを受け取ると、最初にクエリに対して権限を持って応答できるかどうかを確認します。 DNS サーバーは、サーバー上のローカルに構成されたゾーンに含まれているリソース レコード情報を使用してチェックを行います。
照会された名前がローカル・ゾーン情報内の対応する RR と一致する場合、サーバーはこの情報を使用して照会された名前を解決して、権限を持って応答します。
クエリされた名前のゾーン情報が存在しない場合、サーバーは、以前のクエリからローカルにキャッシュされた情報を使用して名前を解決できるかどうかを確認します。 ここで一致するものが見つかった場合、サーバーはこの情報で応答します。 ここでも、優先サーバーがキャッシュから要求側クライアントへの肯定的な一致応答で応答できる場合は、クエリが完了します。
クエリされた名前が、キャッシュ情報またはゾーン情報から優先サーバーで一致する回答を見つけられない場合は、再帰を使用して名前を完全に解決することで、クエリ プロセスを続行できます。 このプロセスには、名前の解決に役立つ他の DNS サーバーからの支援が含まれます。 既定では、DNS クライアント サービスは、応答を返す前に、再帰のプロセスを使用してクライアントの代わりに名前を完全に解決するようにサーバーに要求します。
DNS サーバーが再帰を適切に実行するには、まず DNS ドメイン名前空間内の他の DNS サーバーに関する有用な連絡先情報が必要です。 この情報はルート ヒントとして提供されます。 ルート ヒントは、予備リソース レコードの一覧です。 DNS サービスは、これらのレコードを使用して、DNS ドメイン名前空間ツリーのルートに対して権限のある他の DNS サーバーを見つけます。 ルート サーバーは、DNS ドメイン名前空間ツリー内のドメイン ルートドメインと最上位ドメインに対して権限を持ちます。
ルート ヒントを使用してルート サーバーを見つけることで、DNS サーバーは再帰の使用を完了できます。 理論上、このプロセスにより、すべての DNS サーバーは、名前空間ツリー内の任意のレベルで使用される他の DNS ドメイン名に対して権限のあるサーバーを見つけることができます。
次の手順では、DNS サーバーに対してクエリを実行するプロセスについて説明します。
クエリが完全修飾ドメイン名 (FQDN) である場合は、終了ドット (
.) で終わると、クエリが DNS サーバーに送信されます。 たとえば、www.contoso.com.のように指定します。クエリが修飾されていないマルチラベル クエリである場合、つまり終了ドット (
.) で終わらない場合、DNS クライアントは終了ドット (.) で DNS サーバーに送信します。 たとえば、www.contoso.com.のように指定します。非修飾が、
wwwなどの単一ラベル クエリの場合。 その後、NIC の DNS 設定に基づいて動作が異なります。DNS サフィックス検索リストがある場合、DNS クライアント サービスは、最初から最後の順に単一ラベル クエリに追加し、終了ドット (
.) を含むクエリを DNS サーバーに送信します。 このプロセスは、すべての DNS サフィックス検索リストが使用されるまで繰り返されるプロセスです。DNS サフィックス検索リストが構成されていない場合、DNS クライアント サービスは、終了ドット (
.) を持つ単一ラベル クエリにプライマリ DNS サフィックスを追加し、DNS サーバーに送信します。DNS クライアントは、名前のデボルブを実行するように構成されている場合、プライマリ DNS サフィックスをデボルブし、プライマリ DNS サフィックスが失敗した場合は終了ドット (
.) で別のクエリを送信します。 たとえば、www.test.contoso.comの解決が失敗した場合、クライアントはwww.contoso.comに移行します。アダプターに接続固有の DNS サフィックスが構成されている場合は、終了ドット (
.) でクエリが追加され、DNS サーバーに送信されます。
いずれの場合も、応答が正か負かに関係なく、応答は DNS クライアント キャッシュに格納されます。
次のフローチャートは、DNS サーバーに対してクエリを実行するプロセスを示しています。
DNS 再帰
再帰プロセスを使用して、クライアントが 1 つの DNS サーバーに対してクエリを実行するときに host-b.example.contoso.com. 名前を見つけることを検討してください。 このプロセスは、DNS サーバーとクライアントが最初に開始され、名前クエリの解決に役立つローカルキャッシュ情報がない場合に発生します。 クライアントによって照会される名前は、構成されたゾーンに基づいて、サーバーがローカルの知識を持たないドメイン名を対象としていることを前提としています。
最初に、優先サーバーはフル ネームを解析し、最上位ドメイン ( com) に対して権限のあるサーバーの場所が必要であると判断します。 その後、 com DNS サーバーへの反復クエリを使用して、 contoso.com サーバーへの紹介を取得します。 次に、contoso.com サーバーから DNS サーバーに example.contoso.com向けのリファラル応答が送信されます。
最後に、 example.contoso.com. サーバーに接続します。 このサーバーには、構成されたゾーンの一部としてクエリされた名前が含まれているため、再帰を開始した元のサーバーに対して権限を持って応答します。 元のサーバーが応答を受信すると、応答が権限があるかどうかを確認します。 その場合、サーバーはこの応答を要求元のクライアントに転送し、再帰クエリ プロセスを完了します。
再帰クエリ プロセスは、説明に従って実行するとリソースを大量に消費する可能性がありますが、DNS サーバーのパフォーマンス上の利点がいくつかあります。 たとえば、再帰プロセス中に、再帰検索を実行する DNS サーバーは DNS ドメイン名前空間に関する情報を取得します。 サーバーは情報をキャッシュします。この情報を再び使用して、使用または一致する後続のクエリの応答を高速化できます。 時間の経過とともに、このキャッシュされた情報は、サーバー メモリ リソースのかなりの部分を占めるまで増大する可能性があります。 DNS サービスが再起動されるたびにキャッシュがクリアされます。
DNSクエリの適応タイムアウト
DNS クエリ アダプティブ タイムアウト機能を使用すると、以前のクエリに必要な時間に基づいて DNS クエリのタイムアウトを調整でき、ほとんどのクエリのタイムアウトが短縮されます。 サテライト リンクなどの待機時間の長いリンクでは、タイムアウトを増やすこともできます。 Windows ストア アプリでは、ネットワーク インターフェイスごとに DNS タイムアウトの構成を最適化できます。
DNS クエリをタイムアウトする前に 1,000 ミリ秒待つ代わりに、ネットワークの過去のパフォーマンスに基づいて、最初のタイムアウトは 25 ミリ秒から 1,000 ミリ秒の間に調整されます。
DNS サーバーの応答しないキャッシュ
応答しない DNS サーバーはキャッシュされ、定期的に再試行されます。 この廃止により、DNS クライアントは使用可能な最高のサーバーを一貫して使用でき、応答しない DNS サーバーの待機に費やす時間を減らすことができます。
次の図は、このセクションのプロセスを使用して、DNS クライアントが各アダプター上の各サーバーに対してクエリを実行する例を示しています。
DNS クライアント サービスは、次の順序で DNS サーバーに対してクエリを実行します。
DNS クライアント サービスは、優先アダプターの DNS サーバーの一覧にある最初の DNS サーバーに名前クエリを送信し、応答を 1 秒間待機します。
DNS クライアント サービスは、1 秒以内に最初の DNS サーバーから応答を受信しない場合、まだ検討中のすべてのアダプターの最初の DNS サーバーに名前クエリを送信し、応答を 2 秒間待機します。
DNS クライアント サービスは、2 秒以内に DNS サーバーから応答を受信しない場合、まだ検討中のすべてのアダプター上のすべての DNS サーバーにクエリを送信します。 その後、DNS クライアント サービスは応答を 2 秒間待機します。
DNS クライアント サービスが引き続き DNS サーバーから応答を受信しない場合は、まだ検討中のすべてのアダプター上のすべての DNS サーバーに名前クエリを送信し、応答を 4 秒間待機します。
DNS クライアント サービスが DNS サーバーから応答を受信しない場合、DNS クライアントは、まだ検討中のすべてのアダプター上のすべての DNS サーバーにクエリを送信し、応答を 8 秒間待機します。
DNS クライアント サービスが 8 秒以内にサーバーから応答を受信しない場合、DNS クライアント サービスはタイムアウトで応答します。DNS クライアント サービスは、特定のアダプター上の DNS サーバーから応答を受信しない場合、そのアダプターで次の 30 秒間、それらのサーバーへのすべてのクエリをタイムアウトします。
DNS クライアント サービスがサーバーから否定的な応答を受け取った場合、この検索中に、そのアダプター上のすべてのサーバーが考慮から除外されます。 たとえば、代替アダプター A の最初のサーバーが手順 2 で否定応答を返した場合、DNS クライアント サービスは、代替アダプター A の一覧の他のサーバーに対してクエリを実行しません。
DNS クライアント サービスは、肯定的な応答を受信すると、名前のクエリを停止し、応答をキャッシュに追加して、クライアントに応答を返します。
DNS クライアント サービスは、名前クエリに応答するサーバーをより迅速に追跡し、名前クエリに応答する速度に基づいてサーバーを一覧の上または下に移動します。
代替クエリ応答
上記の DNS クエリの説明では、プロセスが終了し、クライアントに正の応答が返されることを前提としています。 ただし、クエリは他の回答も返すことができます。 最も一般的なクエリの回答を次に示します。
- 信頼できる回答
- 肯定的な答え
- 紹介の応答
- 否定的な答え
信頼できる回答は、クエリされた名前に対する直接的な権限を持つ DNS サーバーからの肯定的な応答です。 この回答には、その信頼性を示すために DNS メッセージに設定された機関ビットが含まれます。
正の応答は、クエリ対象の RR、またはクエリ メッセージで指定されたクエリされた DNS ドメイン名とレコードの種類に適合する RR の一覧 (RR セットとも呼ばれます) で構成できます。
紹介の応答には、クエリの名前または種類で指定されていない他の RR が含まれています。 再帰プロセスがサポートされていない場合、この種類の回答がクライアントに返されます。 レコードは、クライアントが反復を使用してクエリを続行するために使用できる有用な参照回答として機能することを目的としています。 紹介の回答には、クエリされた型以外の RR など、より多くのデータが含まれています。 たとえば、DNS サーバーがこのゾーンに www 照会されたホスト名の RR を見つけられないが、代わりに www の CNAME RR を見つけた場合、その情報をクライアントへの応答に含めることができます。 クライアントがイテレーションを使用できる場合は、参照情報を使用して、それ自体の名前を完全に解決しようとして、より多くのクエリを実行できます。
サーバーからの否定的な応答は、次の 2 つの可能性のある結果のいずれかを示すことができます。
- 権限のあるサーバーが DNS 名前空間でクエリされた名前を見つけることができませんでした。
- 権限のあるサーバーがクエリ対象の名前を見つけましたが、指定した種類のレコードがその名前に存在しません。
リゾルバーはクエリを処理し、要求するプログラムに結果を返します。 応答には、正または負のいずれかを指定できます。 さらに、リゾルバーは、後で使用するために応答をキャッシュします。
クエリに対する結果の応答が長すぎて単一の UDP メッセージ パケットで送信および解決できない場合、DNS サーバーは TCP ポート 53 経由でフェールオーバー応答を開始して、TCP 接続セッションでクライアントに完全に応答できます。
DNS サーバーでの再帰の使用の無効化は、DNS クライアントがイントラネット上にある DNS サーバーなど、特定の DNS サーバーへの名前の解決に制限されている場合に行われます。 DNS サーバーが外部 DNS 名を解決できない場合も、再帰が無効になる場合があります。 この場合、クライアントは名前解決のために別の DNS サーバーにフェールオーバーする必要があります。 DNS サーバーで再帰を無効にした場合、同じサーバーでフォワーダーを使用することはできません。
既定では、DNS サーバーは、再帰クエリを実行し、他の DNS サーバーに接続するときに、いくつかの既定のタイミングを使用します。 これらの既定値は次のとおりです。
- 再帰は、3 秒の間隔で再試行します。 この間隔は、再帰参照中に行われたクエリを再試行する前に DNS サービスが待機する時間の長さです。
- 8 秒の再帰タイムアウト間隔。 この間隔は、再試行された再帰参照に失敗するまでに DNS サービスが待機する時間の長さです。
ほとんどの場合、これらのパラメーターには調整は必要ありません。 ただし、低速ワイド エリア ネットワーク (WAN) リンクで再帰的な検索を使用している場合は、設定を少し調整することで、サーバーのパフォーマンスとクエリの完了を向上させることができます。
関連コンテンツ
逆引き参照プロセスの詳細については、「逆引き 参照」を参照してください。