DNS
, или Domain Name System
— система доменных имён. Она играет огромную роль в работе современного интернета. Смотрите ли вы новости на любимом сайте, слушаете музыку онлайн, листаете соцсети — незримо она присутствует повсюду.
Что такое DNS?
Система доменных имён появилась на заре становления интернета. Тогда для сопоставления IP-адреса и связанного с ним имени использовался простой текстовый файл — HOSTS.TXT
. Чтобы с его помощью узнать имя хоста и его адрес для подключения либо занести свои данные, нужно было позвонить в сетевой информационный центр. Когда стало понятно, что это слегка неудобно, появились первые DNS-серверы.
Чтобы понять, зачем нужна система доменных имён, вспомним, что такое Интернет. Формально это просто бесчисленное количество устройств (девайсов, компьютеров, серверов — или, одним словом, хостов), объединённых между собой общим каналом связи — под землёй, под водой, по воздуху. И чтобы эти устройства могли взаимодействовать друг с другом, каждому нужен какой-то уникальный опознавательный знак. Для этого используется Internet Protocol
, или, как мы привыкли его называть, IP-адрес
.
IPv4: 82.202.175.68
IPv6: 2a00:1450:4010:c08::66
Каждый компьютер или сервер, доступный из Интернета, имеет свой IP. Чтобы подключиться к устройству в сети, вы должны знать его точный адрес.
Дальше — лучше. Перечислите сайты, которые посещаете ежедневно. В каком формате вы помните их? Наверняка это буквенные названия — доменные имена, а не IP-адреса:
yandex.ru
vk.com
habr.com
...
Если для подключения к устройству в сети нужен его IP, почему домены тоже работают? Тут как раз вступает в работу Domain Name System
, главная задача которой (со стороны обычного пользователя интернета) — разрешение символьных доменных имён в цифровые IP-адреса. И иногда наоборот, в зависимости от типа DNS-запроса. DNS можно назвать телефонным справочником Интернета — эта система помогает по имени домена узнать точный адрес сервера, где он размещён.
Современная структура DNS похожа на дерево:
- У неё есть корень (root DNS-сервер), где хранится информация о всех серверах следующего уровня. Корень, на самом деле, состоит из нескольких серверов. Корневым сервером DNS заведует IANA — объединение, отвечающее за организацию работы Интернета. При этом отдельные root-серверы могут администрироваться разными компаниями (например, один такой обслуживается Cloudflare).
- Есть ответвления — тот самый следующий уровень, TLD DNS-серверы (top level domain). Они также отвечают за хранение информации о серверах следующего уровня, но уже для отдельных доменных зон:
.RU
,.РФ
,.SU
,.COM
,.NET
и так далее.
Такие серверы могут обслуживаться разными организациями. Например, за обслуживание DNS-серверов зоны.SU
отвечаетRIPN
— Российский НИИ развития общественных сетей, а за обслуживание серверов зон.RU
и.РФ
— Координационный центр национального домена сети Интернет. Все такие организации регистрируются в IANA, и увидеть их можно тут. - Далее идут так называемые авторитативные DNS-серверы. И они уже хранят непосредственно информацию о том, какой адрес какому доменному имени соответствует, а также их DNS-записи (ресурсные записи:
A
,AAAA
,CNAME
,TXT
,MX
и пр.). И такой может развернуть кто угодно — регистратор доменных имён, хостинг-провайдер, даже вы — например, с помощью ISPmanager.
Отдельно можно выделить кэширующие DNS-серверы, или DNS-резолверы. Они выполняют две основных функции:
- выполняют запросы к вышестоящим DNS-серверам;
- сохраняют в своей памяти (кэше) результаты таких запросов.
Это позволяет им играть роль посредника между вами и основными элементами Domain Name System
. Благодаря DNS-резолверам сокращается время, за которое выполняется разрешение имени: вместо того, чтобы каждый раз ждать ответа с другого конца света, DNS-резолвер запрашивает информацию один раз и сохраняет её в своей памяти. При повторных запросах он не выполняет новый полный DNS-запрос, а смотрит в кэш и выдаёт адрес запрошенного домена оттуда.
Как работает DNS?
Вся магия начинается, когда вы набираете адрес сайта в адресной строке браузера и нажимаете Enter. Например, введём адрес firstvds.ru
- Первым делом браузер проверяет свой кэш — не сохранился ли IP-адрес запрашиваемого ресурса с прошлого подключения. Если адрес найден, браузер выполняет прямой запрос по нему.
- Если адрес не найден, браузер отправляет запрос к встроенному в операционную систему DNS-резолверу. Тот также проверяет свой кэш и кэш ОС. Если адрес найден, он возвращается браузеру.
- Когда адрес в памяти отсутствует, ваш DNS-резолвер отправляет запрос DNS-резолверу интернет-провайдера. Его адрес автоматически прописывается в вашей системе. Также широко распространены резолверы Google — 8.8.8.8 и 4.4.4.4. Резолвер провайдера тоже проверяет свой кэш — не записан ли там адрес запрашиваемого ресурса. Если адрес найден, он возвращается нашему резолверу.
- В ином случае DNS-резолвер провайдера зрит в корень — опрашивает корневые DNS-серверы. Они неявно указаны в любом домене — в виде точки в конце имени, которую мы для упрощения запоминания и работы обычно опускаем:
firstvds.ru[.]
Корневые серверы проверяют у себя наличие информации о введёном имени — точнее, о домене верхнего уровня.RU
. Если информация найдена, корневой сервер возвращает адрес DNS-сервера доменной зоны (TLD DNS-сервера). Если нет — возвращает ошибку: значит, запрошенной зоны не существует. - Получив адрес сервера зоны, резолвер отправляет запрос к нему. Сервер зоны проверяет у себя наличие информации о домене второго уровня —
FIRSTVDS.RU
. Если такой домен существует, TLD-сервер вернёт адрес авторитативного сервера, где хранится информация об этом домене — его ресурсные записи. Если домен не существует — сервер вернёт ошибку: значит, домен не зарегистрирован, ещё не внесён регистратором в реестр либо не делегирован на серверы имён. - Определив адрес авторитативного сервера, резолвер опрашивает его — всё о том же домене второго уровня. Авторитативный сервер проверяет свою базу данных, и, если домен там присутствует, возвращает его IP-адрес — он записан в ресурсной
А
-записи домена (илиAAAA
для IPv6). В некоторых случаях она может отсутствовать — например, удалена вручную по каким-то причинам. Тогда, как и при отсутствии домена в базе, будет возвращена ошибка — резолвер вернётся ни с чем. - Когда адрес нашего домена наконец найден, резолвер провайдера записывает его в свой кэш и передаёт нашему встроенному резолверу. Тот записывает его в свою внутреннюю память и возвращает адрес браузеру. Браузер выполняет прямой запрос к полученному IP-адресу, и начинается загрузка данных сайта — открывается запрошенная страница.
Все эти чудеса занимают несколько мгновений.
На Linux и MacOS путь DNS-запроса до нужного домена можно посмотреть с помощью следующей команды:
dig +trace firstvds.ru
На Linux для работы с dig
в некоторых случаях нужно выполнить установку соответствующего пакета:
-
Ubuntu и Debian:
apt -y install dnsutils
-
CentOS:
yum -y install bind-utils
На Windows можно скачать и установить Bind (Tools Only) или воспользоваться онлайн-инструментом, что проще:

Вы увидите весь пройденный запросом путь, начиная с корневых DNS-серверов и заканчивая серверами имён искомого домена:

Кстати, время, которое занимает DNS-запрос, можно измерить. Например, с помощью онлайн-тестов:
-
tools.pingdom.com — тестирует все показатели скорости сайта, включая и время ответа DNS:
-
dnsperf.com — очень наглядно отображает время ответа DNS на карте:
Или, если у вас под рукой есть Linux-терминал, с помощью следующей команды:
dig firstvds.ru | grep time
Она покажет время, за которое был выполнен DNS-запрос. Однако нужно помнить, что после первого же запроса полученная информация будет сохранена в кэш. Повторные запросы будут получать информацию оттуда, то есть — гораздо быстрее, чем в первый раз.

Что влияет на время обновления кэша DNS?
Когда вы обновляете ресурсные записи домена — меняете A
-запись (IP-адрес домена), NS
(серверы имён домена), MX
(почтовый сервер домена) и пр., они начинают отображаться не сразу — обновление занимает от 2 до 72 часов.
Этот срок складывается сразу из нескольких параметров:
- настройки времени кэширования записей (
TTL
, time-to-live). Этот параметр указывается для каждой записи и задаёт, сколько времени запись может храниться в кэше резолвера. Например, при изменении А-записи сTTL 21600
пользователь, который минуту назад был на сайте, будет видеть сайт со старого адреса (или ошибку, если тот не доступен) — так как вместо отправки нового DNS-запроса его резолвер в течение 6 часов будет выдавать значение, сохранённое в кэше. - настройки кэширования интернет-провайдеров. Интернет-провайдеры могут иметь собственные настройки кэширования — соответственно, резолвер провайдера будет выдавать пользователям значение из кэша, пока не будет исчерпан срок жизни записи, заданный провайдером. Тогда при следующем запросе к сайту резолвер провайдера выполнит полный DNS-запрос, тем самым актуализировав информацию в своём кэше.
-
настройки кэширования регистратора домена. Это в основном относится к NS-записям и смене серверов имён. NS-записи, которые содержат серверы имён, хранятся на DNS-серверах доменной зоны, и их
TTL
определяется там. Разные регистраторы имеют разные настройки, но обычно срок жизни таких записей составляет несколько часов.Вот пример для регистратора Webnames: TTL серверов имён составляет
75598 секунд
или~21 час
.То есть, если мы изменим их, у большинства провайдеров, где имеется закэшированная информация о нашем домене, они обновятся не раньше чем через 21 час.