J'essaie de comprendre la différence entre les recherches DNS itératives et récursives. Fondamentalement, je pense que l'itération est comme appeler un grand magasin à la recherche d'un produit, et quand ils ne l'ont pas, ils vous donnent le numéro d'une autre de leurs succursales à appeler, puis vous appelez l'autre succursale vous-même. Versus récursif, c'est comme appeler le grand magasin, et quand ils n'ont pas ce que vous cherchez, ils appellent l'autre succursale en votre nom à la recherche du produit. Le fait est que je reçois des opinions contradictoires à ce sujet en ce qui concerne le DNS. Quand je pense à récursif, je pense à quelque chose qui ressemble à ceci:
Mais en lisant des articles sur le Web, et même en faisant une recherche d'image Google pour DNS récursif , je vois beaucoup plus d'exemples qui ressemblent à ceci:
Pour moi, ce deuxième exemple semble plus itératif que récursif, car chacun des "autres serveurs DNS" indique au "serveur DNS préféré" l'adresse de la prochaine machine à rechercher, plutôt que de la rechercher au nom du serveur préféré. Serveur dns. Le seul élément récursif que je vois est que le serveur DNS préféré effectue des recherches au nom du client DNS, mais à partir de maintenant, cela semble certainement itératif.
Je suppose donc que ma question est la suivante: la recherche DNS "récursive" signifie-t-elle vraiment uniquement récursive dans le sens où le serveur DNS préféré fait quelque chose au nom du client, mais est-il vraiment itératif à partir de maintenant? La majorité des résultats que je vois dans la recherche d'images Google me portent à croire que, ce qui soulève alors la question, la première image de ce message est-elle tout simplement fausse?
la source
Réponses:
Votre dernier paragraphe est correct.
L'indicateur "Récursivité souhaitée" (RD) envoyé par le client dans l'en-tête de demande DNS (voir RFC 1035) demande au serveur "veuillez me donner la réponse complète à cette question".
Ce serveur demande de manière itérative à la chaîne de serveurs de noms la bonne réponse. Ces requêtes ne devraient pas avoir elles-mêmes le bit RD défini.
En fin de compte, la réponse du serveur récursif aura l'indicateur «Récursion disponible» (RA) défini, indiquant que la réponse a effectivement été pleinement répondue. Inversement, un serveur faisant autorité ne définira pas le drapeau RA.
À mon humble avis, c'est un mauvais choix de terminologie.
Pour ce que ça vaut, ce premier diagramme que vous avez trouvé est fondamentalement incorrect. Les serveurs racine n'exécutent pas de requêtes vers un autre serveur, ils émettent uniquement des références vers d'autres serveurs.
la source
Pour autant que je le comprenne, la "recherche récursive" est uniquement du point de vue du demandeur d'origine. Donc, s'il demande à un serveur DNS et obtient une réponse complètement résolue, alors c'est une "requête récursive". Si ce serveur à son tour effectue des recherches récursives ou itératives, ce n'est pas quelque chose dont le demandeur d'origine doit se soucier.
la source
Le premier des deux diagrammes de votre question est incorrect. Les serveurs racine n'envoient pas de requêtes à d'autres serveurs. Si les serveurs racine transmettaient en fait des requêtes comme indiqué dans ce diagramme, le système DNS serait beaucoup plus vulnérable aux attaques DoS qu'il ne l'est réellement.
Le deuxième diagramme est généralement correct mais trop simplifié pour vous montrer la nature récursive des recherches. Le diagramme est cependant suffisamment détaillé pour que nous puissions indiquer où se produit la récursivité.
Le serveur DNS à côté du numéro
12
indiquéPreferred DNS server
est celui où la récursivité se produit. Le terme serveur DNS préféré n'est pas une terminologie standard. Ce serveur serait généralement appelé un récurseur DNS de mise en cache ou une abréviation de cela.En regardant le trafic réseau, il semble en effet itératif. La récursivité est entièrement interne au récurseur DNS. Si vous regardez l'implémentation d'un récurseur DNS, vous trouverez une structure récursive dans la façon dont les requêtes sont traitées.
La récursivité peut être facile à repérer si l'implémentation utilise un thread par requête et que les recherches sont implémentées à l'aide d'appels de fonctions récursives. Mais les conceptions plus efficaces n'utilisent pas de thread par requête et la récursivité se trouve à la place dans les structures de données utilisées par le récurseur DNS.
La raison pour laquelle la récursivité est nécessaire est due à la façon dont les références entre les serveurs DNS faisant autorité sont implémentées. Ceci est mieux illustré par un exemple. Dans le diagramme, vous voyez le serveur DNS faisant autorité pour
microsoft.com
pointer vers le serveur DNS faisant autorité pourexample.microsoft.com
. Cela se fait à l'aide d'unNS
enregistrement qui pointe vers un nom d'hôte. Ainsi, par exemple, le serveur faisant autorité pourmicrosoft.com
pourrait dire au récurseur DNS quims.example.net
fait autorité pourexample.microsoft.com
.À ce stade, le récurseur DNS devrait résoudre
ms.example.net
avant de pouvoir procéder à la résolution deexample.microsoft.com
.Pour résoudre un nom d'hôte, il doit d'abord résoudre un nom d'hôte différent. C'est la récursivité. Pour que cela ne conduise pas à une récursion infinie, DNS a des enregistrements de colle qui sont envoyés avec des
NS
enregistrements dans certains cas.la source