A non-recursive query, also called an iterative query, is a DNS request that asks a name server to respond only with data it already holds or to provide a referral to another server without performing additional lookups on behalf of the client. Non-recursive queries form the backbone of DNS server-to-server communication, allowing recursive resolvers to walk the DNS hierarchy by querying root servers, top-level domain servers, and authoritative servers in sequence, with each step returning either an answer or a referral to the next server. Operationally, the distinction between recursive and non-recursive queries is critical for server design, security configuration, and troubleshooting, as misconfigurations can lead to confusing failures such as stub clients unable to resolve external names, and improper recursion settings can expose authoritative servers to reflection and amplification attacks.
So funktionieren nicht-rekursive Abfragen
Bei einer nicht-rekursiven Abfrage sendet der Client eine Anfrage, und der Server antwortet mit den besten ihm vorliegenden Informationen, ohne weitere Abfragen im Auftrag des Clients durchzuführen. Rekursive Resolver nutzen diesen Ansatz, um die DNS-Hierarchie zu durchlaufen.
- Der Client sendet die Abfrage: Der Client, in der Regel ein rekursiver Resolver, sendet eine Abfrage an einen Nameserver, wobei das Flag „recursion desired“ nicht gesetzt ist oder keine Erwartung besteht, dass der Server rekursiv vorgeht.
- Server überprüft seine Daten: Der Server sucht in seinen Zonendaten, wenn er für den Namen autoritativ ist, oder in seinem Cache, falls er einen unterhält.
- Der Server gibt eine Antwort zurück: Wenn der Server die Antwort vorrätig hat, gibt er sie zurück. Ein autoritativer Server kennzeichnet die Antwort als autoritativ.
- Der Server gibt eine Weiterleitung zurück: Wenn der Server die Antwort nicht bereithält, gibt er eine Weiterleitung zurück, in der Nameserver aufgeführt sind, die näher am Namen liegen, beispielsweise die Server für eine untergeordnete Zone.
- Der Client folgt der Weiterleitung: Der Client sendet dieselbe Anfrage an einen in der Weiterleitung genannten Server und wiederholt dies so lange, bis er eine Antwort oder eine Fehlermeldung erhält.
Der Server fragt niemals andere Server für den Client ab, sodass die Arbeit, den Verweisen zu folgen, beim Anfragenden verbleibt. Ein Resolver beginnt typischerweise bei einem Root-Server, fragt dann einen Top-Level-Domain-Server ab und anschließend den autoritativen Server für die Domain, wobei bei jedem Schritt nicht-rekursive Abfragen verwendet werden.
Häufige Missverständnisse bezüglich nicht-rekursiver Abfragen
Iterative Abfragen sind nicht von Natur aus langsamer. Jeder Schritt ist ein einfacher Abruf, und ein Resolver, der Weiterleitungen und Antworten zwischenspeichert, überspringt oft die meisten Schritte.
Stub-Resolver senden normalerweise rekursive Abfragen an einen Resolver. Der nicht-rekursive Austausch findet zwischen dem Resolver und den autoritativen Servern statt und ist daher für Endklienten meist nicht sichtbar.
Eine Weiterleitung ist eine normale Antwort, kein Fehler. Sie verweist den Resolver auf Nameserver, die näher an der Antwort liegen, und eine fehlende Weiterleitung ist eher ein Delegationsproblem als ein Problem mit dem Abfragetyp.
Ein „authoritative-only“-Server löst keine Namen außerhalb seiner Zonen auf, selbst wenn das Flag „recursion desired“ gesetzt ist. Er gibt in der Regel eine Weiterleitung oder eine Ablehnung zurück, was oft fälschlicherweise als Ausfall interpretiert wird.
Ein Caching-Server kann eine nicht-rekursive Abfrage aus seinem Cache beantworten, sofern die Daten dort vorhanden sind. Sind sie nicht im Cache gespeichert, ruft der Server sie für diese Abfrage nicht ab.