На первый взгляд, процедура разрешения имен при столь сложной иерархической организации доменов только усложняется. В конце концов, если нет централизованного механизма, определяющего соответствие имен и узлов, откуда простому приложению узнать, какому имени какой сетевой адрес соответствует?В этом заключается самая сильная сторона DNS. Если вам необходимо узнать IP-адрес компьютера erdos, вы должны обратиться к людям, которые управляют этим компьютером. Эти люди обязательно сообщат вам требуемую информацию.
Служба DNS представляет собой гигантскую распределенную базу данных. Доступ к информации из этой базы осуществляется при помощи серверов имен (name servers),каждый из которых предоставляет информацию о компьютерах одного или нескольких доменов. В каждой зоне имен существуют как минимум два (а может быть, и больше) сервера имен, хранящих информацию о сетевых узлах этой зоны. Чтобы узнать IP-адрес компьютераerdos, вам необходимо обратиться к серверу имен зоны groucho.edu.
Каким же образом можно обнаружить адрес сервера имен? Система DNS также решает эту проблему. Когда приложение хочет получить информацию о компьютере erdos, оно адресует соответствующий запрос локальному серверу имен. Не обнаружив в своей базе данных соответствующего имени, локальный сервер адресует запрос об имени erdos.maths.groucho.edu серверу имен корневого домена. Сервер имен корневого домена обнаруживает, что это имя не принадлежит к его зоне имен, однако он также понимает, что это имя принадлежит к одной из зон имен домена edu. Исходя из этого он рекомендует перенаправить запрос серверу имен домена edu и сообщает список всех серверов имен домена edu с соответствующими им адресами. Ваш локальный сервер имен посылает запрос одному из серверов имен домена edu, например серверу a.isi.edu. Сервер a.isi.edu знает, что это имя принадлежит к зоне groucho.edu, обслуживание которой осуществляют собственные серверы имен. Поэтому сервер a.isi.edu рекомендует перенаправить запрос одному из серверов имен домена groucho.edu и сообщает возможные адреса этих серверов. Ваш локальный сервер направляет запрос на одни из указанных серверов, который, распознав, что требуемое имя принадлежит его зоне имен, возвращает искомый IP-адрес.
Может показаться, что при использовании такой технологии вся сеть перегружается обилием передаваемых из копна в конец запросов. Однако на самом деле количество передаваемых данных при использовании системы DNS значительно меньше, чем при хранении всей информации в файле HOSTS.TXT и передаче через сеть всего содержимого этого файла. Однако и описанную схему также можно улучшить.
Для уменьшения временной задержки при последующих обращениях по одному и тому же адресу локальный сервер имен запоминает полученную информацию о соответствии некоторого имени некоторому IP-адресу в собственном кэше. Поэтому, если в следующий раз кто-то из вашей локальной сети захочет узнать IP-адрес компьютера, принадлежащего домену groucho.edu. ваш локальный сервер имен не будет повторять заново весь процесс, а напрямую свяжется с сервером имен домена groucho.edu. (Если бы и системе DNS отсутствовал механизм кэширования, эта система была бы стиль же плоха, как и любая другая, так как каждый запрос обязательно перенаправлялся бы к корневому серверу имен.)
Конечно, локальный сервер имен не хранит информацию в кэше вечно. Он стирает ее спустя некоторый период времени, называемый временем жизни (time to live, TTL). Этот параметр сохраняется в базе данных DNS для каждого из адресов. Его значение определяется администраторами соответствующей зоны имен.