Использует ли DNS протокол UDP?

«Использует ли DNS протокол UDP?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, DNS преимущественно использует UDP (порт 53). В своей работе при настройке инфраструктуры и диагностике сетевых проблем я постоянно сталкиваюсь с этим.

Почему UDP — основной выбор для DNS:

  • Низкие накладные расходы: Запрос и ответ обычно умещаются в один пакет (ограничение 512 байт для UDP). Установка TCP-соединения (three-way handshake) добавила бы значительную задержку для простых запросов.
  • Быстрота и эффективность: Серверы могут обрабатывать тысячи простых запросов в секунду без необходимости поддерживать состояние соединения.

Когда DNS переключается на TCP (порт 53):

  1. Ответ превышает 512 байт: Если в ответе слишком много записей (например, большая зона при AXFR-трансфере) или включены расширения вроде DNSSEC, в ответе выставляется флаг TC (Truncated). Клиент должен повторить запрос, используя TCP.
  2. Трансфер зоны (Zone Transfer): Механизм AXFR/IXFR для репликации данных между primary и secondary DNS-серверами всегда использует TCP из-за объёма передаваемых данных и требований к надёжности.

Практическая проверка с помощью dig:

# Стандартный запрос по UDP (по умолчанию)
dig @8.8.8.8 example.com A

# Принудительный запрос по TCP (полезно для диагностики проблем с большими ответами или файрволами)
dig @8.8.8.8 example.com A +tcp

# Запрос с отключением флага truncation, чтобы увидеть полный UDP-ответ, если он влазит в буфер
dig @8.8.8.8 example.com A +ignore

Для DevOps это важно понимать при:

  • Настройке сетевых ACL и правил файрвола (нужно разрешать и UDP, и TCP на порт 53 для исходящих и входящих запросов).
  • Диагностике проблем с разрешением имён в контейнерах или облачных сетях.
  • Настройке собственных кэширующих DNS-резолверов (например, dnsmasq, CoreDNS).