Содержание статьи

DNS-запрос – это последовательность операций, преобразующих доменное имя в IP-адрес за миллисекунды. Каждый запрос проходит через цепочку серверов: резолвер, корневые DNS-серверы, серверы TLD и авторитетные серверы. В среднем на выполнение уходит 50–200 мс, но задержки могут достигать 500 мс и более при неоптимизированной инфраструктуре. Ключевые факторы, влияющие на скорость: кеширование, географическое расположение резолверов и протокол передачи (UDP или TCP).
Первым шагом резолвер проверяет локальный кеш. Если данные отсутствуют, он обращается к корневым серверам, которых насчитывается 13 кластеров по всему миру. Они не хранят IP-адреса доменов, а лишь указывают на серверы TLD (например, .com, .ru). Далее запрос перенаправляется на авторитетные серверы, где хранится конечная запись. Для ускорения процесса используются DNS-кеши провайдеров и CDN, такие как Cloudflare или Google Public DNS, которые обрабатывают до 100 миллионов запросов в секунду.
Оптимизация DNS-запросов критична для производительности веб-приложений. Рекомендации: использовать DNSSEC для защиты от подмены ответов, настраивать TTL записей в диапазоне 300–3600 секунд для баланса между актуальностью и нагрузкой, а также применять Anycast-маршрутизацию для снижения latency. При работе с высоконагруженными системами стоит рассмотреть DNS-префетчинг и HTTP/3 с поддержкой QUIC, который минимизирует задержки при повторных запросах.
Как браузер инициирует DNS-запрос при вводе доменного имени
Когда пользователь вводит доменное имя (например, example.com) в адресную строку браузера, первым делом проверяется локальный кэш. Браузер последовательно обращается к четырём уровням кэша:
- Кэш браузера – хранит записи о ранее посещённых доменах (время жизни определяется TTL из DNS-ответа).
- Кэш ОС – Windows использует
DnsCache, Linux –nscdилиsystemd-resolved. - Кэш роутера – если устройство подключено к локальной сети, роутер может перехватывать запросы.
- Кэш провайдера – ISP часто кэширует популярные домены для снижения нагрузки на DNS-серверы.
Если запись не найдена ни в одном из кэшей, браузер переходит к следующему этапу – отправке запроса к резолверу. Для этого используется системный вызов getaddrinfo() (POSIX) или DnsQuery() (Windows), который обращается к настроенному DNS-серверу (обычно указанному в параметрах сети или полученному по DHCP).
Браузер формирует DNS-запрос в бинарном формате согласно RFC 1035. Структура пакета включает:
- Header (12 байт) – содержит идентификатор запроса, флаги (например,
RD– recursion desired) и количество записей. - Question – доменное имя в формате меток (например,
7example3com0) и тип запроса (A,AAAA,MX). - Additional (опционально) – EDNS-расширения для поддержки больших пакетов (>512 байт) или DNSSEC.
Запрос отправляется по протоколу UDP на порт 53, но если ответ превышает 512 байт, резолвер переключается на TCP. Браузеры Chrome и Firefox используют оптимизацию: параллельно отправляют запросы на несколько DNS-серверов (если они указаны в настройках) и принимают первый корректный ответ.
Если резолвер не имеет кэшированной записи, он начинает рекурсивный поиск, последовательно обращаясь к корневым серверам (a.root-servers.net и др.), затем к TLD-серверам (.com, .net) и наконец к авторитативным серверам домена. Для ускорения процесса резолверы используют:
- DNS Prefetching – браузер заранее запрашивает DNS-записи для ссылок на странице (активируется атрибутом
<link rel="dns-prefetch" href="//example.com">). - HTTP/3 и QUIC – протоколы, минимизирующие задержки при повторных запросах за счёт мультиплексирования.
- DNS-over-HTTPS (DoH) – шифрует запросы, отправляя их на серверы типа
1.1.1.1или8.8.8.8по HTTPS (порт 443).
Браузеры также применяют эвристики для снижения нагрузки: Chrome игнорирует запросы к несуществующим доменам с часто встречающимися опечатками (например, gogle.com), а Firefox использует Trusted Recursive Resolver для защиты от спуфинга.
После получения IP-адреса браузер инициирует TCP-соединение (или QUIC для HTTP/3) и отправляет HTTP-запрос. Однако DNS-запрос может завершиться неудачно по нескольким причинам:
- NXDOMAIN – домен не существует (код ответа 3).
- SERVFAIL – ошибка на стороне резолвера или авторитативного сервера (код 2).
- Timeout – отсутствие ответа в течение 5 секунд (настраивается параметром
network.dns.disablePrefetchFromHTTPSв Firefox).
dig example.com +trace– отслеживает полный путь резолвинга.nslookup -debug example.com– показывает детали запроса и ответа.- Расширения браузера: DNS Checker или DNS Benchmark.
Роль локального кэша и файла hosts в разрешении доменных имён

Файл hosts – статический текстовый файл, приоритетный перед DNS-запросами. Его структура проста: IP-адрес и соответствующее доменное имя, разделённые пробелами или табуляцией. Пример:
127.0.0.1 localhost192.168.1.10 intranet.example.com
Файл обрабатывается до обращения к кэшу или DNS-серверам, что делает его эффективным инструментом для тестирования, блокировки ресурсов или перенаправления трафика без изменения DNS-записей. В Windows он расположен по пути %SystemRoot%\System32\drivers\etc\hosts, в Unix-подобных системах – /etc/hosts.
Конфликты между hosts и кэшем возникают при изменении записей. Если в hosts прописан IP для домена, а в кэше хранится устаревшая запись, система сначала проверит hosts, игнорируя кэш. Однако после очистки кэша (ipconfig /flushdns в Windows, sudo systemd-resolve --flush-caches в Linux) приоритет снова отдаётся DNS. Для принудительного обновления кэша без перезагрузки используйте:
- Windows:
net stop dnscache && net start dnscache - Linux (systemd):
sudo systemctl restart systemd-resolved - Используйте DNSSEC для проверки подлинности ответов.
- Ограничьте TTL записей в кэше до минимально необходимого (например, 60 секунд для часто меняющихся ресурсов).
- Отключите кэширование на уровне браузера (
network.dnsCacheExpirationв Firefox,chrome://flags/#enable-dns-over-httpsв Chrome). - Не блокирует HTTPS-трафик, если сертификат не подменён.
- Требует ручного обновления списков.
- Может нарушать работу легитимных сервисов (например, CDN).
- Linux:
sudo systemd-resolve --statistics(статистика кэша),cat /etc/hosts. - macOS:
sudo dscacheutil -cachedump -entries Host(кэш),cat /private/etc/hosts. - Перенаправлять внутренние домены на локальные серверы без изменения DNS-зон.
- Блокировать доступ к нежелательным ресурсам на уровне ОС.
- Тестировать миграцию сервисов, временно подменяя IP-адреса.
Локальный кэш уязвим к атакам типа «DNS cache poisoning». Злоумышленники могут внедрить поддельные записи, перенаправив пользователя на фишинговые сайты. Для защиты:
Файл hosts часто применяется для блокировки рекламы и трекеров. Проекты вроде StevenBlack/hosts предоставляют готовые списки доменов, которые можно добавить в файл. Однако такой подход имеет ограничения:
Альтернатива – использование локального DNS-сервера (Pi-hole, AdGuard Home) с динамическими списками блокировки.
Для диагностики проблем с разрешением имён проверьте содержимое кэша и hosts следующими командами:
Если домен разрешается некорректно, сравните результаты ping, nslookup и dig. Расхождения указывают на приоритет hosts или кэша над DNS.
В корпоративных сетях файл hosts централизованно управляется через групповые политики (GPO) или системы конфигурации (Ansible, Puppet). Это позволяет:
Однако злоупотребление hosts усложняет поддержку: при изменении инфраструктуры требуется обновлять файл на всех устройствах. Рекомендуется использовать его только для временных решений или критически важных перенаправлений.
Последовательность обращений к DNS-серверам: от рекурсивного резолвера до авторитетных

Процесс разрешения доменного имени начинается с обращения клиента к рекурсивному резолверу – обычно это DNS-сервер провайдера или публичный резолвер (например, 8.8.8.8 от Google или 1.1.1.1 от Cloudflare). Резолвер проверяет локальный кэш: если запись найдена и её TTL (время жизни) не истекло, ответ возвращается немедленно. В противном случае резолвер инициирует цепочку запросов, начиная с корневых серверов DNS. Корневые серверы (их 13 кластеров, обозначенных буквами A–M) не хранят информацию о доменах, но направляют резолвер к авторитетным серверам для соответствующего домена верхнего уровня (TLD), например, .com или .ru.
Следующий шаг – обращение к TLD-серверам, которые содержат данные о делегировании доменов второго уровня. TLD-серверы возвращают список авторитетных DNS-серверов для запрашиваемого домена (например, ns1.example.com). Эти серверы хранят актуальные записи ресурсов (A, AAAA, MX, CNAME и др.) и отвечают за конечное разрешение имени. Важно: если резолвер не поддерживает EDNS Client Subnet (ECS), ответы могут быть неоптимальными из-за географического несоответствия – например, пользователь из Москвы получит IP-адрес сервера в США вместо ближайшего кэша CDN.
Авторитетные серверы делятся на первичные (master) и вторичные (slave). Первичные серверы содержат оригинальные зоны, редактируемые администратором, а вторичные синхронизируются с ними по протоколу AXFR или IXFR. Для повышения отказоустойчивости рекомендуется размещать авторитетные серверы в разных географических зонах и автономных системах (AS). Например, Cloudflare использует Anycast-маршрутизацию, направляя запросы к ближайшему узлу, что снижает задержку до 30–50 мс. При настройке зоны следует избегать единой точки отказа: минимум два авторитетных сервера, расположенных в разных дата-центрах.
Оптимизация последовательности запросов критична для производительности. Рекурсивные резолверы могут использовать предварительное разрешение (DNS prefetching) для часто запрашиваемых доменов, а авторитетные серверы – сжатие ответов (DNS message compression) для уменьшения размера пакетов. Для доменов с высокой нагрузкой эффективен механизм DNSSEC, но его внедрение требует проверки цепочки доверия на каждом этапе, что увеличивает время ответа на 10–20%. При диагностике задержек используйте инструменты dig +trace или dnstrace, чтобы выявить узкие места в цепочке: например, медленный ответ TLD-сервера или отсутствие кэширования на уровне резолвера.
Механизмы кэширования DNS-записей на разных уровнях сети

Кэширование DNS-записей начинается на уровне операционной системы клиента. В Windows кэш хранится в памяти и управляется службой DNS Client (dnscache), срок жизни записей определяется параметром TTL (Time to Live) из ответа DNS-сервера. В Linux и macOS аналогичную функцию выполняет демон systemd-resolved или nscd, где записи также кэшируются с учетом TTL. Для принудительной очистки кэша в Windows используется команда ipconfig /flushdns, в Linux – systemd-resolve --flush-caches или перезапуск nscd. Рекомендуется мониторить кэш через ipconfig /displaydns или resolvectl statistics, чтобы выявлять устаревшие или конфликтующие записи.
Браузеры реализуют собственный кэш DNS, независимый от ОС. Chrome, Firefox и Edge хранят записи в памяти с TTL по умолчанию 60 секунд, но могут переопределять его значениями из DNS-ответа. В Chrome кэш доступен через chrome://net-internals/#dns, где можно просмотреть активные записи и очистить их. Firefox использует about:networking#dns для аналогичных целей. Браузерный кэш критичен для производительности, так как снижает задержки при повторных запросах к одним и тем же доменам, но может приводить к проблемам при изменении IP-адресов серверов.
Локальные DNS-резолверы, такие как dnsmasq или unbound, кэшируют записи на уровне домашней сети или корпоративной инфраструктуры. Dnsmasq по умолчанию хранит до 150 записей, но это значение можно увеличить параметром cache-size в конфигурационном файле. Unbound использует более сложную систему кэширования с поддержкой prefetching – предварительной загрузки записей до истечения TTL. Для оптимизации рекомендуется устанавливать prefetch: yes и cache-min-ttl: 300, чтобы сократить количество запросов к вышестоящим серверам при высокой нагрузке.
Провайдеры интернет-услуг (ISP) применяют кэширующие DNS-серверы для снижения нагрузки на свои сети. Такие серверы, как правило, игнорируют TTL ниже 30 секунд, заменяя его минимальным значением в 300 секунд. Это может приводить к задержкам в обновлении записей, особенно при миграции серверов. Для обхода кэша ISP рекомендуется использовать публичные резолверы (Cloudflare, Google DNS) или настраивать клиентские устройства на прямые запросы к авторитетным серверам через DoH (DNS over HTTPS) или DoT (DNS over TLS).
Авторитетные DNS-серверы (например, BIND, PowerDNS) также кэшируют ответы, но только для зон, которые они обслуживают. В BIND параметр max-cache-ttl ограничивает максимальное время хранения записей в кэше, по умолчанию – 7 дней. Для динамических зон с частыми изменениями (например, CDN) рекомендуется снижать max-cache-ttl до 300 секунд. PowerDNS использует аналогичный механизм с параметром cache-ttl, но дополнительно поддерживает негативное кэширование – хранение информации об отсутствии записей (NXDOMAIN) для сокращения времени ответа на повторные запросы.
CDN-провайдеры (Cloudflare, Akamai) активно используют кэширование DNS для распределения нагрузки. Cloudflare применяет Anycast-сеть, где один и тот же IP-адрес обслуживается несколькими серверами по всему миру, а кэш DNS синхронизируется между ними. TTL для записей CDN обычно устанавливается в диапазоне 60–300 секунд, чтобы быстро адаптироваться к изменениям в инфраструктуре. Для статических ресурсов (например, изображений) рекомендуется использовать более высокий TTL (3600 секунд), чтобы снизить нагрузку на DNS-серверы.
Кэширование на уровне маршрутизаторов и сетевых устройств встречается реже, но может присутствовать в корпоративных сетях. Например, Cisco IOS поддерживает DNS-кэш через функцию ip dns cache, где записи хранятся до истечения TTL или перезагрузки устройства. MikroTik RouterOS использует аналогичный механизм с параметром dns-cache-size, по умолчанию – 2048 записей. Для сетей с высокой динамикой рекомендуется отключать кэш на маршрутизаторах, чтобы избежать проблем с устаревшими записями, особенно при использовании внутренних DNS-серверов.
Типы DNS-записей и их влияние на маршрутизацию запроса

DNS-записи определяют не только разрешение доменных имен в IP-адреса, но и логику маршрутизации трафика. Основные типы записей – A, AAAA, CNAME, MX, NS, TXT и SRV – выполняют специфические функции, влияющие на скорость, безопасность и отказоустойчивость. Например, A и AAAA напрямую связывают домен с IPv4 и IPv6, но их эффективность зависит от TTL (времени жизни записи). Низкий TTL (30–300 секунд) ускоряет обновление маршрутов при миграции серверов, но увеличивает нагрузку на DNS-серверы.
Записи CNAME перенаправляют запросы на другой домен, что полезно для CDN или SaaS-платформ. Однако их использование в корневом домене (example.com) нарушает RFC 1034, а цепочки CNAME увеличивают задержку из-за дополнительных DNS-запросов. Для балансировки нагрузки применяют A-записи с несколькими IP-адресами – клиент выбирает один случайно или по алгоритму round-robin. В таблице ниже приведены ключевые параметры, влияющие на маршрутизацию:
| Тип записи | Назначение | Влияние на маршрутизацию | Рекомендации |
|---|---|---|---|
A |
Связь домена с IPv4 | Прямая маршрутизация; TTL определяет частоту обновлений | Используйте TTL 300–3600 для стабильных сервисов, 60–300 для динамических |
AAAA |
Связь домена с IPv6 | Аналогично A, но для IPv6-сетей | Дублируйте A-записи для IPv6-совместимости |
CNAME |
Алиас для другого домена | Дополнительный DNS-запрос; запрещен для корневого домена | Избегайте цепочек длиннее 2–3 звеньев |
MX |
Маршрутизация почты | Приоритет (preference) определяет порядок обработки серверов | Указывайте не менее двух MX-записей с разными приоритетами |
SRV |
Указание сервисов (VoIP, XMPP) | Поддержка веса (weight) и приоритета для балансировки | Используйте для микросервисов с динамическим масштабированием |
Записи NS делегируют зоны DNS-серверам, формируя иерархию маршрутизации. Неправильная конфигурация NS-записей приводит к недоступности домена или утечкам трафика. Например, если авторитетные серверы указаны с разными TTL, клиенты могут получать устаревшие данные. Для критичных сервисов рекомендуется использовать не менее двух NS-серверов в разных географических зонах и синхронизировать их через AXFR/IXFR.
TXT-записи, изначально предназначенные для произвольных данных, стали основой для механизмов безопасности: SPF, DKIM и DMARC. SPF-записи ограничивают IP-адреса, с которых разрешена отправка почты, предотвращая подмену домена. DKIM добавляет цифровую подпись, а DMARC определяет политику обработки писем, не прошедших проверку. Без этих записей маршрутизация почты становится уязвимой к атакам, а домен попадает в спам-листы. Пример корректной SPF-записи: v=spf1 include:_spf.google.com ~all – разрешает отправку только через Google Workspace.
