Понимание внутренних механизмов работы DNS дает возможность пользователям и администраторам более эффективно использовать Internet.


КАК РАБОТАЕТ DNS
НАСТРОЙКА КЛИЕНТСКОЙ ЧАСТИ

Что в имени тебе моем?
Оно умрет, как шум печальный
А.С.Пушкин

В сетях TCP/IP компьютеры для общения между собой используют IP-адреса. Однако то, что удобно машинам, неудобно людям. Сама человеческая натура протестует против запоминания чисел типа 192.120.18.34. К тому же IP-адреса совсем не информативны. По IP-адресу невозможно понять, что это: сервер, ПК, маршрутизатор или сетевой принтер. Приятней работать с осмысленными именами, такими как sales-server. Тем не менее сетевые устройства обращаются друг к другу, используя IP-адрес, а не имена.

Решает эту проблему система именования сетевых объектов, которая отвечает за преобразование символьных имен в IP-адреса. Системе передается имя (например archie.univie.ac.at), а она возвращает IP-адрес (140.78.3.8).

Системы именования сетевых объектов делятся на "плоские" и иерархические (доменные).

В стародавние времена, когда Internet еще называлась ARPANET и Сеть состояла лишь из громоздких многотерминальных компьютеров типа мэйнфреймов (при этом их количество оставалось относительно невелико), была реализована система именования для одноуровневого (плоского) пространства имен. Ее также называют "плоской" системой именования.

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

Недостатки такой схемы начали проявляться довольно быстро: с переходом от больших машин к персональным и с ростом Сети. Трафик, связанный с обновлением информации при добавлении компьютеров в Сеть, грозил забить все линии связи Internet. Кроме того, каждое имя в сети должно быть уникальным, а сделать это становится все труднее и труднее.

Поэтому к середине 80-х годов появилась другая, более гибкая система именования - система имен доменов (Domain Name System, DNS). DNS реализует иерархическое пространство имен. Единицей измерения является домен (территория, область). Понятие домена DNS не надо путать с доменом Windows NT или доменом NIS. Они не имеют друг к другу никакого отношения. На Рисунке 1 приведена часть иерархической структуры DNS сети Internet. Вся сеть представляется в виде единого иерархического дерева. На вершине располагается корневой домен (обозначается символом "."). Ниже находятся домены первого уровня. Поскольку Internet развивался в первую очередь в США и за счет американских налогоплательщиков, это вызвало некоторый крен при формировании доменов первого уровня: Internet как бы оказался поделенным между США и всем остальным миром.

Picture 1(1x1)

Рисунок 1.
Иерархическая структура DNS в Internet.

Наиболее известные домены первого уровня:

    com - коммерческие организации (главным образом в США);

    edu - учебные заведения США;

    gov - правительственные учреждения США;

    mil - военные учреждения США;

    net - различные сетевые агентства и Internet-провайдеры;

    int - международные организации;

    org - некоммерческие учреждения;

    код страны - двухбуквенный код для обозначения государства (ru - для России, su - для СССР).

Ниже доменов первого уровня располагаются домены второго уровня и так далее вплоть до хостов. Для доменов первого уровня, обозначающих государства, доменами второго уровня часто бывают города (например, msk - для Москвы), а доменами третьего уровня - предприятия и организации.

Любой хост или домен в Internet однозначно идентифицируется так называемым полным доменным именем (Fully Qualified Domain Name, FQDN). Его иногда еще называют абсолютным доменным адресом.

Так, для сетевого устройства host1 (см. Рисунок 1) полное доменное имя будет

host1.company1.msk.ru.

а для домена company1

company1.msk.ru.

Домены в FQDN записываются справа налево в порядке подчинения и разделяются точками. Каждая отдельная составляющая FQDN называется меткой (label). Длина метки не должна превышать 63 символа, а полная длина FQDN - 255 символов. Допустимыми символами являются буквы английского языка, цифры и знак дефиса "-" (знак дефиса не может стоять в начале или конце метки). Регистр букв значения не имеет, т. е. company1.msk.ru. и COMPANY1.MSK.RU. обозначают один и тот же домен.

Обратите внимание на конечную точку в полном доменном имени. Она обозначает, во-первых, корневой домен, и, во-вторых, что используется абсолютная адресация.

Кроме абсолютной применяется и относительная доменная адресация. Когда два устройства находятся в одном и том же домене, они могут обращаться друг к другу по имени, не указывая полного доменного пути. Так, host2 обращается к host1 двумя способами:

  • по полному доменному имени host1.company1.msk.ru.
  • по относительному доменному адресу host1

В полном доменном имени конечную точку можно не ставить, поскольку обычно программное обеспечение TCP/IP подразумевает, что составное доменное имя (т. е. когда присутствует более двух меток) обозначает FQDN. Таким образом,

company1.msk.ru. и company.msk.ru.

суть одно и то же.

Домены находятся в иерархическом подчинении друг другу, причем домены являются узлами дерева доменов, а хосты - листьями.

Понятие домена достаточно емкое и в то же время гибкое. Оно не ограничивается какими-то физическими границами, например границами IP-сети или сегмента Ethernet. Доменом DNS может быть и страна, и предприятие, и отдел банка. Один домен может включать как множество сетей, так и только часть одной сети или даже подсети. На Рисунке 2 представлен пример домена, включающего одну сеть целиком и две частично.

Picture 2(1x1)

Рисунок 2.
Домен, представляющий собой подразделение предприятия.

Как уже отмечалось, основное назначение DNS состоит в преобразовании имени хоста в его IP-адрес. На самом деле DNS является системой, не зависимой от протокола сетевого уровня, т. е. она может быть реализована не только в среде TCP/IP. Однако функции DNS этим не ограничиваются. DNS позволяет получить следующую информацию:

  • IP-адрес хоста;
  • доменное имя хоста по его IP-адресу;
  • псевдонимы хоста, тип центрального процессора и операционной системы хоста;
  • сетевые протоколы, поддерживаемые хостом;
  • почтовый шлюз;
  • почтовый ящик:
  • почтовую группу;
  • IP-адрес и доменное имя сервера имен доменов.

Существует и ряд других, реже используемых параметров.

КАК РАБОТАЕТ DNS

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

Программное обеспечение, которое общается с серверами имен, называют клиентом DNS (английскому термину Resolver очень трудно подобрать подходящий русский перевод). Клиент DNS выполняет роль посредника между сетевыми приложениями и серверами имен. При этом он, как правило, скрыт от пользовательских программ. Сетевые приложения используют клиент DNS чаще всего неявно, через функции стека TCP/IP. Однако приложение nslookup (к сожалению, оно имеется не во всех прикладных оболочках TCP/IP) позволяет получить любую информацию из базы DNS.

Клиент DNS входит в состав программного обеспечения TCP/IP. Но стек TCP/IP, помимо DNS, поддерживает и "плоскую" систему именования (через файл hosts). Это позволяет обеспечить работоспособность сетевых устройств при проблемах с DNS (например при отсутствии связи с сервером имен).

Клиент DNS может функционировать как на отдельном компьютере, так и на сервере имен.

Сервер имен на самом деле отвечает не за домен, а за так называемую зону управления (Zone of Authority), в которую могут входить несколько смежных доменов (см. Рисунок 3). Более того, сервер имен способен управлять несколькими, причем не обязательно смежными, зонами одновременно.

Picture 3(1x1)

Рисунок 3.
Взаимосвязь зоны управления и доменов DNS. Сервер name-srv.depart1.company1.msk.ru управляет доменами depart1, depart2 и company1, но не доменом depart3.

Сервер имен содержит полную информацию по своим зонам управления и хранит адреса серверов зон вышестоящих и нижестоящих доменов.

Клиенты DNS и серверы имен кэшируют в оперативной памяти данные, полученные от других серверов имен. Время, в течение которого информация хранится в кэше, определяется источником информации и обычно составляет от десятков минут до нескольких суток. Кэширование позволяет уменьшить трафик в сети, а также снизить нагрузку на серверы имен.

Серверы имен бывают нескольких типов. Первичный сервер имен (Primary Name Server) хранит на своих дисках главные файлы (master files), в которых содержится вся информация о зонах управления данного сервера. Эти файлы загружаются в память сервера имен при его запуске.

Вторичный сервер имен (Secondary Name Server) используется как дубликат первичного сервера, что обеспечивает отказоустойчивость DNS. Он загружает информацию с первичного сервера и затем периодически ее обновляет, посылая первичному серверу запросы.

Серверы "только для кэширования" (Cache-Only Server) записывают в кэш информацию, полученную от других серверов имен. Чаще всего они используются в больших сетях для разгрузки первичного сервера.

Это, однако, еще не все типы серверов имен, но оставшиеся (серверы Forwarder и Slave Forwarder) имеют лишь незначительные отличия в обработке информации DNS.

По правилам Internet, для повышения отказоустойчивости DNS зоной должны управлять как минимум два сервера имен. Обычно для этого устанавливают один первичный и один-два вторичных сервера.

При добавлении компьютера в сеть или изменении его IP-адреса, файлы (master files) редактируются только на первичном сервере имен. Обновление содержимого других серверов имен данной зоны будет происходить по мере устаревания содержимого их кэш-памяти. Эти серверы сами должны посылать запрос первичному серверу на обновление информации по зоне. Серверам имен других зон передается только конкретная информация (а не данные по всей зоне) и только по их запросам. Таким путем удалось резко снизить в Internet трафик, связанный с преобразованием имен в IP-адреса.

Программное обеспечение серверов имен написано для большого числа многозадачных ОС (Unix, NetWare, Windows NT, VMS и т. д.). Серверы имен могут работать в двух режимах: нерекурсивном и рекурсивном.

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

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

При рекурсивном режиме работы клиент DNS посылает запрос серверу имен, после чего последний, при отсутствии нужной информации, сам обращается по цепочке к другим серверам имен. После получения информации сервер имен отсылает клиенту результат. Благодаря этому клиент DNS освобождается от большей части работы по поиску информации в DNS.

Чтобы работать в рекурсивном режиме, сервер и клиент должны быть настроены соответствующим образом. Однако в большинстве случаев пользователь не имеет возможности менять настройку режима работы клиента, поскольку она "зашита" в программное обеспечение TCP/IP.

Рекурсивный режим применяется реже нерекурсивного, так как нагрузка на серверы имен в этом случае значительно возрастает. Да и для клиента такой режим не оптимален, ибо в случае задержки ответа ему трудно определить, что произошло: сбой на линии или просто опрашивается очень длинная цепочка серверов имен.

НАСТРОЙКА КЛИЕНТСКОЙ ЧАСТИ

Как уже было отмечено, программное обеспечение TCP/IP одновременно поддерживает и клиента DNS, и файл hosts.

В большинстве приложений TCP/IP принято, что настройки клиента DNS задаются в специальном конфигурационном файле. Для Unix это /etc/resolv.conf, для многих приложений DOS и Windows - ETCRESOLV.CFG, для NetWare - SYS:ETCRESOLV.CFG. Форматы данных файлов полностью идентичны. Для Windows 95 и Windows NT 4.0 подобный файл отсутствует (настройки DNS хранятся в реестре), а параметры настроек задаются в окне Control Panel (Панель управления) - значок Network (Сеть), опция TCP/IP, Properties (Свойства). Эти параметры аналогичны тем, которые применяются в файле типа resolv.conf.

Файл типа resolv.conf имеет формат:

domain <текущий домен>
nameserver <адрес 1-го сервера>
nameserver <адрес 2-го сервера>
nameserver <адрес 3-го сервера>

где domain указывает текущий домен хоста, а nameserver - IP-адрес сервера имен.

Пример файла resolv.conf:

domain company1.msk.ru
nameserver 194.195.12.1
nameserver 194.195.12.5

Количество строк с адресами серверов имен не может превышать трех. Порядок записей серверов имен имеет значение для определения порядка вызова серверов: сначала самый первый сервер имен из списка, далее второй и т. д. Обычно первым указывают ближайший вторичный сервер имен данного домена, а затем - первичный. Это позволяет снизить нагрузку на первичный сервер. Если указанный первым в списке серверов имен не работает, то пройдет заметный промежуток времени (до нескольких секунд), прежде чем клиент DNS обратится ко второму серверу.

Файл hosts отвечает за "плоскую" систему именования. Местонахождение этого файла зависит от операционной системы (Unix - /etc/hosts, DOS и Windows - ETCHOSTS, NetWare - SYS:ETCHOSTS). Формат его очень прост: он состоит из строк, каждая из которых определяет один хост:

<имя> [<псевдоним> ... <псевдоним>]

Например:

194.195.12.3 ko1-srv ftp-srv
192.15.2.6 www.company.com
194.195.12.6 pc3

Обратите внимание, что файл hosts может содержать имена в доменном формате.

В большинстве ОС клиент DNS запускается автоматически при наличии файла resolv.conf (в случае Windows 95/NT - если присутствуют требуемые записи в реестре). Если DNS-клиент запущен, то программное обеспечение TCP/IP сначала пытается определить IP-адрес хоста через него, а лишь затем через файл hosts. Так что будьте внимательны! Если, например, файл resolv.conf испорчен или даже пуст (!), то обращение к файлу hosts будет осуществляться с большой задержкой.

И еще один совет. Если вы часто работаете с каким-либо сервером в Internet, то лучше узнать его IP-адрес (это можно сделать с помощью одной из таких команд, как ping, host или nslookup) и в дальнейшем вызывать данный сервер по IP-адресу. Это позволяет зачастую существенно сократить время подключения к серверу, поскольку длинные цепочки обращений к серверам имен DNS не задействуются.

Принципы настройки серверов имен DNS мы рассмотрим в одном из ближайших номеров LAN Magazine/Русское издание.


Константин Пьянзин - администратор сети АО "Подольский машиностроительный завод". С ним можно связаться по адресу: koka@aozio.msk.ru.