Иерархия. Имя api.shop.ru. читается справа налево: корень ., зона верхнего уровня ru, зона shop.ru, имя api. За каждую зону отвечают свои авторитетные серверы, и родитель знает, кому делегирована дочерняя зона (записи NS).
Разрешение имени:
- приложение спрашивает ОС (
getaddrinfo), та смотрит свой кэш и /etc/hosts; - запрос уходит рекурсивному резолверу — провайдера, компании или публичному (1.1.1.1, 8.8.8.8, 77.88.8.8);
- если ответа нет в кэше, резолвер идёт итеративно: корневой сервер говорит «за .ru отвечают эти», сервер .ru — «за shop.ru — эти», авторитетный сервер shop.ru даёт адрес;
- ответ кэшируется на время TTL из записи и возвращается клиенту.
Типы записей: A — IPv4, AAAA — IPv6, CNAME — имя-псевдоним (нельзя на корне домена), MX — почтовые серверы, TXT — проверка владения, SPF и DKIM для почты, NS — делегирование, SRV — сервисы с портами, CAA — кто может выпускать сертификаты.
TTL и переезды. Пока не истёк TTL, клиенты используют старый адрес. Поэтому перед сменой адреса TTL заранее уменьшают (скажем, с суток до минуты), а после переезда возвращают. Некоторые клиенты кэшируют дольше TTL — JVM исторически кэшировала навсегда при менеджере безопасности; настройка networkaddress.cache.ttl.
DNS как инструмент: простая балансировка — несколько A-записей (round-robin), географическая — разные ответы по региону клиента (GeoDNS), переключение при отказе. Ограничение — кэширование: быстро увести трафик только DNS-ом нельзя.
Сбои. DNS — частая причина «всё сломалось»: истёк домен, ошибка в зоне, недоступен резолвер, исчерпан лимит запросов. В Kubernetes ndots:5 заставляет пробовать несколько суффиксов на каждое имя — лишние запросы и задержка.