Понимание рекурсии DNS

Опубликовано: 23 Марта, 2023

Основная концепция разрешения имен DNS довольно проста. Каждому веб-сайту назначается уникальный IP-адрес. Чтобы получить доступ к веб-сайту, клиенту необходимо знать IP-адрес сайта. Конечно, пользователи обычно не вводят IP-адрес в свой веб-браузер, а вместо этого вводят доменное имя сайта. Чтобы получить доступ к запрашиваемому веб-сайту, веб-браузер должен иметь возможность преобразовывать доменное имя сайта в соответствующий IP-адрес. Здесь в игру вступает DNS. На клиентском компьютере настроен адрес предпочитаемого DNS-сервера. Запрошенный URL-адрес перенаправляется на DNS-сервер, и DNS-сервер возвращает IP-адрес запрошенного веб-сайта. Затем клиент может получить доступ к запрошенному сайту.


Как видите, процесс разрешения имен довольно прост. Однако в мире существует бесчисленное множество веб-сайтов, и каждый день создаются новые сайты. Ваш DNS-сервер не может знать IP-адрес каждого веб-сайта. Когда DNS-серверу не известен адрес запрошенного сайта, он использует один из двух методов для определения IP-адреса сайта.


Предпочтительный метод разрешения имен называется рекурсией. Вообще говоря, рекурсия относится к процессу, при котором DNS-сервер сам выполняет запросы к другим DNS-серверам от имени клиента, который сделал первоначальный запрос. По сути, DNS-сервер становится DNS-клиентом. Некоторые администраторы предпочитают отключать рекурсию из соображений производительности. Если рекурсия отключена, DNS-сервер использует процесс, называемый итерацией, для разрешения запроса имени.


Корневые подсказки


Если DNS-сервер не знает адрес запрашиваемого сайта, то он перенаправит запрос на другой DNS-сервер. Для этого DNS-сервер должен знать IP-адрес другого DNS-сервера, на который он может перенаправить запрос. Это работа корневых подсказок. Корневые подсказки предоставили список IP-адресов DNS-серверов, которые считаются авторитетными на корневом уровне иерархии DNS.


Хорошей новостью является то, что корневые ссылки предварительно настроены на DNS-серверах Windows Server 2003. Корневые ссылки хранятся в файле с именем CACHE.DNS, расположенном в папке WindowsSystem32Dns. Если вы хотите посмотреть, как выглядит файл корневых подсказок, вы можете открыть его в Блокноте. Как вы можете видеть на рисунке A, файл корневых подсказок на самом деле является не чем иным, как текстовым файлом, который связывает корневые DNS-серверы с их IP-адресами.


Изображение 20556
Рисунок A. Файл корневых подсказок сопоставляет DNS-серверы корневого уровня с их IP-адресами.


Теперь, когда я рассказал о том, что такое корневые хинты и что они делают, давайте взглянем на процесс рекурсии в действии. Диаграмма, показанная на рисунке B, иллюстрирует пример, который я собираюсь вам показать.


Изображение 20557
Рисунок B: Вот как работает рекурсия DNS


Процесс начинается, когда пользователь вводит URL-адрес в свой веб-браузер. Для целей этого примера предположим, что пользователь ввел www.contoso.com в качестве URL-адреса. После этого запрос на преобразование домена Contoso.com в IP-адрес передается на предпочитаемый DNS-сервер рабочей станции. Часто предпочитаемый DNS-сервер уже кэшировал запрошенную запись, но для примера предположим, что предпочитаемый DNS-сервер не имеет информации, связанной с CONTOSO.COM.


Предполагая, что рекурсия DNS включена, DNS-сервер начинает действовать как DNS-клиент и запускает серию или итерационные запросы к другим DNS-серверам. Я расскажу о разнице между итеративными и рекурсивными запросами позже, а сейчас просто поймите, что процесс в целом считается рекурсивным, потому что клиент делает только один запрос к предпочитаемому DNS-серверу.


В любом случае предпочтительный DNS-сервер рабочей станции не знает IP-адреса веб-сайта www.contoso.com, а также IP-адреса DNS-сервера, уполномоченного для домена Contoso.com (и поэтому будет известен IP-адрес веб-сайта www.contoso.com). DNS-сервер знает IP-адрес корневого DNS-сервера (благодаря файлу корневых подсказок). Поэтому предпочитаемый DNS-сервер перенаправляет запрос на корневой DNS-сервер.


Корневой DNS-сервер не знает IP-адреса веб-сервера www.contoso.com. Что ему известно, так это IP-адрес DNS-сервера, отвечающего за домен.COM. Корневой DNS-сервер возвращает IP-адрес DNS-сервера, ответственного за домен.COM, предпочтительному DNS-серверу. Затем предпочитаемый DNS-сервер отправляет запрос клиента на DNS-сервер.COM. DNS-серверу.COM неизвестен IP-адрес веб-сайта www.contoso.com, но известен IP-адрес DNS-сервера, уполномоченного для домена Contoso.com. Сервер домена.com возвращает IP-адрес DNS-сервера, уполномоченного для домена Contoso.com. Затем предпочтительный DNS-сервер клиента отправляет запрос на DNS-сервер Contoso.com, который, в свою очередь, возвращает IP-адрес запрошенного веб-сайта. Затем этот адрес возвращается клиенту, который его запросил.


В этом примере стоит отметить две вещи. Во-первых, как я объяснял ранее, клиент сделал только один DNS-запрос. Он совершенно не знал об итерационных запросах DNS-сервера от его имени. Во-вторых, DNS-сервер, являющийся полномочным для домена CONTOSO.COM, не обязательно будет принадлежать Contoso. Как правило, этот DNS-сервер принадлежит компании, предоставляющей веб-хостинг, и является авторитетным для любых сайтов, размещенных этой компанией. Вот почему предпочтительный DNS-сервер не может пропустить шаг и просто предоставить клиенту адрес DNS-сервера, который является полномочным для домена; по крайней мере не в этом случае.


Если DNS-сервер не поддерживает рекурсивные запросы, клиенты по умолчанию будут выполнять итерационные запросы.


Если вы заинтересованы в получении наилучшей производительности, вам следует настроить DNS-сервер так, чтобы он разрешал рекурсивные запросы. Причина в том, что если клиенты будут вынуждены использовать итерационные запросы, то они потенциально могут отправить три или четыре запроса к DNS-серверу для каждого запроса разрешения имени. DNS-серверу придется выполнять все эти запросы независимо от того, используются ли рекурсивные или итеративные запросы, но при использовании рекурсии большинство запросов на разрешение имен обрабатываются вашим DNS-сервером и не попадают в вашу сеть. Это уменьшает объем трафика, проходящего через сеть, тем самым повышая производительность.


Вывод


В этой статье я объяснил, как работают рекурсивные DNS-запросы. Большинство DNS-серверов поддерживают как рекурсивные, так и итерационные запросы от клиентов. Настройка вашего DNS-сервера для поддержки рекурсивных запросов, как правило, обеспечивает более высокую производительность, поскольку это уменьшит количество запросов, которые должны выполнять сетевые клиенты.