Протокол DNS

управляет взаимодействием между DNS-клиентом и DNS-серве- ром. DNS-клиент посылает запрос (например, на IP-адрес, ассоциированный с определенным доменным именем) DNS-серверу, а DNS-сервер возвращает ответ с за- прошеипой информацией (например, IP-адрес). Локальный DNS-сервер носылает ответы преобразователям и выдает запросы другим DNS-серверам. Корневые DNS- серверы посылают ответы на запросы других DNS-серверов, а сами не выдают запросы. Предположим, что приложение вызывает функцию gethostbyname() для определения IP-адреса для www.foo.bar.com. Преобразователь связывается с локальным DNS-сервером, который обращается к корневому DNS-серверу с целью узнать IP-адрес DNS-сервера .com. Затем локальный DNS-сервер посылает запрос DNS-серверу .com, чтобы узпать IР-адрес DNS-сервера bar.com, после этого локальный DNS-сервер посылает запрос DNS-серверу зоны bar.com. Если зона имеет подзоны, то может быть выдан дополнительный запрос домеиу foo.bar.com, который отвечает IР-адре- сом для www.foo.bar.com. Аналогично, установление связи IP-адреса 12.34.56.78 с доменным именем сопровождается серией DNS-запросов к различным DNS-серве- рам в иерархии in-arpa.

DNS-запрос может быть рекурсивньш или итеративным. Рекурсивный запрос требует, чтобы DNS-сервер, принимающий запрос, сам осуществил преобразование. Например, преобразователь выдает рекурсивный запрос локальному серверу имен на преобразование доменного имени в IP-адрес. Как показано на рис. 5.11, на этапе 1 преобразователь активизируется посредством системного вызова из приложения. Затем преобразователь паправляет DNS-запрос локальному DNS-серверу (этап 2) и ожидает ответа (этап 9). Локальный DNS-сервер осуществляет действия но обработке запроса преобразователя. Итеративный запрос требует, чтобы принимающий DNS-сервер напрямую ответил DNS-клиенту IP-адресом следующего DNS-сервера в иерархии DNS. Корневые серверы обслуживают только итеративные запросы. Локальный DNS-сервер носылает запрос корневому DNS-серверу (этап 3), чтобы узпать имена и IР-адреса DNS-сервера (серверов) для зоны на следующем уровне иерархии (этап 4). Это помогает разгрузить корневые серверы от выполнения полного процесса преобразования. Затем локальный DNS-сервер может отправить запрос следующему DNS-серверу в цепочке (этапы 5, 6, 7 и 8). Наконец, Локальный DNS-сервер отвечает преобразователю (этап 9), а преобразователь предоставляет IP-адрес приложению (этап 10).

Рис. 5.11. DNS-преобразоватсль и локальный DNS-сервер

DNS-серверы используют кэширование для уменьшения времени ожидания при ответах на запросы и уменьшения DNS-графика в Internet [DOK92J. Локальный DNS-сервер имеет кэш, который хранит ответы, посылаемые преобразователям клиентов. Кроме того, кэш может храпить IP-адреса каждого из DNS-серверов, участвующих в обработке запроса. Для будущих запросов Локальный DNS-сервер может избежать взаимодействия с корневым сервером, обратившись вместо этого к DNS-серверам первого или второго уровней напрямую, на основе кэшированпой информации. Например, при преобразовании www.foo.com Локальный DNS-cepвер может определить IР-адрес DNS-сервера верхнего уровня .com и DNS-сервера второго уровня foo.com напрямую. Преобразователь не выполняет кэширование, поскольку информация существует только во время работы приложения и не может быть использована совместно другими приложениями, выполняющимися на том же комиыотере, или другими компьютерами в этой же сети.

DNS-сервер кэширует ответы на запросы, основываясь на поле TTL. Каждый DNS-ответ содержит TTL, указывающий число секунд, в течение которых ответ может быть кэшировап. DNS-кэшировапие значительно сокращает время на преобразование доменных имен в IP-адреса. Первый запрос на www.foo.com может сопровождаться большим временем ожидания на соединение с корневым сервером и сервером зопы, но последующие запросы будут обрабатываться непосредственно локальным DNS-сервером. После истечения TTL информация удаляется из кэша и вновь сохраняется в нем при получении другого запроса на преобразование www.foo.com в IР-адрес. DNS-серверы также кэшируют негативную информацию о неудачных запросах. Так, предположим, что пользователь сделал ошибку и ввел URL http://www.boo.com вместо http://www.foo.com. Если www.boo.com не существует, Локальный DNS-сервер получает негативный ответ на свой запрос и возвращает сообщение об ошибке преобразователю. Локальный DNS-сервер помнит, что запрос на www.boo.com был безуспешным, поэтому оп может в дальнейшем быстрее среагировать на ошибку.

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

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100