Разрешение имен (name resolution)1 - это ключевой компонент любой сетевой операционной системы. Способность одного ресурса сети однозначно определить расположение и тип другого ресурса является краеугольным камнем стабильно работающей сети. Поэтому выбираемая стратегия разрешения имен должна быть устойчивой, надежной и соответствовать промышленным стандартам.
Задача разрешения имен играет ведущую роль в любой системе обработки электронной почты. В процессе прохождения письма от отправителя к получателю почтовые серверы должны уметь корректно определять адрес точки назначения. По сути, эта идея похожа на работу обычных почтовых служб по передаче письма из одного пункта в другой. Почтовые службы используют почтовый индекс для определения района получателя, тогда как системы обработки электронной почты используют DNS для решения вопроса о том, где расположен почтовый сервер, обрабатывающий почту получателя письма.
В этой главе представлен обзор основных компонентов системы доменных имен (Domain Name System - DNS) и описание их работы. Особое внимание направлено на процесс взаимодействия между службами DNS и окружением Exchange Server 2003. Кроме того, рассмотрены проблемы, возникающие в процессе настройки и работы этих систем, и способы их устранения.
Определение службы доменных имен
Службы присвоения сетевых имен были разработаны, чтобы облегчить процесс запоминания сложных и непонятных для человека сетевых адресов. DNS - это распределенная база данных, проиндексированная по доменным именам. Каждое доменное имя представляет собой описание пути в большом обращенном дереве - пространстве имен доменов. Это дерево имеет иерархическую структуру.
Все реализации DNS придерживаются набора критериев, которые перечислены ниже.
• Каждая вершина в дереве имеет текстовую метку длиной до 63 символов.
• Корневая вершина дерева помечена именем нулевой длины (то есть пустым).
• Полное имя каждой вершины - это путь от этой вершины до корня дерева, представленный последовательностью текстовых меток вершин, разделенных точками. Корневая вершина обозначается просто точкой.
• Доменное имя, которое заканчивается точкой, называется абсолютным (или полным) именем домена (fully qualified domain name - FQDN).
• Спецификация DNS требует, чтобы вершины с одним родителем имели разные имена. Это ограничение гарантирует однозначность определения отдельной вершины, независимо от ее положения в структуре дерева.
Как работает DNS
DNS состоит из двух основных типов компонент - клиентов и серверов. Серверы хранят информацию об элементах структуры DNS и обрабатывают запросы, а клиенты выдают запросы к серверу. 
Каждый сервер содержит некоторое подмножество полного пространства имен DNS. Эти подмножества называют зонами (zones). На DNS-серверах могут храниться как зоны прямого, так и зоны обратного просмотра. Зоны прямого просмотра (forward lookup zones) используются для преобразования имен DNS в IP-адреса. Например, зона прямого просмотра для microsoft.com преобразовывает имя www.microsoft.com в его цифровой вид - IP-адрес. Зоны обратного просмотра (reverse lookup zones) ответственны за обратное преобразование - IP-адреса в имя DNS.
Чтобы понять, как DNS-клиент обрабатывает DNS-запросы, нужно знать, в каком порядке выполняется процесс разрешения имени. Когда DNS-клиент получает запрос на разрешение DNS-имени, он каждый раз проходит несколько шагов. Если в результате выполнения этих операций находится пара DNS-имя - IP-адрес, клиент возвращает результаты поиска и завершает свою работу. Если совпадение не найдено, клиент возвращает сообщение об ошибке. Сначала клиент пытается обработать запрос с использованием локальных ресурсов:
• Выполняется поиск в локальном кэше, образованном на основе предыдущих запросов. Элементы кэша остаются в нем в течение периода времени существования (Time-To-Live, TIL), который устанавливается для каждого элемента. После завершения DNS-клиента кэш очищается.
• Просматривается файл HOSTS в каталоге %systemroot%system32driversetc. Файл HOSTS хранит отображение IP-адресов на имена хостов и позволяет жестко закодировать связи между адресами и именем хоста сети. Записи в этом файле остаются в системе даже после ее перезагрузки.
Когда клиент исчерпывает все доступные локальные ресурсы, он посылает запрос DNS-серверу на предмет искомой записи. DNS-сервер пытается разрешить запрос клиента следующим образом:
• Если результат запроса найден в одной из зон, для которой DNS-сервер является авторитарным, сервер возвращает положительный ответ.
• Если результат не найден в записях зоны, сервер сначала осуществляет поиск в своем локальном кэше.
Если поиск в локальных ресурсах сервера не дал результатов, DNS-сервер отправляет рекурсивный запрос другим серверам. Этот запрос отсылается либо к серверу, указанному как Forwarder (сервер пересылки запросов), либо к набору корневых серверов из списка, который хранится в файле root.hints на DNS-сервере.
DNS-запрос будет передаваться от сервера к серверу в Internet до тех пор, пока не попадет на сервер, который является авторитарным в зоне, указанной в запросе. Этот DNS-сервер посылает или положительный ответ (с запрашиваемым IP-адресом) или отрицательный (адрес не найден).