Кто на самом деле "рекурсирует" в рекурсивном поиске DNS?
Я пытаюсь понять разницу между итеративным и рекурсивным поиском DNS. По сути, я думаю, что итеративный процесс - это то же самое, что звонить в универмаг в поисках продукта, и когда у них его нет, они дают вам номер другого из своих филиалов для вызова, а затем вы сами звоните в другой филиал. По сравнению с рекурсивным, что похоже на вызов универмага, и когда у них нет того, что вам нужно, они звонят в другое отделение от вашего имени в поисках продукта. Дело в том, что я получаю противоречивые мнения об этом, когда дело доходит до DNS. Когда я думаю о рекурсии, я думаю о чем-то, что выглядит так:
Но во время чтения статей в Интернете и даже рекурсивного поиска картинок в Google я вижу гораздо больше примеров, которые выглядят так:
Для меня этот второй пример выглядит более итеративным, чем рекурсивным, потому что каждый из "других DNS-серверов" сообщает "предпочтительному DNS-серверу" адрес следующей машины для поиска, а не ищет его от имени предпочтительной DNS сервер Единственный рекурсивный элемент, который я вижу, заключается в том, что предпочтительный DNS-сервер выполняет поиск от имени DNS-клиента, но с этого момента он выглядит итеративным.
Поэтому я предполагаю, что мой вопрос заключается в том, действительно ли "рекурсивный" поиск DNS означает только рекурсивный в том смысле, что предпочитаемый DNS-сервер делает что-то от имени клиента, но действительно ли он итеративный с этого момента? Большинство результатов, которые я вижу в поиске картинок в Google, заставляют меня поверить в это, и тогда возникает вопрос, является ли первое изображение в этом посте просто неправильным?
3 ответа
Ваш последний абзац правильный.
Флаг "Требуется рекурсия" (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
записи в определенных случаях.