Может ли DNS работать по протоколу TCP, а не только по UDP?

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

Ответ

Да, DNS может и активно использует TCP (порт 53) в дополнение к UDP.

Почему DNS использует TCP?

  1. Размер ответа: Если DNS-ответ превышает 512 байт (стандартный лимит для UDP), сервер устанавливает флаг TC (Truncated), и клиент должен повторить запрос по TCP, который не имеет такого ограничения.
  2. Зонные трансферы (Zone Transfer): Механизмы AXFR (полный трансфер) и IXFR (инкрементальный трансфер) для репликации данных между DNS-серверами всегда используют TCP из-за большого объема передаваемых данных и требований к надежности.
  3. Надежность: В сетях, где UDP-пакеты могут блокироваться или теряться, TCP обеспечивает гарантированную доставку благодаря установлению соединения и механизмам повторной передачи.

Пример принудительного использования TCP с утилитой dig:

dig +tcp +noall +answer example.com ANY

Пример в контексте DevOps: При настройке сетевых политик (например, Calico NetworkPolicy) или правил межсетевого экрана для кластера Kubernetes необходимо разрешать как UDP, так и TCP трафик на порт 53 для корректной работы DNS внутри кластера (CoreDNS/kube-dns) и внешних запросов.