Как работает 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
- Кэш браузера — проверяется локальный кэш. Если запись есть и не устарела (TTL не истёк) — возвращается сразу
- Кэш ОС — проверяется системный кэш DNS + файл
hosts(/etc/hostsилиC:\Windows\System32\drivers\etc\hosts) - Рекурсивный DNS-резолвер — обычно DNS-сервер провайдера или публичный (Google
8.8.8.8, Cloudflare1.1.1.1). Если ответ в его кэше — возвращается клиенту - Если нет в кэше, резолвер начинает итеративный запрос:
- Спрашивает у корневого сервера: «Где
.com?» → получает адрес TLD-сервера для.com - Спрашивает у TLD-сервера
.com: «Гдеexample.com?» → получает адрес авторитативного сервера дляexample.com - Спрашивает у авторитативного сервера: «Какой IP у
www.example.com?» → получает ответ:93.184.216.34
- Спрашивает у корневого сервера: «Где
- Резолвер кэширует результат (на время TTL) и возвращает его клиенту
- Браузер устанавливает 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 и возможные проблемы в облачной среде.