Основная функция DNS — преобразование имен для запрашивающих клиентов, поэтому механизм запроса является одним из наиболее важных элементов системы. Обычно к базе данных DNS выполняются два типа запросов: рекурсивный и итеративный.
Чаще всего рекурсивные запросы выполняются распознавателями (resolvers), или клиентами, которые нуждаются в преобразовании конкретного имени сервером DNS. Рекурсивные запросы выполняются также DNS-сервером, если ретрансляторы сконфигурированы для использования на конкретном сервере имен. Рекурсивный запрос просто выясняет, может ли конкретный сервер имен разрешить конкретную запись. Ответ на рекурсивный запрос может быть отрицательным или положительным. Типичный сценарий выполнения рекурсивного запроса показан на рис. 1.
Рис. 1. Рекурсивные и итеративные запросы
Итеративные запросы требуют от сервера DNS либо выполнить запрос, либо указать наилучшую ссылку на DNS-сервер, содержащий более точную информацию о том, где этот запрос может быть разрешен. Затем выполняется еще один итеративный запрос к указанному в ссылке серверу и так далее, пока не будет получен положительный или отрицательный результат.
В примере, приведенном на рис. 1, клиент Client1 из домена dom1.local открывает Web-браузер и пытается войти на Web-сайт www.microsoft.com. Система инициирует рекурсивный запрос к стандартному серверу имен — в данном случае Server1. Поскольку Server1 управляет только пространством имен dom1.local и не содержит записей для microsoft.com, запрос пересылается "вышестоящему" DNS-серверу, который указан в корневых ссылках DNS-сервера. Этот сервер Server2 тоже не управляет пространством имен microsoft.com, но он возвращает серверу Server1 ссылку на сервер Server3, являющийся сервером имен пространства имен .com. Серверу Server3 известно, что запросы преобразования имен для пространства имен microsoft.com выполняет сервер Server4, и он возвращает эту информацию серверу Server1. Затем Serverl отправляет серверу Server4 заключительный итеративный запрос, и Server4 успешно преобразует имя www в соответствующий IP-адрес. Получив эту информацию, сервер Server1 возвращает ответ на первоначальный запрос клиента Client1, содержащий нужный IP-адрес, и браузер клиента Client1 успешно разрешает имя www.microsoft.com.
Этот функциональность лежит в основе распределенной структуры DNS и позволяет успешно выполнять поиск в DNS, что мы все и наблюдаем.
В основе DNS лежат и другие основные компоненты, которые необходимы для ее правильного функционирования. Кроме того, следует полностью разобраться в функциях некоторых основных компонентов DNS, интенсивно используемых в DNS реализации Microsoft.
Предыдущие версии DNS зависели от обновлений всех записей в базе данных DNS, которые администраторы выполняли вручную. При каждом добавлении ресурса или изменении информации о ресурсе база данных DNS обновлялась вручную для отражения этих изменений, обычно с помощью простого текстового редактора. Динамическая DNS была разработана из-за возросшей нагрузки администраторов по поддержанию баз данных DNS в работоспособном состоянии. Пользуясь динамической DNS, клиенты могут автоматически обновлять свои записи в DNS в соответствии с настройками безопасности данной зоны.
Важно отметить, что динамические обновления уже поддерживали клиенты Windows 2000/ХР и последующих систем, а для обновления в DNS информации клиентов предшествующих систем (NT/9x) они должны иметь должным образом сконфигурированный протокол DHCP. Однако с этой функциональностью связаны некоторые проблемы безопасности.
Значение времени существования (Time to Live — TTL) отвечает за то, на протяжении какого времени (в секундах) распознаватель или сервер имен будет хранить DNS-запрос в кэше, прежде чем запрашивать его снова с исходного сервера имен. Это значение помогает поддерживать содержащуюся в базе данных DNS информацию в актуальном состоянии. Установка уровней TTL, по сути, представляет собой попытку отыскать оптимальный компромисс между необходимостью в обновлении информации и необходимостью в сокращении объема связанного с передачей DNS-запросов сетевого трафика.
Возьмем пример из раздела "Выполнение итеративных запросов": если бы клиент Client1 уже запросил IP-адрес www.microsoft.com, и на DNS-сервер была возвращена отражающая этот IP-адрес информация, вполне резонно было бы предположить, что данный IP-адрес будет изменяться не часто и, следовательно, может быть помещен в кэш для будущих запросов. При следующем запросе этой же информации уже каким-то другим клиентом локальный DNS-сервер мог бы передать ему тот IP-адрес, который получил при выполнении запроса первого клиента Client1, при условии, что у того не истек срок хранения, указанный в TTL. Такой подход помогает сокращать объем сетевого трафика и улучшать показатели скорости обработки DNS-запросов.
Значение TTL для ответа устанавливается тем сервером имен, который успешно разрешает запрос. Другими словами, элементы в кэше могут иметь разные значения TTL на основании того, где они обрабатывались, и какое значение TTL используется в той зоне, откуда они были получены.