System Design: От Идеи к Реальной Системе
Domain Name System
Артемий Мазаев
19 дек. 2023 г.

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

Это приводит нас к Системе Доменных Имен (DNS), которая является иерархической и децентрализованной системой наименования, используемой для перевода человекочитаемых доменных имен в IP-адреса.

Как работает DNS

Поиск DNS включает следующие восемь шагов:

  1. Клиент вводит example.com в веб-браузер, запрос отправляется в Интернет и принимается DNS-резолвером.
  2. Резолвер затем рекурсивно запрашивает корневой сервер DNS.
  3. Корневой сервер отвечает резолверу адресом сервера доменов верхнего уровня (TLD).
  4. Резолвер делает запрос к серверу домена .com.
  5. Сервер TLD затем отвечает IP-адресом сервера имен домена example.com.
  6. Наконец, рекурсивный резолвер отправляет запрос серверу имен домена.
  7. Сервер имен возвращает IP-адрес example.com резолверу.
  8. DNS-резолвер затем отвечает веб-браузеру IP-адресом запрошенного домена.

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

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

Теперь рассмотрим четыре основные группы серверов, составляющих инфраструктуру DNS.

DNS-резолвер

DNS-резолвер (также известный как рекурсивный DNS-резолвер) - это первый этап в DNS-запросе. Рекурсивный резолвер выступает в роли посредника между клиентом и сервером имен DNS. После получения DNS-запроса от веб-клиента, рекурсивный резолвер либо отвечает данными из кэша, либо отправляет запрос корневому серверу имен DNS, за которым следует еще один запрос к серверу имен TLD, а затем последний запрос к авторитетному серверу имен. После получения ответа от авторитетного сервера имен, содержащего запрашиваемый IP-адрес, рекурсивный резолвер затем отправляет ответ клиенту.

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

Корневой сервер принимает запрос рекурсивного резолвера, который включает доменное имя, и корневой сервер имен отвечает, направляя рекурсивный резолвер к серверу имен TLD, на основе расширения этого домена (.com, .net, .org и т.д.). Корневые серверы имен контролируются некоммерческой организацией Internet Corporation for Assigned Names and Numbers (ICANN).

Существует 13 корневых серверов имен DNS, известных каждому рекурсивному резолверу. Следует отметить, что, хотя корневых серверов всего 13, это не означает, что в системе корневых серверов всего 13 машин. Существует 13 типов корневых серверов, но каждый из них имеет множество копий по всему миру, которые используют маршрутизацию Anycast для обеспечения быстрых ответов.

Сервер имен TLD

Сервер имен TLD содержит информацию обо всех доменных именах, имеющих общее доменное расширение, такое как .com, .net или что угодно после последней точки в URL.

Управление серверами имен TLD осуществляется Internet Assigned Numbers Authority (IANA), которая является подразделением ICANN. IANA делит серверы TLD на две основные группы:

  • Общие домены верхнего уровня: Это домены, такие как .com, .org, .net, .edu, .gov.
  • Домены верхнего уровня стран: Включают домены, специфичные для страны или штата. Примеры включают .uk, .us, .ru, .jp.

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

Авторитетный сервер имен обычно является последним этапом резолвера в поиске IP-адреса. Авторитетный сервер имен содержит информацию, специфичную для доменного имени, которое он обслуживает (например, google.com), и может предоставить рекурсивному резолверу IP-адрес этого сервера, найденный в записи DNS A, или если у домена есть запись CNAME (алиас), он предоставит рекурсивному резолверу домен-алиас, после чего рекурсивному резолверу придется выполнить новый DNS-запрос для получения записи от авторитетного сервера имен (часто записи A, содержащей IP-адрес). Если он не может найти домен, возвращает сообщение NXDOMAIN.

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

В системе DNS существует три типа запросов:

Рекурсивный

В рекурсивном запросе клиент DNS требует, чтобы DNS-сервер (обычно рекурсивный DNS-резолвер) ответил клиенту либо запрашиваемой записью ресурса, либо сообщением об ошибке, если резолвер не может найти запись.

Итеративный

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

Нерекурсивный

Нерекурсивный запрос - это запрос, в котором DNS-резолвер уже знает ответ. Он либо сразу возвращает запись DNS, потому что уже хранит её в локальном кэше, либо запрашивает сервер имен DNS, который является авторитетным для этой записи, что означает, что он определенно содержит правильный IP для этого хоста. В обоих случаях нет необходимости в дополнительных раундах запросов (как в рекурсивных или итеративных запросах). Скорее, ответ немедленно возвращается клиенту.

Типы записей

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

Эти записи состоят из серии текстовых файлов, написанных на том, что известно как синтаксис DNS. Синтаксис DNS - это просто строка символов, используемая в качестве команд, которые говорят DNS-серверу, что делать. Все записи DNS также имеют 'TTL', что означает время жизни, и указывает, как часто DNS-сервер будет обновлять эту запись.

Существует больше типов записей, но давайте посмотрим на некоторые из наиболее часто используемых:

  • A (запись адреса): Это запись, которая содержит IP-адрес домена.
  • AAAA (запись адреса IP версии 6): Запись, которая содержит IPv6-адрес для домена (в отличие от записей A, которые хранят IPv4-адрес).
  • CNAME (запись канонического имени): Перенаправляет один домен или поддомен на другой домен, НЕ предоставляет IP-адрес.
  • MX (запись почтового обменника): Направляет почту на почтовый сервер.
  • TXT (текстовая запись): Эта запись позволяет администратору хранить текстовые заметки в записи. Эти записи часто используются для безопасности электронной почты.
  • NS (записи сервера имен): Хранит сервер имен для записи DNS.
  • SOA (начало зоны ответственности): Хранит административную информацию о домене.
  • SRV (запись местоположения службы): Указывает порт для конкретных служб.
  • PTR (запись обратного поиска): Предоставляет доменное имя при обратном поиске.
  • CERT (запись сертификата): Хранит общедоступные сертификаты ключей.

Поддомены

Поддомен - это дополнительная часть нашего основного доменного имени. Обычно он используется для логического разделения сайта на разделы. Мы можем создать несколько поддоменов или дочерних доменов на основном домене.

Например, blog.example.com, где blog - это поддомен, example - основной домен, а .com - домен верхнего уровня (TLD). Похожие примеры могут быть support.example.com или careers.example.com.

DNS-зоны

DNS-зона - это отдельная часть пространства доменных имен, которая делегируется юридическому лицу, такому как человек, организация или компания, которая отвечает за поддержку DNS-зоны. DNS-зона также является административной функцией, позволяющей гранулярно управлять компонентами DNS, такими как авторитетные серверы имен.

Кэширование DNS

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

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

Обратный DNS

Обратный поиск DNS — это DNS-запрос на имя домена, ассоциированное с данным IP-адресом. Это действие противоположно более обычному прямому поиску DNS, при котором DNS-система запрашивается для возврата IP-адреса. Процесс обратного разрешения IP-адреса использует PTR-записи. Если сервер не имеет PTR-записи, он не может выполнить обратный поиск.

Обратные поиски часто используются почтовыми серверами. Почтовые серверы проверяют, пришло ли электронное сообщение с действительного сервера, прежде чем принять его в свою сеть. Многие почтовые серверы отклоняют сообщения с любого сервера, который не поддерживает обратные поиски, или с сервера, который вряд ли является законным.

Примечание: Обратные поиски DNS не получили всемирного распространения, поскольку они не критичны для нормальной работы интернета.

Примеры

Вот некоторые широко используемые управляемые решения DNS:

Have a doubt?
Post it here, our mentors will help you out.