Próbuję zrozumieć różnicę między iteracyjnymi i rekurencyjnymi zapytaniami DNS. Zasadniczo myślę, że iteracyjne jest jak zadzwonienie do domu towarowego w celu znalezienia produktu, a gdy go nie mają, podają numer innego z oddziałów, pod który można zadzwonić, a następnie sam dzwonisz do drugiego. Versus rekursywnego, który jest jak wywołanie dom towarowy, a gdy nie mają co jesteś po, oni nazywają inny oddział w Twoim imieniu szuka produktu. Rzecz w tym, że dostaję sprzeczne opinie na ten temat, jeśli chodzi o DNS. Kiedy myślę o rekurencyjnym, myślę o czymś, co wygląda tak:
Ale podczas czytania artykułów w Internecie, a nawet wyszukiwania rekurencyjnego obrazu DNS w Google , widzę znacznie więcej przykładów, które wyglądają tak:
Dla mnie ten drugi przykład wygląda bardziej iteracyjnie niż rekurencyjnie, ponieważ każdy z „innych serwerów DNS” podaje „preferowanemu serwerowi DNS” adres następnej maszyny do wyszukania, zamiast wyszukiwania w imieniu preferowanego Serwer DNS. Jedyny rekurencyjny element, jaki widzę, to to, że preferowany serwer DNS wyszukuje w imieniu klienta DNS, ale od tej pory z pewnością wygląda to iteracyjnie.
Wydaje mi się, że moje pytanie brzmi: czy „rekurencyjne” wyszukiwanie DNS naprawdę oznacza tylko rekurencyjne w tym sensie, że preferowany serwer DNS robi coś w imieniu klienta, ale naprawdę jest iteracyjny? Większość wyników, które widzę w wyszukiwarce grafiki Google, prowadzi mnie do przekonania, że to nasuwa pytanie: czy pierwsze zdjęcie w tym poście jest po prostu błędne?
źródło
Odpowiedzi:
Twój ostatni akapit jest poprawny.
Flaga „Recursion Desired” (RD) wysłana przez klienta w nagłówku żądania DNS (patrz RFC 1035) pyta serwer „proszę o pełną odpowiedź na to pytanie”.
Ten serwer niż iteracyjnie prosi łańcuch serwerów nazw o poprawną odpowiedź. Te zapytania nie powinny same mieć ustawionego bitu RD.
Ostatecznie odpowiedź serwera rekurencyjnego będzie miała ustawioną flagę „Recursion Available” (RA), co oznacza, że odpowiedź została rzeczywiście w pełni udzielona. I odwrotnie, autorytatywny serwer nie ustawi flagi RA.
IMHO, to zły wybór terminologii.
Co warte jest tego, że pierwszy znaleziony schemat jest zasadniczo niepoprawny. Serwery root nie wykonują zapytań do żadnego innego serwera, wysyłają tylko odwołania do innych serwerów.
źródło
O ile rozumiem, „wyszukiwanie rekurencyjne” wynika wyłącznie z pierwotnego zapytania. Jeśli więc zapyta serwer DNS i otrzyma całkowicie rozstrzygniętą odpowiedź, jest to „zapytanie rekurencyjne”. Jeśli ten serwer z kolei wyszukuje rekurencyjnie lub iteracyjnie, to nie jest czymś, o co musi dbać pierwotne pytanie.
źródło
Pierwszy z dwóch diagramów w twoim pytaniu jest niepoprawny. Serwery główne nie wysyłają zapytań do innych serwerów. Gdyby serwery root faktycznie przekazywały zapytania, jak pokazano na tym schemacie, system DNS byłby o wiele bardziej podatny na ataki DoS, niż jest w rzeczywistości.
Drugi schemat jest w większości poprawny, ale zbyt uproszczony, aby pokazać rekurencyjną naturę wyszukiwań. Schemat jest jednak nadal wystarczająco szczegółowy, abyśmy mogli wskazać, gdzie następuje rekurencja.
Serwer DNS obok liczby,
12
którą wskazano,Preferred DNS server
jest miejscem, w którym ma miejsce rekurencja. Termin Preferowany serwer DNS nie jest standardową terminologią. Ten serwer byłby zwykle nazywany buforującym rekursorem DNS lub jego skrótem.Patrząc na ruch sieciowy, rzeczywiście wygląda iteracyjnie. Rekursja jest całkowicie wewnętrzna dla rekursora DNS. Jeśli spojrzysz na implementację rekursora DNS, znajdziesz pewną rekurencyjną strukturę w sposobie obsługi żądań.
Rekurencja może być łatwa do wykrycia, jeśli implementacja używa wątku na żądanie, a wyszukiwania są implementowane przy użyciu rekurencyjnych wywołań funkcji. Jednak bardziej wydajne projekty nie używają wątku na żądanie, a rekurencja jest zamiast tego znajdowana w strukturach danych używanych przez rekursor DNS.
Powodem, dla którego potrzebna jest rekurencja, jest sposób, w jaki implementowane są odwołania między autorytatywnymi serwerami DNS. Najlepiej ilustruje to przykład. Na schemacie widać autorytatywny serwer DNS dla
microsoft.com
wskazania na autorytatywny serwer DNS dlaexample.microsoft.com
. Odbywa się to za pomocąNS
rekordu, który wskazuje nazwę hosta. Na przykład serwer autorytatywnymicrosoft.com
może powiedzieć, że rekursor DNSms.example.net
jest autorytatywnyexample.microsoft.com
.W tym momencie rekursor DNS musiałby rozwiązać,
ms.example.net
zanim będzie mógł kontynuować rozwiązywanie problemuexample.microsoft.com
.Aby rozwiązać jedną nazwę hosta, najpierw musi ona rozwiązać inną nazwę hosta. To jest rekurencja. Aby nie doprowadziło to do nieskończonej rekurencji, DNS ma rekordy kleju, które są wysyłane wraz z
NS
rekordami w niektórych przypadkach.źródło