Я пытаюсь понять разницу между итеративным и рекурсивным поиском DNS. По сути, я думаю, что итеративный подход - это как звонить в универмаг в поисках продукта, и когда у них его нет, они дают вам номер другого из своих филиалов для вызова, а затем вы сами звоните в другой филиал. В отличие от рекурсивного, который похож на звонок в универмаг, и когда у них нет того, что вам нужно, они звонят в другой филиал от вашего имени в поисках продукта. Дело в том, что я получаю противоречивые мнения об этом, когда дело доходит до DNS. Когда я думаю о рекурсии, я думаю о чем-то, что выглядит так:
Но, читая статьи в Интернете и даже делая поиск изображений Google для рекурсивного DNS , я вижу гораздо больше примеров, которые выглядят так:
Для меня этот второй пример выглядит более итеративным, чем рекурсивным, потому что каждый из «других DNS-серверов» сообщает «предпочтительному DNS-серверу» адрес следующей машины для поиска, а не ищет его от имени предпочтительной DNS-сервер. Единственный рекурсивный элемент, который я вижу, заключается в том, что предпочтительный DNS-сервер выполняет поиск от имени DNS-клиента, но с этого момента он выглядит итеративным.
Поэтому я предполагаю, что мой вопрос заключается в том, действительно ли «рекурсивный» поиск DNS означает только рекурсивный в том смысле, что предпочитаемый DNS-сервер делает что-то от имени клиента, но действительно ли он итеративный с этого момента? Большинство результатов, которые я вижу в поиске картинок в Google , заставляют меня поверить в это, и тогда возникает вопрос, является ли первое изображение в этом посте просто неправильным?
источник
Ответы:
Ваш последний абзац правильный.
Флаг «Требуется рекурсия» (RD), отправляемый клиентом в заголовке запроса DNS (см. RFC 1035), запрашивает у сервера «пожалуйста, дайте мне полный ответ на этот вопрос».
Этот сервер итеративно запрашивает цепочку серверов имен для правильного ответа. В этих запросах не должен быть установлен бит RD.
В конечном итоге ответ рекурсивного сервера будет иметь установленный флаг «Доступна рекурсия» (RA), указывающий, что ответ действительно был полностью отвечен. И наоборот, авторитетный сервер не будет устанавливать флаг RA.
ИМХО, это плохой выбор терминологии.
Для чего стоит, первая найденная вами диаграмма в корне неверна. Корневые серверы не выполняют запросы к любому другому серверу, они только выдают ссылки на другие серверы.
источник
Насколько я понимаю, «рекурсивный поиск» происходит исключительно с точки зрения первоначального запросчика. Таким образом, если он запрашивает DNS-сервер и получает полностью разрешенный ответ, то это «рекурсивный запрос». Если этот сервер, в свою очередь, выполняет рекурсивный или итеративный поиск, ну, это не то, о чем должен заботиться оригинальный запросчик.
источник
Первая из двух диаграмм в вашем вопросе неверна. Корневые серверы не отправляют запросы на другие серверы. Если бы корневые серверы действительно передавали запросы, как показано на этой диаграмме, система DNS была бы намного более уязвимой для DoS-атак, чем на самом деле.
Вторая диаграмма в основном правильная, но слишком упрощенная, чтобы показать вам рекурсивный характер поисков. Диаграмма все еще достаточно подробная, хотя мы можем указать, где происходит рекурсия.
DNS-сервер рядом с номером,
12
который обозначен,Preferred DNS server
является местом , где происходит рекурсия. Термин Предпочитаемый DNS-сервер не является стандартной терминологией. Этот сервер обычно называют кеширующим DNS-рекурсором или его сокращением.Если смотреть на сетевой трафик, он действительно выглядит итеративным. Рекурсия полностью внутренняя для рекурсора DNS. Если вы посмотрите на реализацию рекурсора DNS, то обнаружите некоторую рекурсивную структуру в обработке запросов.
Рекурсию можно легко обнаружить, если реализация использует поток на запрос, а поиск реализован с использованием рекурсивных вызовов функций. Но более эффективные проекты не используют поток для запроса, а рекурсия вместо этого находится внутри структур данных, используемых рекурсором DNS.
Причина, по которой необходима рекурсия, заключается в том, как реализованы ссылки между авторитетными DNS-серверами. Это лучше всего иллюстрируется на примере. На схеме вы видите авторитетный DNS-сервер для
microsoft.com
указания на полномочный DNS-сервер дляexample.microsoft.com
. Это делается с помощьюNS
записи, которая указывает на имя хоста. Так, например, авторитетный серверmicrosoft.com
мог бы указать рекурсору DNS, для которого онms.example.net
является авторитетнымexample.microsoft.com
.На этом этапе рекурсору DNS придется разрешить,
ms.example.net
прежде чем он сможет продолжить разрешениеexample.microsoft.com
.Чтобы разрешить одно имя хоста, сначала нужно разрешить другое имя хоста. Это рекурсия. Чтобы это не привело к бесконечной рекурсии, в DNS есть склеенные записи, которые
NS
в определенных случаях отправляются вместе с записями.источник