DNS (Domain Name System)
Происхождение DNS
Рассмотрим пример мобильного телефона, где каждому пользователю присваивается уникальный номер. Чтобы звонить друзьям, мы можем сначала попытаться запомнить некоторые телефонные номера. Однако, по мере увеличения количества контактов, нам придется использовать телефонную книгу, чтобы отслеживать всех наших знакомых. Таким образом, когда нам нужно будет позвонить, мы будем обращаться к телефонной книге и набирать нужный номер.
Аналогично, компьютеры уникально идентифицируются IP-адресами — например, 104.18.2.119 является IP-адресом. Мы используем IP-адреса для посещения веб-сайта, размещенного на сервере. Поскольку люди не могут легко запоминать IP-адреса для посещения доменных имен (пример доменного имени — educative.io), нам нужна подобная телефонной книге система, которая будет поддерживать все сопоставления доменных имен с IP-адресами. В этой главе мы рассмотрим, как DNS служит "телефонной книгой" Интернета.
Использование Аналогии с Телефонной Книгой для Понимания DNS

Что такое DNS?
Система доменных имен (DNS) — это служба именования в Интернете, которая сопоставляет удобные для человека доменные имена с IP-адресами, читаемыми машинами. Служба DNS прозрачна для пользователей. Когда пользователь вводит доменное имя в браузере, браузер должен преобразовать доменное имя в IP-адрес, обратившись к инфраструктуре DNS. Как только желаемый IP-адрес будет получен, запрос пользователя направляется на целевой веб-сервер.
Общая Схема Работы DNS
- Пользователь запрашивает посещение веб-сайта, вводя его URL в браузере.
- Браузер отправляет запрос в инфраструктуру DNS для разрешения доменного имени в IP-адрес.
- Инфраструктура DNS возвращает соответствующий IP-адрес.
- Браузер перенаправляет запрос на целевой веб-сервер, используя полученный IP-адрес.
- Операция выполняется очень быстро, поэтому пользователь ощущает минимальную задержку.

Важные Подробности
Рассмотрим несколько важных деталей о DNS:
-
Серверы имен (Name servers): Важно понимать, что DNS — это не один сервер. Это полная инфраструктура с множеством серверов. DNS-серверы, которые отвечают на запросы пользователей, называются серверами имен.
-
Записи ресурсов (Resource records): База данных DNS хранит сопоставления доменных имен с IP-адресами в виде записей ресурсов (RR). RR — это наименьшая единица информации, которую пользователи запрашивают с серверов имен. Существуют различные типы RR. В таблице ниже описаны распространенные RR. Важными час тями информации являются тип, имя и значение. Имя и значение меняются в зависимости от типа RR.
Общие Типы Записей Ресурсов
| Тип | Описание | Имя | Значение | Пример (Тип, Имя, Значение) |
|---|---|---|---|---|
| A | Предоставляет сопоставление имени хоста с IP-адресом | Имя хоста | IP-адрес | (A, relay1.main.educative.io,104.18.2.119) |
| NS | Предоставляет имя хоста, который является авторитетным DNS для домена | Доменное имя | Имя хоста | (NS, educative.io, dns.educative.io) |
| CNAME | Предоставляет сопоставление псевдонима с каноническим именем хоста | Имя хоста | Каноническое имя | (CNAME, educative.io, server1.primary.educative.io) |
| MX | Предоставляет сопоставление почтового сервера с каноническим именем хоста | Имя хоста | Каноническое имя | (MX, mail.educative.io, mailserver1.backup.educative.io) |
-
Кэширование (Caching): DNS использует кэширование на разных уровнях для уменьшения задержки запроса для пользователя. Кэширование играет важную роль в снижении нагрузки на инфраструктуру DNS, так как она должна обслуживать запросы всего Интернета.
-
Иерархия (Hierarchy): DNS-серверы имен организованы в иерархическую структуру. Иерархическая структура позволяет DNS быть высоко масштабируемой из-за увеличивающегося размера и нагрузки на запросы.
Иерархия DNS и ее структура
Иерархия DNS
DNS (Domain Name System) — это не единичный сервер, а обширная инфраструктура, состоящая из разных типов серверов, организованных иерархически. Иерархия DNS состоит из четырех основных типов серверов:
-
DNS Resolver:
- Роль: DNS резолверы инициируют процесс запроса и перенаправляют запросы на другие DNS серверы имен. Обычно они находятся в сети пользователя и также известны как локальные или стандартные серверы.
- Функциональность: Резолверы могут также отвечать на запросы пользователей, используя кэшированные данные, что сокращает необходимость запрашивать внешние серверы для часто посещаемых доменов.
-
Root-Level Name Servers (Корневые серверы имен):
- Роль: Это серверы самого высокого уровня в иерархии DNS. Они перенаправляют запросы от локальных серверов на соответствующие серверы доменов верхнего уровня (TLD).
- Функциональность: Например, при запросе домена
educative.io, корневой сервер предоставляет информацию о том, какой TLD сервер (.io в этом случае) может обработать запрос.
-
Top-Level Domain (TLD) Name Servers (Серверы имен доменов верхнего уровня):
- Роль: Эти серверы отвечают за предоставление IP-адресов авторитетных серверов имен, связанных с конкретным доменным расширением (.com, .edu, .io и т.д.).
- Функциональность: После получения запроса они возвращают список авторитетных серверов имен, которые содержат фактический IP-адрес запрашиваемого домена.
-
Authoritative Name Servers (Авторитетные сер веры имен):
- Роль: Это конечные серверы в иерархии, которые предоставляют точный IP-адрес для запрашиваемого домена или поддомена.
- Функциональность: Эти серверы управляются организацией, которая хостит домен, и обеспечивают правильное направление пользователей на соответствующий веб-сервер или сервер приложений.

Вопрос для оценки понимания
How are DNS names processed? For example, will educative.io be processed from left to right or right to left?
Итерированное и рекурсивное разрешение DNS-запросов
Существует два способа выполне ния DNS-запроса:
-
Iterative (Итерированное):
- В этом случае локальный сервер (например, сервер вашего интернет-провайдера) последовательно отправляет запросы корневым серверам DNS, серверам доменов верхнего уровня (TLD), а затем авторитетным серверам, чтобы получить IP-адрес.
-
Recursive (Рекурсивное):
- В рекурсивном запросе конечный пользователь отправляет запрос на локальный сервер. Локальный сервер затем отправляет запросы корневым серверам DNS, которые, в свою очередь, перенаправляют запросы на другие сервера имен до тех пор, пока не будет найден нужный IP-адрес.
На иллюстрации ниже (слева) показано, как разрешение DNS-запросов происходит итеративно с точки зрения локального сервера/сервера интернет-провайдера:

Обычно итеративный запрос предпочтительнее, чтобы уменьшить нагрузку на инфраструктуру DNS.
Третьи стороны, такие как Google, Cloudflare и OpenDNS, предлагают публичные DNS-резолверы, которые могут предоставлять более быстрые ответы по сравнению с локальными DNS-серверами интернет-провайдера (ISP). Причины этого могут быть следующие:
-
Масштаб и инфраструктура: Компании, такие как Google и Cloudflare, обладают обширной и высокоразвитой инфраструктурой, включая глобально распределенные серверы. Эти компании вкладывают значительные ресурсы в оптимизацию своих DNS-резолверов, что позволяет им обрабатывать запросы быстрее и с меньшей задержкой, чем локальные DNS-серверы ISP.
-
Кэширование и оптимизация: Публичные DNS-сервера часто имеют лучшие механизмы кэширования и могут более эффективно обрабатывать повторяющиеся запросы. Это означает, что если кто-то недавно запрашивал тот же самый домен, то его IP-адрес уже закэширован и может быть возвращен мгновенно, без необходимости обращения к корневым и TLD-серверам.
-
Оптимизация маршрутизации: Публичные DNS-сервера могут быть настроены таким образом, чтобы оптимально маршрутизировать запросы через сеть, используя более быстрые и менее загруженные каналы связи.
-
Поддержка новых технологий: Публичные DNS-резолверы часто быстрее адаптируют новые технологии и станд арты, такие как DNS over HTTPS (DoH) или DNS over TLS (DoT), что может улучшить безопасность и производительность.
Таким образом, публичные DNS-резолверы могут предоставлять более быстрый и эффективный сервис, чем локальные DNS-сервера ISP.
Кэширование (Caching)
Кэширование относится к временному хранению часто запрашиваемых ресурсных записей (Resource Records, RR). Запись (record) представляет собой единицу данных в базе данных DNS, которая связывает имя (name) с определенным значением (value). Кэширование сокращает время ответа для пользователя и уменьшает сетевой трафик. Когда мы используем кэширование на разных уровнях иерархии, это может значительно снизить нагрузку на DNS-инфраструктуру, уменьшив количество запросов, отправляемых к серверам.
Кэширование может быть реализовано на различных уровнях:
- Браузер: Кэширует DNS-записи, чтобы ускорить повторные запросы к одним и тем же доменам.
- Операционная система: ОС может сохранять записи, чтобы приложения могли быстрее выполнять DNS-запросы.
- Локальный сервер имен: Внутри пользовательской сети также может быть настроен локальный DNS-сервер, который кэширует ответы на запросы.
- DNS-резолверы ISP: Интернет-провайдеры часто используют DNS-резолверы, которые кэшируют результаты запросов для своих пользователей.
Кэширование на всех этих уровнях помогает значительно снизить количество запросов, отправляемых на более высокие уровни DNS-иерархии, тем самым уменьшая нагрузку на инфраструктуру DNS.

Local DNS resolver обычно расположен на стороне интернет-провайдера (ISP), но также может находиться в сети организации или даже у пользователя дома (например, на домашнем роутере). Его основная роль — это кэширование и разрешение DNS-запросов, что позволяет снизить задержки и нагрузку на DNS-инфраструктуру в целом.
Примечание: Даже если для разрешения запроса пользователя нет доступного кэша и необходимо обратиться к инфраструктуре DNS, кэширование все равно может быть полезным. Локальный сервер или DNS-резолвер ISP могут кэшировать IP-адреса серверов TLD или авторитетных серверов, чтобы избежать запроса к корневому серверу.
DNS как распределенная система
Хотя иерархия DNS облегчает работу распределенного Интернета, который мы знаем сегодня, сама по себе DNS является распределенной системой. Распределенная природа DNS имеет следующие преимущества:
- Избежание единой точки отказа (Single Point of Failure, SPOF): Благодаря распределенности DNS не становится единственной точкой отказа в системе.
- Низкая задержка запросов: Пользователи получают ответы от ближайших серверов, что снижает задержку.
- Гибкость при обслуживании и обновлениях: Например, если один DNS-сервер выходит из строя или перегружен, другой сервер может отвечать на запросы пользователей.
Существует 13 логических корневых серверов имен (обозначенных буквами от A до M) с множеством экземпляров, распределенных по всему миру. Эти серверы управляются 12 различными организациями.
Как DNS является масштабируемой, надежной и согласованной системой
Высокая масштабируемость
Благодаря своей иерархической структуре DNS является высокомасштабируемой системой. Около 1 000 реплицированных экземпляров 13 корневых серверов распределены по всему миру стратегически для обработки пользовательских запросов. Работа по обработке з апросов делится между серверами TLD и корневыми серверами, а затем завершается авторитетными серверами, управляемыми организациями, что обеспечивает работу всей системы. Как показано на дереве иерархии DNS, разные сервисы обрабатывают разные части дерева, что обеспечивает масштабируемость и управляемость системы.
Надежность
Три основные причины делают DNS надежной системой:
- Кэширование: Кэширование осуществляется в браузере, операционной системе, локальном сервере имен, а также в резолверах DNS у интернет-провайдеров, которые также поддерживают богатый кэш часто посещаемых сервисов. Даже если некоторые DNS-серверы временно недоступны, кэшированные записи могут быть использованы, что делает DNS надежной системой.
- Репликация серверов: У DNS есть реплицированные копии каждого логического сервера, распределенные по всему миру, чтобы обрабатывать запросы пользователей с низкой задержкой. Избыточные серверы повышают надежность всей системы.