Открыть сервис

Рекурсивный запрос

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

Принцип работы

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

  1. Запрос от клиента: Пользователь вводит доменное имя (например, ru.wikipedia.org) в браузере. Операционная система отправляет рекурсивный запрос на настроенный DNS-сервер.
  2. Поиск в кеше: Рекурсивный сервер проверяет свой локальный кеш на наличие записи для запрошенного домена. Если запись есть и её срок жизни (TTL) не истёк, сервер немедленно возвращает ответ клиенту.
  3. Обращение к корневым серверам: Если записи в кеше нет, рекурсивный сервер начинает итеративный процесс (но уже от своего имени). Он обращается к одному из 13 корневых серверов DNS. Корневой сервер не знает точного адреса, но возвращает серверу список адресов DNS-серверов, отвечающих за доменную зону верхнего уровня (TLD) — в данном случае .org.
  4. Обращение к TLD-серверам: Рекурсивный сервер отправляет запрос к одному из TLD-серверов для зоны .org. TLD-сервер возвращает адреса авторитетных DNS-серверов, обслуживающих домен wikipedia.org.
  5. Обращение к авторитетным серверам: Рекурсивный сервер запрашивает у авторитетного сервера домена wikipedia.org запись для ru.wikipedia.org. Авторитетный сервер возвращает искомый IP-адрес (например, 185.15.59.224).
  6. Ответ клиенту: Рекурсивный сервер сохраняет полученный IP-адрес в свой кеш и возвращает его клиенту (браузеру), который затем устанавливает соединение по этому адресу.

Таким образом, хотя рекурсивный сервер сам выполняет серию итеративных запросов, для клиента вся операция выглядит как один рекурсивный запрос — он ждёт только конечный результат.

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

В протоколе DNS существует два основных типа запросов, которые различаются по степени ответственности сервера:

  • Рекурсивный запрос (Recursive query): Сервер обязан вернуть клиенту либо запрошенные данные, либо сообщение об ошибке (например, «домен не существует»). Сервер не может вернуть клиенту ссылку на другой сервер. Этот тип запроса используется в клиент-серверном взаимодействии.
  • Итеративный запрос (Iterative query): Сервер возвращает клиенту наилучший известный ему ответ. Если сервер не знает точного ответа, он может вернуть адрес другого DNS-сервера, который, по его мнению, может знать ответ. Клиент (или другой рекурсивный сервер) затем самостоятельно обращается к этому новому серверу. Итеративные запросы используются между DNS-серверами.

Рекурсивные и авторитетные DNS-серверы

Рекурсивные серверы выполняют запросы от имени клиентов. Авторитетные серверы хранят эталонные записи для определённых доменных зон и отвечают на запросы только о тех доменах, за которые они ответственны.

  • Рекурсивный сервер (Recursive resolver): Не является источником данных. Его задача — найти данные, обращаясь к другим серверам. Он может обслуживать множество клиентов. Примеры: серверы интернет-провайдеров, публичные DNS-серверы (Cloudflare 1.1.1.1, Google 8.8.8.8).
  • Авторитетный сервер (Authoritative nameserver): Содержит фактические DNS-записи (A, AAAA, MX, CNAME и т.д.) для домена. Он отвечает только на запросы о доменах, которые он обслуживает. На авторитетный сервер обычно не отправляют рекурсивные запросы напрямую от клиентов.

Преимущества и недостатки

Преимущества

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

Недостатки

  • Нагрузка на сервер: Рекурсивный сервер выполняет большой объём работы, обрабатывая запросы от множества клиентов. Требуются значительные вычислительные ресурсы и пропускная способность канала.
  • Зависимость от одного сервера: Если рекурсивный сервер, настроенный у клиента, выходит из строя или работает некорректно, клиент теряет возможность разрешать доменные имена, пока не переключится на другой сервер.
  • Потенциальная уязвимость: Рекурсивный сервер может стать целью атак (например, DDoS-атака или отравление кеша (DNS cache poisoning)). В случае компрометации сервера злоумышленник может перенаправлять клиентов на поддельные сайты.

Безопасность и рекурсивные запросы

Рекурсивные серверы являются важным элементом инфраструктуры безопасности сети. Для защиты от атак применяются следующие меры:

  • DNSSEC (DNS Security Extensions): Криптографическая подпись DNS-записей. Рекурсивный сервер может проверять подлинность ответов, полученных от авторитетных серверов, что предотвращает подмену данных.
  • Фильтрация запросов: Многие рекурсивные серверы (например, публичные DNS-серверы) блокируют запросы к известным вредоносным доменам, защищая пользователей от фишинга и заражения вредоносным ПО.
  • Ограничение рекурсии: DNS-серверы могут быть настроены так, чтобы принимать рекурсивные запросы только от клиентов из определённой сети (например, от абонентов провайдера) и отклонять такие запросы из внешних сетей. Это предотвращает использование сервера в качестве отражателя в DDoS-атаках.

Применение в других протоколах

Термин «рекурсивный запрос» используется не только в DNS. Аналогичные принципы применяются в других протоколах и системах:

  • LDAP (Lightweight Directory Access Protocol): LDAP-серверы могут выполнять рекурсивные запросы для поиска объектов в иерархической структуре каталога, например, для поиска всех пользователей в определённом подразделении организации.
  • WHOIS: Некоторые WHOIS-серверы могут выполнять рекурсивные запросы, самостоятельно обращаясь к другим серверам WHOIS для получения полной информации о домене или IP-адресе.
  • Базы данных: В системах управления базами данных (СУБД) рекурсивные запросы используются для работы с иерархическими данными (например, дерево категорий, организационная структура). В SQL для этого существует конструкция WITH RECURSIVE.

Источники

  1. RFC 1034 — Domain Names — Concepts and Facilities.
  2. RFC 1035 — Domain Names — Implementation and Specification.
  3. RFC 8499 — DNS Terminology.
  4. Книга: Крокфорд, Дуглас. «DNS и BIND».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →