Схемы запросов
Рассмотрим процесс разрешения доменных имен в 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). "Ближайшим" считается сервер, являющийся носителем зоны, в которой размещается домен, близкий к запрашиваемому. При этом поиск начинается от корневого сервера имен. Корневой сервер имен предоставляет ссылку на другой сервер имен, который, по его мнению, должен располагать сведениями о запрашиваемом хосте (или домене). Тот, в свою очередь, может предоставить ссылку на другой сервер имен и т. д. В конечном итоге будет найден сервер имен, располагающий сведениями о требуемом доменном имени.