Некоммерческая организация ICANN (Internet Corporation for Assigned Names and Numbers), созданная в целях сопровождения процесса выделения доменных имен и IP-адресов, делегирует часть своих полномочий ряду организаций-регистраторов. (Прежде процесс находился в ведении правительства США.)
Регистраторы, авторизованные ICANN, имеют право выделять домены. Чтобы получить домен, необходимо обратиться к регистратору, чтобы получить право создать домен в одном из доменов верхнего уровня. (Подробности процесса получения доменного имени рассмотрены в главе 4.) Получив разрешение на создание домена, можно создавать дополнительные домены - поддомены - в пределах созданного. Рассмотрим процедуру на примере нашей воображаемой компании.
Наша компания - это коммерческое, приносящее прибыль (хотелось бы надеяться) предприятие. Очевидно, оно должно располагаться в домене сот. Мы обращаемся в уполномоченную организацию, чтобы создать домен wrotethebook в домене сот. Запрос нового домена содержит имена и адреса серверов, которые будут обеспечивать работу службы имен домена. Одобрив запрос, регистратор помещает в домен сот указатели на серверы имен нового домена. Теперь корневые серверы, получая запросы по домену wrotethebook.com, будут перенаправлять их к новым серверам имен.
Одобрение регистратора дает нам полную власть над новым доменом. Владелец любого зарегистрированного домена имеет право делить домен на поддомены. Наша воображаемая компания может разбить домен на раздел, отвечающий за специальные события (events.wrotethebook.com), и раздел, координирующий подготовку журнальных статей (articles.wrotethebook.com), не обращаясь при этом к регистратору или в иные «вышестоящие инстанции». Решения по добавлению поддоменов принимаются на уровне локального администратора домена. Регистраторы делегируют полномочия и распределяют управление именами между отдельными организациями. Делегирование полномочий означает, что организация становится ответственной за управление выделенными ей именами.
Новый поддомен становится доступен, когда указатели на серверы нового домена размещаются в домене уровнем выше (рис. 3.1). Удаленные серверы не способны обнаружить домен wrotethebook.com, пока указатель на сервер этого домена не будет размещен в домене сот. Точно так же нельзя обратиться к поддоменам events и articles, если указатели на них не размещены в домене wrotethebook.com. На серверы имен домена указывает запись в базе данных DNS, имеющая тип NS (name server). Запись этого типа содержит имя домена и имя узла, который является сервером имен домена. Конкретные примеры для базы данных DNS приводятся в главе 8. Пока что условимся считать эти записи просто указателями.
Применение NS-записей в качестве указателей отражено на рисунке. Локальному серверу необходимо преобразовать имя linuxuser.articles.wrotethebook.com в адрес IP. В кэше сервера отсутствуют сведения о домене wrotethebook.com, поэтому происходит обращение к корневому серверу имен (в нашем примере a.root-servers.net) с запросом искомого адреса. Корневой сервер отвечает NS-записыо, указывающей на узел crab.wrotethebook.com в качестве источника информации по wrotethebook.com. Локальный сервер посылает запрос узлу crab, который перенаправляет его к узлу linuxmag.articles.wrotethebook.com, серверу домена articles.wrotethebook.com. Локальный сервер обращается к linuxmag.articles.wrotethebook.com и получает, наконец, искомый адрес IP. Локальный сервер кэширует полученную А-запись (адресную запись) и все NS-записи. Получив следующий запрос адреса linuxuser.articles. wrotethebook.com, локальный сервер сможет ответить на него самостоятельно. Получив следующий запрос, связанный с доменом wrotethebook.com, локальный сервер обратится напрямую к узлу crab, не вовлекая в процесс корневой сервер.
Рисунок содержит примеры как рекурсивного, так и нерекурсивного поиска. Удаленные серверы выполняют нерекурсивный поиск - они лишь указывают локальному серверу, к кому обращаться далее. Локальный сервер следует по указателям самостоятельно - и является рекурсивным сервером. В случае рекурсивного поиска сервер следует по указателям и возвращает окончательный ответ на запрос. Корневые серверы, как правило, выполняют только нерекурсивный поиск. Большинство других серверов выполняют рекурсивный поиск.