Gymterview
junior

Как работает DNS?

DNS (Domain Name System) — распределённая иерархическая система, преобразующая доменные имена (например, www.google.com) в IP-адреса (например, 142.250.74.68).

Аналогия из жизни: DNS — это телефонная книга Интернета. Вместо того чтобы запоминать номер 142.250.74.68, вы ищете по имени «google.com», а телефонная книга возвращает нужный номер.

Иерархия DNS

Пример
                    .  (корневой домен, root)
                   /|\
                  / | \
              .com .ru .org   ...    ← TLD (Top-Level Domain)
               |     |
           google  yandex            ← Домены второго уровня (SLD)
             |       |
           www     mail              ← Поддомены (subdomains)
  • Корневые серверы — 13 групп серверов (от a.root-servers.net до m.root-servers.net), знающие адреса серверов доменов верхнего уровня. Каждая «группа» — это множество серверов, распределённых по миру через anycast
  • TLD (Top-Level Domain) — домены верхнего уровня: .com, .ru, .org, .net
  • Авторитативные серверы — хранят фактические DNS-записи для конкретных доменов

Процесс разрешения DNS (пошагово)

Пример: браузер запрашивает www.example.com

  1. Кэш браузера — проверяется локальный кэш. Если запись есть и не устарела (TTL не истёк) — возвращается сразу
  2. Кэш ОС — проверяется системный кэш DNS + файл hosts (/etc/hosts или C:\Windows\System32\drivers\etc\hosts)
  3. Рекурсивный DNS-резолвер — обычно DNS-сервер провайдера или публичный (Google 8.8.8.8, Cloudflare 1.1.1.1). Если ответ в его кэше — возвращается клиенту
  4. Если нет в кэше, резолвер начинает итеративный запрос:
    • Спрашивает у корневого сервера: «Где .com?» → получает адрес TLD-сервера для .com
    • Спрашивает у TLD-сервера .com: «Где example.com?» → получает адрес авторитативного сервера для example.com
    • Спрашивает у авторитативного сервера: «Какой IP у www.example.com?» → получает ответ: 93.184.216.34
  5. Резолвер кэширует результат (на время TTL) и возвращает его клиенту
  6. Браузер устанавливает TCP-соединение с полученным IP
Пример
Браузер → Кэш браузера (miss) → Кэш ОС (miss) → Рекурсивный резолвер (miss)
    → Корневой сервер: "Где .com?" → TLD .com: "Где example.com?"
    → Авторитативный: "www.example.com = 93.184.216.34"
    ← Ответ кэшируется на каждом уровне (TTL)

TTL (Time To Live)

TTL — время в секундах, в течение которого DNS-запись может кэшироваться:

TTL Значение Когда использовать
60 с Короткий Перед миграцией, при частой смене IP
300 с (5 мин) Средний Баланс между скоростью и гибкостью
3600 с (1 ч) Стандартный Для стабильных записей
86400 с (24 ч) Длинный Для редко меняющихся записей

Для Java-разработчика

  • JVM кэширует DNS-ответы. По умолчанию при наличии SecurityManager — навсегда для положительных ответов (successful lookups), 30 с без него. Это может быть проблемой при использовании load balancer с меняющимися IP
  • Настройка: networkaddress.cache.ttl и networkaddress.cache.negative.ttl в $JAVA_HOME/conf/security/java.security
  • InetAddress.getByName("example.com") — резолвинг DNS в Java
  • При работе с AWS ELB/ALB или Kubernetes Service рекомендуется установить networkaddress.cache.ttl=30 для корректной балансировки

Вывод

DNS — критически важная инфраструктура Интернета, без которой невозможна работа с доменными именами. Понимание многоуровневого кэширования (браузер → ОС → резолвер) помогает диагностировать проблемы с доступностью ресурсов и правильно настраивать TTL при миграциях.

На собеседовании: могут попросить описать полный путь DNS-запроса. Важно упомянуть кэширование на каждом уровне, разницу между рекурсивным (клиент просит резолвер сделать всю работу) и итеративным (резолвер сам обходит серверы) запросами. Для Java — обязательно расскажите про кэширование DNS в JVM и возможные проблемы в облачной среде.