Skip to main content

DNS (Domain Name System)

Происхождение DNS​

Рассмотрим пример мобильного телефона, где каждому пользователю присваивается уникальный номер. Чтобы звонить друзьям, мы можем сначала попытаться запомнить некоторые телефонные номера. Однако, по мере увеличения количества контактов, нам придется использовать телефонную книгу, чтобы отслеживать всех наших знакомых. Таким образом, когда нам нужно будет позвонить, мы будем обращаться к телефонной книге и набирать нужный номер.

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

Использование Аналогии с Телефонной Книгой для Понимания DNS​

img_68.png

Что такое DNS?​

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

Общая Схема Работы DNS​

  1. Пользователь запрашивает посещение веб-сайта, вводя его URL в браузере.
  2. Браузер отправляет запрос в инфраструктуру DNS для разрешения доменного имени в IP-адрес.
  3. Инфраструктура DNS возвращает соответствующий IP-адрес.
  4. Браузер перенаправляет запрос на целевой веб-сервер, используя полученный IP-адрес.
  5. Операция выполняется очень быстро, поэтому пользователь ощущает минимальную задержку. img_69.png

Важные Подробности​

Рассмотрим несколько важных деталей о 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 состоит из четырех основных типов серверов:

  1. DNS Resolver:

    • Роль: DNS резолверы инициируют процесс запроса и перенаправляют запросы на другие DNS серверы имен. Обычно они находятся в сети пользователя и также известны как локальные или стандартные серверы.
    • Функциональность: Резолверы могут также отвечать на запросы пользователей, используя кэшированные данные, что сокращает необходимость запрашивать внешние серверы для часто посещаемых доменов.
  2. Root-Level Name Servers (Корневые серверы имен):

    • Роль: Это серверы самого высокого уровня в иерархии DNS. Они перенаправляют запросы от локальных серверов на соответствующие серверы доменов верхнего уровня (TLD).
    • Функциональность: Например, при запросе домена educative.io, корневой сервер предоставляет информацию о том, какой TLD сервер (.io в этом случае) может обработать запрос.
  3. Top-Level Domain (TLD) Name Servers (Серверы имен доменов верхнего уровня):

    • Роль: Эти серверы отвечают за предоставление IP-адресов авторитетных серверов имен, связанных с конкретным доменным расширением (.com, .edu, .io и т.д.).
    • Функциональность: После получения запроса они возвращают список авторитетных серверов имен, которые содержат фактический IP-адрес запрашиваемого домена.
  4. Authoritative Name Servers (Авторитетные серверы имен):

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

img_70.png


Вопрос для оценки понимания​

How are DNS names processed? For example, will educative.io be processed from left to right or right to left?


Итерированное и рекурсивное разрешение DNS-запросов​

Существует два способа выполнения DNS-запроса:

  1. Iterative (Итерированное):

    • В этом случае локальный сервер (например, сервер вашего интернет-провайдера) последовательно отправляет запросы корневым серверам DNS, серверам доменов верхнего уровня (TLD), а затем авторитетным серверам, чтобы получить IP-адрес.
  2. Recursive (Рекурсивное):

    • В рекурсивном запросе конечный пользователь отправляет запрос на локальный сервер. Локальный сервер затем отправляет запросы корневым серверам DNS, которые, в свою очередь, перенаправляют запросы на другие сервера имен до тех пор, пока не будет найден нужный IP-адрес.

На иллюстрации ниже (слева) показано, как разрешение DNS-запросов происходит итеративно с точки зрения локального сервера/сервера интернет-провайдера: img_71.png
Обычно итеративный запрос предпочтительнее, чтобы уменьшить нагрузку на инфраструктуру DNS.

Третьи стороны, такие как Google, Cloudflare и OpenDNS, предлагают публичные DNS-резолверы, которые могут предоставлять более быстрые ответы по сравнению с локальными DNS-серверами интернет-провайдера (ISP). Причины этого могут быть следующие:

  1. Масштаб и инфраструктура: Компании, такие как Google и Cloudflare, обладают обширной и высокоразвитой инфраструктурой, включая глобально распределенные серверы. Эти компании вкладывают значительные ресурсы в оптимизацию своих DNS-резолверов, что позволяет им обрабатывать запросы быстрее и с меньшей задержкой, чем локальные DNS-серверы ISP.

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

  3. Оптимизация маршрутизации: Публичные DNS-сервера могут быть настроены таким образом, чтобы оптимально маршрутизировать запросы через сеть, используя более быстрые и менее загруженные каналы связи.

  4. Поддержка новых технологий: Публичные 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. img_72.png img_73.png img_74.png

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 есть реплицированные копии каждого логического сервера, распределенные по всему миру, чтобы обрабатывать запросы пользователей с низкой задержкой. Избыточные серверы повышают надежность всей системы.
  • Протокол: Хотя многие клиенты полагаются на ненадежный User Datagram Protocol (UDP) для запросов и получения ответов DNS, важно отметить, что UDP также имеет свои преимущества. Он намного быстрее, что улучшает производительность DNS. Кроме того, с момента своего появления надежность интернет-сервисов улучшилась, поэтому UDP обычно предпочитают TCP. DNS-запросы обычно повторно отправляются на транспортном уровне, если на предыдущий запрос не было получено ответа. Таким образом, для запроса-ответа может потребоваться несколько дополнительных пересылок, что обеспечивает более короткую задержку по сравнению с TCP, который требует трехстороннего рукопожатия каждый раз перед обменом данными.

Вопрос для оценки понимания​

What happens if a network is congested? Should DNS continue using UDP?

Typically, DNS uses UDP. However, DNS can use TCP when its message size exceeds the original packet size of 512 Bytes. This is because large-size packets are more prone to be damaged in congested networks. DNS always uses TCP for zone transfers.

Some clients prefer UDP over TCP to employ transport layer security for privacy reasons.


Согласованность (Consistency)​

DNS использует различные протоколы для обновления и передачи информации между реплицированными серверами в иерархии. Чтобы достичь высокой производительности, DNS идет на компромисс в вопросе строгой согласованности (strong consistency), так как данные из баз данных DNS читаются намного чаще, чем записываются. Однако DNS обеспечивает eventual consistency (конечную согласованность) и обновляет записи на реплицированных серверах с задержкой. Обычно обновление записей на серверах DNS по всему Интернету может занять от нескольких секунд до трех дней. Время, необходимое для распространения информации между различными кластерами DNS, зависит от инфраструктуры DNS, размера обновления и того, какая часть дерева DNS обновляется.

Кэширование также может негативно сказаться на согласованности. Поскольку авторитетные серверы расположены внутри организации, возможно, что определенные ресурсные записи обновляются на авторитетных серверах в случае отказа серверов в организации. Следовательно, кэшированные записи на локальных серверах и серверах ISP могут быть устаревшими. Чтобы смягчить эту проблему, каждая кэшированная запись имеет время жизни (time-to-live, TTL), по истечении которого она считается недействительной и должна быть обновлена.


Вопрос для оценки понимания​

To maintain high availability, should the TTL value be large or small?


Пояснение вывода - nslookup www.google.com​

img_77.png

Вывод команды nslookup​

Non-authoritative answer (Неавторитетный ответ), как следует из названия, это ответ, предоставленный сервером, который не является авторитетным сервером Google. Он не входит в список авторитетных серверов имен, которыми управляет Google. Откуда же тогда приходит этот ответ? Ответ предоставляется вторичными, третичными и четвертичными серверами имен, которые настроены для ответа на наш DNS-запрос, например, DNS-резолвером нашего университета или офиса, DNS-сервером нашего интернет-провайдера, сервером имен интернет-провайдера нашего интернет-провайдера и так далее. Короче говоря, это можно считать кэшированной версией ответа авторитетных серверов имен Google. Если мы попробуем использовать несколько разных доменных имен, мы заметим, что чаще всего получаем кэшированный ответ.

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

img_76.png

Вывод команды dig - dig www.google.com​

Query time: 4 msec (Время запроса: 4 мс) представляет время, за которое был получен ответ от DNS-сервера. По разным причинам эти цифры могут варьироваться в зависимости от нашей ситуации.

Значение 300 в секции ANSWER SECTION указывает количество секунд, в течение которых кэш хранится в DNS-резолвере. Это означает, что ADNS Google устанавливает значение TTL в пять минут (300 секунд).


Вопрос для оценки понимания​

If we need DNS to tell us which IP to reach a website or service, how will we know the DNS resolver’s IP address? (It seems like a chicken-and-egg problem!)

Операционные системы конечных пользователей имеют файлы конфигурации (/etc/resolv.conf в Linux) с IP-адресами DNS-резолверов, которые, в свою очередь, получают всю информацию для них. (Часто DHCP предоставляет IP-адрес DNS-резолвера по умолчанию вместе с другими конфигурациями.) Конечные системы запрашивают DNS-резолверы для любых DNS-запросов. DNS-резолверы имеют специальное программное обеспечение, установленное для разрешения запросов через инфраструктуру DNS. IP-адреса корневого сервера находятся в специальном программном обеспечении. Обычно на DNS-резолверах используется программное обеспечение Berkeley Internet Name Domain (BIND). InterNIC поддерживает обновленный список из 13 корневых серверов.

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


Основные причины использовать DNS-сервисы от Amazon, Google и Microsoft:​

  1. Глобальное покрытие и скорость:

    • DNS-сервисы от Amazon, Google и Microsoft имеют глобальную инфраструктуру с серверами, расположенными по всему миру. Это позволяет быстро обрабатывать запросы пользователей, независимо от их местоположения. Если локальный DNS-резолвер вашего провайдера не имеет записи в кэше, он может быстро получить ответ от глобального DNS-сервиса.
  2. Надежность и отказоустойчивость:

    • Эти крупные компании инвестируют огромные средства в отказоустойчивую инфраструктуру, что делает их DNS-сервисы крайне надежными. Даже если серверы в одном регионе выйдут из строя, запросы будут обработаны другими серверами в других регионах.
  3. Дополнительные функции:

    • DNS-сервисы от Amazon, Google и Microsoft предлагают дополнительные функции, такие как защита от DDoS-атак, фильтрация контента, географическое распределение трафика (GSLB) и улучшенные инструменты мониторинга и управления DNS-записями.
  4. Глобальная балансировка нагрузки (GSLB):

    • Эти сервисы могут направлять запросы пользователей в разные дата-центры, расположенные по всему миру, на основе географического положения пользователя или нагрузки на серверы. Это помогает оптимизировать производительность и распределять нагрузку равномерно по всему миру.
  5. Безопасность:

    • DNS-сервисы от крупных компаний часто предлагают улучшенные меры безопасности, такие как DNSSEC (DNS Security Extensions) для защиты от атак на DNS и обеспечение целостности данных.
  6. Пользовательский контроль и настройки:

    • Владелец домена имеет полный контроль над тем, как управляются его DNS-записи, и может настраивать правила для обработки запросов в зависимости от различных условий, что невозможно сделать с помощью локального DNS-резолвера провайдера.
  7. Обход ограничений и цензура:

    • В некоторых странах или сетях может применяться цензура или ограничения на доступ к определенным веб-сайтам. Использование DNS-сервисов от Amazon, Google или Microsoft может помочь пользователям обойти эти ограничения.

Как это работает на практике:​

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

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