Что такое DNS?

DNS (Domain Name System - система доменных имён) - это полностью автоматизированная система, которая позволяет получать информацию о доменах. Чаще всего она используется для получения IP-адреса по доменному имени.

Учитывая разнообразие доменных имён и огромное количество запросов по всему миру, можно смело утверждать, что даже нескольких мощных серверов будет недостаточно для обработки всех запросов. Система доменных имён представляет собой иерархическую структуру многих DNS-серверов (что и является причиной деления доменов по уровням). Иерархия DNS-серверов соответствует иерархии доменов. Каждый DNS-сервер отвечает за конкретную доменную зону.

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

В системе доменных имён имеется 13 корневых DNS-серверов, каждый из которых позволяет получить адреса DNS-серверов для любого домена верхнего уровня: ru, com, org, net и т.п. DNS-сервера верхнего уровня содержат списки серверов для всех своих доменов 2-го уровня и т.д.

Теоретически поиск IP-адреса для любого ресурса в Интернете начинается с запроса к корневому DNS-серверу. Корневой сервер возвращает IP-адрес сервера, отвечающего за соответствующую доменную зону верхнего уровня, и т.д. Пример получения IP-адреса для доменного имени yandex.ru по шагам:

  • Клиент (например, Интернет-браузер) отправляет запрос к DNS-серверу Интернет-провайдера: Какой IP-адрес домена yandex.ru?.
  • DNS-сервер Интернет-провайдера не знает нужный IP-адрес, поэтому отправляет запрос к корневому DNS-серверу: Какой IP-адрес домена yandex.ru?.
  • Корневой DNS-сервер не знает нужный IP-адрес, но он знает IP-адреса DNS-серверов для любого домена верхнего уровня. Он возвращает IP-адрес DNS-сервера, ответственного за зону ru.
  • DNS-сервер Интернет-провайдера отправляет запрос к DNS-серверу, ответственному за зону ru: Какой IP-адрес домена yandex.ru?.
  • DNS-сервер, ответственный за зону ru, не знает нужный IP-адрес, но он знает IP-адреса DNS-серверов для любого домена 2-го уровня. Он возвращает IP-адрес DNS-сервера, ответственного за зону yandex.ru.
  • DNS-сервер Интернет-провайдера отправляет запрос к DNS-серверу, ответственному за зону yandex.ru: Какой IP-адрес домена yandex.ru?.
  • DNS-сервер, ответственный за зону yandex.ru, возвращает в ответ нужный IP-адрес.
  • DNS-сервер Интернет-провайдера передаёт полученный IP-адрес клиенту (браузеру).

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

Доменное имя и IP-адрес не всегда однозначно определяют друг друга. Одному IP-адресу может соответствовать несколько доменных имён. Это позволяет на одном сервере (компьютере) поддерживать несколько сайтов. В этом случае ответ сервера зависит от доменного имени в запросе. Такой подход к размещению сайтов называется виртуальным хостингом.

Верно и противоположное - одному доменному имени может соответствовать несколько IP-адресов. Это позволяет распределить нагрузку между несколькими серверами в случаях, когда ресурсов одного сервера недостаточно.