再帰DNSルックアップで実際に「再帰」するのは誰ですか?


16

反復DNSルックアップと再帰DNSルックアップの違いを理解しようとしています。基本的に、反復性は製品を探しているデパートに電話をかけるようなものだと考えており、持っていない場合は別の支店の番号を教えてから、他の支店を自分で呼び出します。これは、デパートに電話をかけるようなもので、あなたが望んでいるものがわからないときは、製品を探してあなたに代わって他の支店に電話かけます。事は、それがDNSに来るとき、私はこれについて矛盾した見解を得ています。再帰について考えるとき、次のように見えるものを考えます。 代替テキスト

しかし、ウェブ上の記事を読んだり、DNS再帰の Google画像検索を行っているときでも、次のような例がはるかに多く見られます。 代替テキスト

私にとって、この2番目の例は再帰的よりも反復的に見えます。これは、「他のDNSサーバー」のそれぞれが「優先DNSサーバー」に、優先する代わりに検索するのではなく、検索する次のマシンのアドレスを伝えるためですDNSサーバー。私が見る唯一の再帰的な要素は、優先DNSサーバーがDNSクライアントに代わってルックアップを行うことですが、今後は反復的に見えるようになります。

私の質問は、「再帰的な」DNSルックアップは、実際にクライアントに代わって優先DNSサーバーが何かを実行するという意味でのみ再帰を意味するのでしょうか。Google画像検索で私が見ている結果の大部分は、これを信じるように導きます。


Ask Mr DNSポッドキャストをチェックしてください。楽しく、情報が豊富です。1989年以来、DNSを管理しており、O'ReilyのすべてのDNSブックなどを執筆または共同執筆しています。ask-mrdns.com
ロナルドポトル

回答:


16

最後の段落は正しいです。

クライアントがDNS要求ヘッダー(RFC 1035を参照)で送信した「Recursion Desired」(RD)フラグは、サーバーに「この質問に対する完全な答えを教えてください」と尋ねます。

そのサーバーは、正しい答えをネームサーバーのチェーンに繰り返し求めます。これらのクエリ自体にRDビットを設定しないでください。

最終的に、再帰サーバーの応答には「再帰利用可能」(RA)フラグが設定され、回答が実際に完全に回答されたことを示します。逆に、権限のあるサーバーはRAフラグを設定しません。

私見、それは用語の悪い選択です。

価値のあることとして、最初に見つけた図は根本的に間違っています。ルートサーバーは他のサーバーへのクエリを実行せ、他のサーバーへの紹介のみを発行します。


4

私の知る限り、「再帰的な検索」は元のクエリアの観点からのみです。したがって、DNSサーバーに要求し、完全に解決された応答を返す場合、それは「再帰クエリ」です。そのサーバーが順番に再帰的または反復的な検索を行う場合、元のクエリアが気にしなければならないものではありません。


1

質問の2つの図の最初の図は間違っています。ルートサーバーは、クエリを他のサーバーに送信しません。ルートサーバーが実際にその図に示すようなクエリを転送した場合、DNSシステムはDoS攻撃に対して実際よりもはるかに脆弱になります。

2番目の図はほとんど正しいですが、ルックアップの再帰的な性質を示すには単純すぎます。ダイアグラムはまだ十分に詳細になっていますが、再帰が発生する場所を指摘できます。

12示された番号の隣のDNSサーバーPreferred DNS serverは、再帰が発生する場所です。優先DNSサーバーという用語は、標準の用語ではありません。そのサーバーは通常、キャッシングDNSリカーサーまたはその略語と呼ばれます。

ネットワークトラフィックを見ると、実際に反復的に見えます。再帰は完全にDNS再帰の内部にあります。DNS再帰の実装を見ると、リクエストの処理方法に再帰的な構造があります。

実装が要求ごとにスレッドを使用し、ルックアップが再帰的な関数呼び出しを使用して実装されている場合、再帰は簡単に見つけることができます。しかし、より効率的な設計ではリクエストごとにスレッドを使用せず、代わりに再帰がDNS再帰によって使用されるデータ構造内にあります。

再帰が必要な理由は、権限のあるDNSサーバー間の参照がどのように実装されているかによるものです。これは例を挙げて説明するのが最適です。図では、の信頼できるDNSサーバーをmicrosoft.com指す信頼できるDNSサーバーが表示されていexample.microsoft.comます。これはNS、ホスト名を指すレコードを使用して行われます。だから、例えばのための権限のあるサーバーは、microsoft.comDNSのrecursor言うことができるms.example.netための権威であるがexample.microsoft.com

その時点で、DNS再帰は、の解決ms.example.netを進める前に解決する必要がありexample.microsoft.comます。

1つのホスト名を解決するには、最初に別のホスト名を解決する必要があります。それは再帰です。これにより無限再帰が発生しないようにするため、DNSにはグルーレコードがありNS、特定の場合にレコードとともに送信されます。


これには多くのエラーがあります。「再帰」という用語の使用は、「再帰関数呼び出し」が使用されているかどうかとは関係ありません-Vatineの答えは近いです-再帰は、クライアントがサーバーに完全な解決済みの答えを求めるときの(選択が悪い)名前です。いわゆる「再帰サーバー」で使用されるメカニズムは、実際にはイテレーションと呼ばれます。また、レコードをグルーし、「無限再帰」を防止しません-ネームサーバーのアドレスが委任されたドメインのスペース内にある場合、ネームサーバーのアドレスを見つける方法の「鶏と卵」の問題を防ぐためにあります。
アルニタック

@Alnitak DNS解決は本質的に再帰的です。実行スタックを別のデータ構造に変換することにより、再帰アルゴリズムを反復的なものに変換できます。その可能性はすでに私の答えで言及されています。そして、あなたが言及した循環依存の問題は、無限再帰と何の違いもありません。2つは本当に同じものです。基礎となるタスクが循環依存に苦しんでいることに気付かずに単純な再帰アルゴリズムを適用する場合、結果は無限再帰になります。
カスペルド

@Alnitak再帰スタックを取り除き、DNS解決を繰り返し実行して、一度に一定数のDNS名のみを追跡することはできません。再帰スタックを異なる外観のデータ構造で表現できますが、本質的に再帰的です。再帰の深さを1つだけに保つようにドメイン名を構成することができます。ただし、すべてのドメイン名がそのように構成されているわけではありません。
カスペルド

RFC 1034を引用します-"" この問題に対処する2つの一般的なアプローチは、最初のサーバーが別のサーバーでクライアントのクエリを追跡する「再帰」と、サーバーがクライアントを別のサーバーに参照する「反復」です。サーバーとクライアントがクエリを追跡できるようにします。 "" "スタック"または "データ構造" とは関係ありません
アルニタック

@Alnitakその段落は、私の答えとは異なる種類の再帰について言及しています。私の答えで言及された再帰は、(私の答えで明確に述べられているように)特定のDNSサーバーの内部にあります。DNS再帰を完全に反復的な方法で実際に実装しようとした場合、機能しません。関連するグルーのないNSレコードで応答を受け取ったらすぐに、元の解決を続行する前に、そのNSレコードが指すホスト名のIPアドレスを検索する必要があります。
カスペルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.