Ich versuche den Unterschied zwischen iterativen und rekursiven DNS-Lookups zu verstehen. Grundsätzlich verstehe ich iterativ so, als würde man ein Kaufhaus anrufen, das nach einem Produkt sucht, und wenn es das nicht gibt, gibt man die Nummer einer anderen Filiale an, die man anrufen kann, und dann ruft man die andere Filiale selbst an. Versus rekursiv, die wie der Aufruf das Kaufhauses ist, und wenn sie nicht haben , was Sie nach, sie rufen Sie den anderen Zweig in Ihrem Namen für das Produkt suchen. Ich bekomme widersprüchliche Ansichten dazu, wenn es um DNS geht. Wenn ich an rekursiv denke, denke ich an etwas, das so aussieht:
Aber während ich Artikel im Web lese und sogar eine Google-Bildsuche nach rekursivem DNS durchführe , sehe ich weit mehr Beispiele, die so aussehen:
Für mich ist dieses zweite Beispiel eher iterativ als rekursiv, da jeder der "anderen DNS-Server" dem "bevorzugten DNS-Server" die Adresse des nächsten zu suchenden Computers mitteilt, anstatt sie im Namen des bevorzugten Computers nachzuschlagen DNS Server. Das einzige rekursive Element, das ich sehe, ist, dass der bevorzugte DNS-Server im Auftrag des DNS-Clients sucht, aber von nun an sieht es sicher iterativ aus.
Ich schätze, meine Frage ist: Bedeutet "rekursives" DNS-Lookup wirklich nur rekursiv im Sinne des bevorzugten DNS-Servers, der etwas im Namen des Clients tut, aber von nun an wirklich iterativ? Die meisten Ergebnisse, die ich in der Google-Bildersuche sehe, lassen mich glauben, dass dies, was dann die Frage aufwirft, das erste Bild in diesem Beitrag einfach falsch ist.
quelle
Antworten:
Dein letzter Absatz ist korrekt.
Das vom Client im DNS-Anforderungsheader gesendete RD-Flag (Recursion Desired) (siehe RFC 1035) fragt den Server, ob die Frage vollständig beantwortet werden soll.
Dieser Server fragt dann iterativ die Kette von Nameservern nach der richtigen Antwort. Diese Abfragen sollten selbst kein gesetztes RD-Bit haben.
Letztendlich ist für die Antwort des rekursiven Servers das Flag "Recursion Available" (RA) gesetzt, was darauf hinweist, dass die Antwort tatsächlich vollständig beantwortet wurde. Umgekehrt setzt ein autorisierender Server das RA-Flag nicht.
IMHO, es ist eine schlechte Wahl der Terminologie.
Das erste Diagramm, das Sie gefunden haben, ist grundsätzlich falsch. Die Stammserver führen keine Abfragen an andere Server durch, sondern geben nur Verweise an andere Server aus.
quelle
Soweit ich es verstehe, ist "rekursives Nachschlagen" ausschließlich aus der Sicht des ursprünglichen Abfragers. Wenn es also einen DNS-Server fragt und eine vollständig aufgelöste Antwort zurückerhält, handelt es sich um eine "rekursive Abfrage". Wenn dieser Server seinerseits rekursive oder iterative Suchvorgänge durchführt, muss sich der ursprüngliche Abfrager nicht darum kümmern.
quelle
Das erste der beiden Diagramme in Ihrer Frage ist falsch. Root-Server senden keine Anfragen an andere Server. Wenn die Stammserver tatsächlich Abfragen wie in diesem Diagramm weiterleiten würden, wäre das DNS-System für DoS-Angriffe viel anfälliger als es tatsächlich ist.
Das zweite Diagramm ist größtenteils korrekt, aber zu vereinfacht, um die rekursive Natur von Nachschlägen zu veranschaulichen. Das Diagramm ist jedoch immer noch so detailliert, dass wir darauf hinweisen können, wo eine Rekursion stattfindet.
Der DNS-Server neben der angegebenen Nummer ist
12
der Server, auf dem diePreferred DNS server
Rekursion stattfindet. Der Begriff Bevorzugter DNS-Server ist keine Standardterminologie. Dieser Server wird normalerweise als Caching-DNS-Recursor oder als Abkürzung dafür bezeichnet.Wenn man den Netzwerkverkehr betrachtet, sieht er tatsächlich iterativ aus. Die Rekursion erfolgt vollständig intern im DNS-Recursor. Wenn Sie sich die Implementierung eines DNS-Recursors ansehen, werden Sie eine rekursive Struktur in der Behandlung von Anforderungen finden.
Die Rekursion ist möglicherweise leicht zu erkennen, wenn die Implementierung einen Thread pro Anforderung verwendet und die Lookups mithilfe von rekursiven Funktionsaufrufen implementiert werden. Effizientere Entwürfe verwenden jedoch keinen Thread pro Anforderung. Stattdessen befindet sich die Rekursion in den Datenstrukturen, die vom DNS-Recursor verwendet werden.
Der Grund dafür, dass eine Rekursion erforderlich ist, liegt darin, wie die Verweise zwischen den autorisierenden DNS-Servern implementiert werden. Dies lässt sich am besten anhand eines Beispiels veranschaulichen. Im Diagramm sehen Sie den autorisierenden DNS-Server, für den Sie auf den autorisierenden DNS-Server
microsoft.com
verweisenexample.microsoft.com
. Dies geschieht mit einemNS
Datensatz, der auf einen Hostnamen zeigt. So könnte beispielsweise der autorisierende Server fürmicrosoft.com
den DNS-Recursor mitteilen, für den er autorisierendms.example.net
istexample.microsoft.com
.Zu diesem Zeitpunkt müsste der DNS-Recursor aufgelöst werden,
ms.example.net
bevor er mit der Auflösung von fortfahren kannexample.microsoft.com
.Um einen Hostnamen aufzulösen, muss zuerst ein anderer Hostname aufgelöst werden. Das ist Rekursion. Damit dies nicht zu einer unendlichen Rekursion führt, verfügt DNS über Leimdatensätze, die
NS
in bestimmten Fällen zusammen mit Datensätzen gesendet werden.quelle