В ряде случаев работа DNS-резолвера, пытающегося выяснить IP-адрес, соответствующий заданному имени домена, начинается с запроса к одному из корневых серверов. Корневой сервер, конечно, не знает ответа для каждого из имен, существующих в Интернете, однако он может сообщить клиенту адреса тех серверов, которые располагают информацией об искомом имени, – и клиент обратится к следующим серверам с тем же запросом. В этом и состоит рекурсия. Ниже мы разберем процесс подробно.
Попробуем проследить за запросами на простом примере. Предположим, что требуется определить IP-адрес, соответствующий домену www.nic.ru.
Сразу нужно обговорить пару важных моментов. Во– первых, резолвер, занимающийся поиском имен, – это обычно специальная программа, работающая на том или ином компьютере. Как мы разобрались, резолвер обрабатывает запросы вида «А какой адрес у www.nic. ru?», поступающие от других программ и компьютеров. Резолвер может быть и локальным, то есть работающим на том же компьютере, где, например, запущен браузер. Во-вторых, наиболее важные из резолверов (кэширующие DNS-серверы) обслуживают множество разных запросов и имеют собственный кэш адресов (особую память), в котором в течение определенного времени сохраняются ранее полученные из DNS сведения об адресации внутри доменов. Наличие такого кэширования – важнейшая особенность DNS, делающая эту систему распределенной и устойчивой к большим нагрузкам.
Вернемся к нашему примеру: получив запрос о www. nic.ru резолвер прежде всего проверит свой кэш; если там не удастся найти ответа на вопрос об адресе узла с именем www.nic.ru, то рекурсивный резолвер начнет опрос глобальной DNS с запроса к одному из корневых серверов. Конечно, корневой сервер не знает ответа на вопрос о www.nic.ru, но он сообщит резолверу адреса тех серверов, которые отвечают за доменную зону .ru, благо они содержатся в корневой доменной зоне. Серверы .ru в свою очередь отправят резолвер к серверам, отвечающим за .nic.ru, и те наконец ответят о www.nic.ru, то есть об адресе узла, соответствующего домену третьего уровня www.nic.ru. Вот так рекурсивно работает DNS.
Надо заметить, что сейчас на подавляющем большинстве пользовательских компьютеров используются так называемые глупые (dumb или stub в англоязычной литературе) или, если выразиться более корректно, «простые» резолверы, которые не умеют выполнять сложные рекурсивные DNS-запросы, требующие обхода множества серверов имен. Они целиком полагаются на тот или иной известный им «умный» резолвер – кэширующий сервер DNS, – просто передавая свои запросы ему. Традиционно это сервер интернет-провайдера, обеспечивающего доступ к Сети. В такой конфигурации запросы к корневым серверам, а равно и к серверам, отвечающим за другие доменные зоны, выполняет сервер провайдера, делая за «глупого» всю сложную работу.
Беглое ознакомление с устройством глобальной DNS наводит на следующий вопрос: откуда только что подключенный к Интернету компьютер может узнать адреса корневых серверов? Обычно они задаются в специальных файлах, распространяемых в составе дистрибутивов операционных систем. А компьютер, программное обеспечение которого использует простой, «глупый» ре-золвер, может начать работать с глобальной DNS после того, как получит IP-адрес того или иного DNS-сервера. Этот IP-адрес указывается при начальной настройке операционной системы или при настройке сетевого соединения.
Здесь важно запомнить следующее: адреса корневых серверов требуются для работы полноценного рекурсивного резолвера, такой резолвер предоставляет интернет-провайдер (или другой сервис-провайдер); «глупый» резолвер, являющийся стандартным для большинства пользовательских компьютеров, нуждается в адресе хотя бы одного полноценного рекурсивного резолвера, которому он будет переправлять поступающие запросы.
Существуют автоматические методы настройки адресов DNS для пользовательских компьютеров, подключенных к локальной сети. Их подробное рассмотрение выходит за рамки книги. Ключевой момент тут простой: базовые адреса для работы DNS жестко задаются извне, но при этом никто не может помешать сделать нестандартные настройки, то есть, например, использовать какие-то другие корневые серверы. Именно здесь и коренится основа доменных войн (или так называемых войн DNS, приведших в конце 1990-х годов к серьезным изменениям в политике управления Сетью). Подробнее об этой основе и ее историческом значении рассказывается в главе 3.