Схемы запросов


Рассмотрим процесс разрешения доменных имен в IP-адреса, определенный в рамках спецификации службы DNS (RFC 1034 и RFC 1035). Процесс разрешения доменного имени предполагает строго регламентированное взаимодействие DNS-клиента и цепочки DNS-серверов. Взаимодействие начинается с момента, когда пользователь или приложение используют доменное имя для ссылки на некоторый хост. Соединение с любым хостом осуществляется только на уровне IP-адресов. Поэтому DNS-клиент должен выполнить разрешение доменного имени.
Всю работу по разрешению доменного имени выполняет DNS-сервер. В зависимости от обстоятельств, в процесс разрешения имени может быть вовлечен один сервер или несколько DNS-серверов.

Изначально для разрешения доменных имен использовался специальный текстовый файл, в котором перечислялись IP-адреса и соответствующие им имена компьютеров. Этот файл, получивший название HOSTS (хосты), помещается на сервере. Каждый клиент копировал этот файл и использовал его для разрешения имен. При необходимости разрешения имени клиент просматривает файл HOSTS с целью обнаружения интересующего имени. Подобная схема разрешения имен подходит для небольших статичных сетей. В большой динамичной сети поддержание файла HOSTS в актуальном состоянии на всех клиентах представляет собой трудно решаемую проблему. Служба DNS явилась альтернативой механизму разрешения имен посредством файла HOSTS.

Информация об объектах пространства имен DNS может быть распределена между множеством DNS-серверов. В этом случае DNS-серверы образуют иерархию, подобную иерархии пространства имен (рис. 13.2). В самом простом случае иерархия DNS-серверов может полностью повторять иерархию доменных имен. Каждый DNS-сервер хранит информацию только о части общего пространства имен. Это значит, что сервер самостоятельно способен разрешить только некоторую часть доменных имен. Если сервер не способен разрешить доменное имя самостоятельно, он передает этот запрос дальше, вверх по иерархии.
Каждый DNS-сервер имеет собственный кэш, в который помещаются сведения обо всех доменных именах, разрешенных данным сервером в результате выполнения обращений к другим DNS-серверам. К этому кэшу DNS-сервер обращается всякий раз, когда он не в состоянии выполнить разрешение доменного имени самостоятельно. Только если информация о доменном имени не будет обнаружена в кэше, сервер направит запрос выше по иерархии. Использование кэша позволяет повысить эффективность разрешения имен и снизить нагрузку на коммуникационные линии.
Допускается ситуация, когда DNS-сервер вообще не используется для хранения информации о доменном пространстве имен. Однако он включен в иерархию DNS-серверов. Для разрешения доменных имен этот сервер применяет собственный кэш и запросы к вышестоящим DNS-серверам. Подобный тип DNS-серверов принято называть кэширующими DNS-серверами (caching DNS servers).



Рис. 13.2. Иерархия DNS-серверов

Существует две схемы запросов, которые могут использоваться для разрешения доменного имени: рекурсивные и итерационные (итеративные) запросы. Рассмотрим каждую из схем в отдельности.
В ответ на рекурсивный запрос (recursive query) клиента DNS-сервер должен возвратить либо IP-адрес, соответствующий запрашиваемому доменному имени, либо сообщение об ошибке, если это имя не может быть разрешено. В процессе разрешения запроса DNS-сервер рекурсивно предпринимает попытки обнаружить так называемые "ближайшие" серверы ("closest known" name servers). "Ближайшим" считается сервер, являющийся носителем зоны, в которой размещается домен, близкий к запрашиваемому. При этом поиск начинается от корневого сервера имен. Корневой сервер имен предоставляет ссылку на другой сервер имен, который, по его мнению, должен располагать сведениями о запрашиваемом хосте (или домене). Тот, в свою очередь, может предоставить ссылку на другой сервер имен и т. д. В конечном итоге будет найден сервер имен, располагающий сведениями о требуемом доменном имени.
Для пояснения рассмотрим пример (рис. 13.3). Допустим, сервер должен выполнить разрешение доменного имени www.ayan.ru. Первоначально DNS-сервер пытается обнаружить в собственной базе данных сведения о домене ауаn. ru. В случае если сведения о данном домене отсутствуют, DNS-сервер пытается обнаружить серверы имен для данного домена (при этом поиск осуществляется как в собственной базе данных, так и в кэше имен). Если соответствующие серверы имен не могут быть обнаружены, предпринимается аналогичная попытка для домена ru. В определенный момент DNS-сервер обратится к серверам корневого домена. Серверы имен корневого домена не располагают информацией о запрашиваемом домене. Но поскольку запрашиваемый домен располагается внутри домена ru, будет возвращена ссылка на серверы имен домена ru. Обращение к DNS-серверам домена ru даст информацию о серверах имен домена ayan.ru. Обратившись к серверу имен домена ayan.ru, DNS-сервер получит информацию об IP-адресе хоста www.ауаn.ru.



Рис. 13.3. Рекурсивный метод разрешения запросов

В случае получения итерационного запроса (iterative query) DNS-сервер просматривает собственную базу данных и кэш, пытаясь обнаружить в них сведения о запрашиваемом доменном имени. Если доменное имя не может быть разрешено DNS-сервером самостоятельно, клиенту будет возвращена ссылка на вышестоящий DNS-сервер. Клиент должен повторно отправить запрос указанному серверу имен. Тот, в свою очередь, просматривает собственную базу данных и возвращает либо адрес требуемого хоста, либо ссылается на другой сервер имен. На определенном этапе клиент свяжется с сервером имен, который располагает сведениями о запрашиваемом доменном имени. В этом сценарии основная нагрузка по разрешению имени возлагается на DNS-клиента.

Итерационные запросы могут использоваться в ситуации, когда или DNS-сервер, или DNS-клиент не поддерживают рекурсивные запросы (например, администратор может запретить на уровне DNS-сервера применение рекурсивных запросов).

На рис. 13.4 показан пример итерационного разрешения доменного имени. Допустим хост store.khsu.ru должен установить соединение с хостом movies.yahoo.com.



Рис. 13.4.Итерационный метод разрешения запросов

Для разрешения указанного доменного имени клиент предпринимает следующие шаги:
1. Клиент обращается к серверу имен, обслуживающему домен khsu.ru. Этот сервер имен не обладает информацией о запрашиваемом имени и возвращает клиенту ссылку на вышестоящий сервер имен (обслуживающий домен ru).
2. Клиент обращается к серверу имен, обслуживающему домен ru. Этот сервер имен не обладает информацией о запрашиваемом имени и возвращает клиенту ссылку на корневой сервер имен (домен ".").
3. Клиент обращается к корневому серверу имен. Корневой сервер имен обнаруживает, что запрашиваемое доменное имя принадлежит к домену com. Клиенту возвращается ссылка на сервер имен, обслуживающий домен com.
4. Клиент обращается к серверу имен, обслуживающему домен com. Данный сервер имен находит в своей базе данных записи о сервере имен, обслуживающем домен yahoo.com. Ссылка на этот сервер имен возвращается клиенту.
5. Клиент обращается к серверу имен, обслуживающему домен yahoo.com. Сервер имен находит в своей базе данных запись о хосте movies.yahoo.com. Соответствующий этому имени IP-адрес возвращается клиенту.