← Назад к вопросам

По какому протоколу работает DNS

1.0 Junior🔥 181 комментариев
#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

DNS: протокол транспортного уровня и общая модель работы

DNS (Domain Name System) работает по модели клиент-сервер и использует для передачи запросов и ответов преимущественно протокол UDP (User Datagram Protocol) на порт 53. Это основной и наиболее эффективный транспорт. Однако система также может работать по протоколу TCP на тот же порт 53, что является обязательным требованием стандарта (RFC 1035) для определённых сценариев.

Почему UDP — основной протокол?

Главная причина выбора UDP — скорость и низкие накладные расходы. Запросы DNS часто представляют собой короткие сообщения (например, запрос IP-адреса для example.com), а ответы обычно умещаются в один пакет.

Клиент (Резолвер)              Сервер DNS (Recursive Resolver)
       |                                      |
       | -- DNS Запрос (UDP, порт 53) ------> |
       |                                      |
       | <-- DNS Ответ (UDP, порт 53) ------- |
       |                                      |

Ключевые преимущества UDP для DNS:

  • Минимальные задержки: Нет трёхстороннего рукопожатия (как в TCP).
  • Низкая нагрузка на серверы: Отсутствие необходимости поддерживать состояние соединения для тысяч одновременных запросов.
  • Эффективность: Для простых запросов-ответов это идеальная модель.

Когда используется TCP?

Стандарт DNS предписывает обязательное использование TCP в двух случаях:

  1. При превышении размера сообщения 512 байт: Если ответ не помещается в один UDP-пакет, сервер усекает его и устанавливает флаг TC (Truncated) в заголовке. Клиент обязан повторить запрос, используя TCP, который может передавать данные частями.
  2. Зона трансфер (Zone Transfer, AXFR/IXFR): Процесс полной или инкрементальной синхронизации данных между первичным (Primary) и вторичным (Secondary) DNS-серверами. Передаются все записи зоны, что всегда предполагает большие объёмы данных, требующие надёжной доставки по TCP.
# Пример команды для инициации трансфера зоны с использованием TCP
dig @primary.ns.example.com example.com AXFR +tcp

Модель работы DNS поверх UDP

Работа поверх UDP накладывает особенности. Протокол не гарантирует доставку, поэтому ответственность за обработку таймаутов и повторные запросы ложится на DNS-резолвер (клиентское ПО). Типичный алгоритм:

1.  Резолвер отправляет запрос на первый DNS-сервер из списка по UDP.
2.  Запускается таймер ожидания (обычно 1-5 сек).
3.  Если ответ не получен, резолвер повторяет запрос, возможно, на другой DNS-сервер.
4.  После нескольких неудач может произойти автоматический переход на TCP.

Современные тенденции: DNS over HTTPS (DoH) и DNS over TLS (DoT)

В последние годы получили развитие новые протоколы, призванные повысить конфиденциальность и безопасность DNS-трафика:

  • DNS over TLS (DoT, RFC 7858): Инкапсулирует DNS-запросы/ответы в TLS-соединение поверх TCP (порт 853). Защищает от подслушивания и подмены (spoofing).
  • DNS over HTTPS (DoH, RFC 8484): Форматирует DNS-сообщения как HTTP/2 или HTTP/3 запросы и отправляет их на стандартный порт 443. Это позволяет маскировать DNS-трафик под обычный HTTPS-трафик, обходя блокировки на уровне портов.
// Пример упрощённого DoH-запроса в формате JSON
fetch("https://cloudflare-dns.com/dns-query?name=example.com&type=A", {
  headers: { "Accept": "application/dns-json" }
})
.then(response => response.json())
.then(data => console.log(data.Answer));

Итог: комбинация протоколов

Таким образом, DNS — это система, гибко использующая несколько транспортных протоколов:

  1. UDP/53основной рабочий протокол для подавляющего большинства повседневных запросов из-за своей скорости и эффективности.
  2. TCP/53обязательный протокол-компаньон для больших ответов и критически важных операций обслуживания инфраструктуры (трансфер зон).
  3. TCP/853 (DoT) и TCP/443 (DoH)современные защищённые протоколы, набирающие популярность для повышения приватности пользователей в публичных сетях.

Понимание этой многослойности критически важно для DevOps-инженера при настройке DNS-серверов (BIND, PowerDNS, Knot DNS), диагностике проблем с разрешением имён (используя dig +tcp, nslookup, Wireshark), настройке сетевых фильтров (фаерволы должны пропускать как UDP/53, так и TCP/53 для корректной работы DNS) и планировании перехода на зашифрованные протоколы.