Что такое DNS? Введение в систему доменных имён

Если вы хоть немного имели дело с интернетом и компьютерными сетями, то наверняка слышали о системе доменных имён (DNS). Прочитав статью узнаете, как это всё работает.

Само имя хоста не даст никакой информации о нахождении конкретной машины, с которой вы собираетесь связаться, поскольку все соединения происходят по IP-адресам.

Сервер доменных имён — это устройство, которое сопоставляет имя хоста с IP-адресом конкретной машины/железа.

В этой статье будет рассказано о деталях различных DNS-запросов, типах DNS-серверов и о разновидностях DNS-записей.

DNS-резолвер

Это компьютеры, которые провайдеры используют для поиска в их базе данных конкретного узла, запрашиваемого пользователем. Когда данные получены, пользователь перенаправляется на соответствующий IP-адрес. Резолверы играют крайне важную роль в DNS.

DNS-резолвер кэширует информацию. К примеру, сайт example.com расположен на машине с IP-адресом 35.195.226.230. Поэтому кэши резолверов со всего мира будут содержать следующее соответствие: example.com35.195.226.230.

Считается, что в будущем сайт может переместиться на любой другой хост с другим IP, скажем, 35.192.247.235. Кэши DNS-резолверов по всему миру некоторое время будут хранить прежний IP-адрес. Это может привести к недоступности сайта, пока изменения не дойдут до всех DNS.

Время, в течение которого запись хранится в резолвере, называется TTL (time to live).

Его можно установить в панели управления сервиса, на котором приобретался домен.

Типы DNS-серверов

Корневой DNS-сервер

Это DNS-сервер, который хранит в себе адреса всех TLD-серверов (TLD — top-level domain, домен верхнего уровня). По пути от имени хоста до IP-адреса запрос сначала попадает на корневой DNS-сервер.

Существует 13 корневых DNS-серверов:

Организации, управляющие корневыми DNS-серверами

Это не означает, что существует только 13 машин, которые обрабатывают все запросы со всего мира — существуют и второстепенные серверы, по которым распределяется трафик.

TLD-серверы

Эти серверы связаны с доменами верхнего уровня (TLD). Обычно они идут после корневых DNS-серверов. В TLD-серверах содержится информация о домене верхнего уровня конкретного хоста.

Скажем, если вы запросите IP-адрес хоста tproger.ru, то будет опрашиваться тот TLD-сервер, который соответствует домену .ru. TLD-сервер возвращает адрес авторитативного DNS-сервера для резолвера.

Теперь возникает вопрос — откуда TLD-серверы знают адрес авторитативных серверов? Ответ прост — после того, как вы покупаете любой домен у регистраторов вроде Godaddy или Namecheap, регистраторы привязывают авторитативные серверы к TLD-серверу.

Сейчас некоторые провайдеры предоставляют возможность использовать сторонние авторитативные серверы. Вы можете выбрать конкретный авторитативный сервер имён у регистратора.

Авторитативный DNS-сервер

Запрос на эти серверы поступает в самую последнюю очередь. Эти серверы хранят фактические записи типа A, NS, CNAME, TXT, и т. п.

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

Типы DNS-запросов

Существует 3 типа DNS-запросов:

  1. Рекурсивный: подобные запросы выполняют пользователи к резолверу. Собственно, это первый запрос, который выполняется в процессе DNS-поиска. Резолвером чаще всего выступает ваш интернет провайдер или сетевой администратор.
  2. Нерекурсивные: в нерекурсивных запросах резолвер сразу возвращает ответ без каких-либо дополнительных запросов на другие сервера имён. Это случается, если в локальном DNS-сервере закэширован необходимый IP-адрес либо если запросы поступают напрямую на авторитативные серверы, что позволяет избежать рекурсивных запросов.
  3. Итеративный: итеративные запросы выполняются, когда резолвер не может вернуть ответ, потому что он не закэширован. Поэтому он выполняет запрос на корневой DNS-сервер. А тот уже знает, где найти фактический TLD-сервер.

К примеру, если вы пытаетесь получить IP-адрес medium.com, то корневой доменный сервер выдаст адрес TLD-сервера для .com. Этот адрес корневой сервер вернёт резолверу. После этого резолвер опросит TLD-сервер. TLD-сервер может не знать нужный IP-адрес, зато он может дать адрес авторитативного DNS-сервера для medium.com.

Попробуем рассмотреть этот процесс на рисунке:

Разберём рисунок выше:

  1. Пользователь выполняет запрос к резолверу для поиска IP-адреса. Это рекурсивный запрос.
  2. Резолвер по возможности просматривает свой кэш на наличие необходимого IP-адреса.
  3. Если у резолвера есть необходимый IP-адрес, то он возвращает его.
  4. В противном случае резолвер выполняет итеративный запрос на корневой DNS-сервер. Корневой DNS-сервер ищет нужный TLD для запрашиваемого адреса. К примеру, если хост — medium.com, то TLD — .com. Корневой DNS-сервер находит адрес .com-домена и возвращает ответ резолверу.
  5. Теперь резолвер выполняет итеративный запрос на TLD-сервер, чтобы получить необходимый IP-адрес. TLD-сервер возвращает адрес авторитативного сервера для запрашиваемого хоста.
  6. Авторитативный сервер хранит фактические записи сопоставления имени хоста с IP-адресом, который возвращается резолверу (тот, в свою очередь, возвращает его пользователю).
  7. Если на авторитативном сервере нужной записи не существует, то возвращается ошибка «DNS_PROBE_FINISHED_NXDOMAIN».
  8. Для всех серверов, через которые проходит запрос, результат кэшируется, и в случае повторного запроса результат уже будет на сервере.
  9. В среднем для DNS-поиска потребуется около 4 запросов, но время этого поиска будет составлять всего несколько миллисекунд.

Что в итоге?

Даже если вы измените запись у регистраторов, внесение изменений на резолверах всего мира займёт какое-то время. Этот процесс может длиться от 24 до 72 часов, но обычно завершается быстрее, т. к. за это время TTL-записи у провайдеров успевает истечь.

Перевод статьи «An introduction to the Domain Name System»

Александр Ланский