Невидимая магия DNS: как браузер находит путь в интернете
Невидимая магия DNS: как браузер находит нужный сервер
Каждый раз, когда вы открываете сайт, браузер творит чудо. Он превращает удобное имя домена в IP-адрес, находит сервер где-то в мире и подключается за доли секунды. За этим стоит DNS — Domain Name System. Многие разработчики даже не подозревают, насколько он умён.
DNS придумали в 1983 году. Тогда интернет работал на модемах, а веб ещё не родился. Пол Мокапетрис создал систему быструю, масштабируемую и надёжную для сети с ненадёжными связями. Прошло 40 лет, а дизайн всё ещё идеален. Разберём, в чём секрет.
Быстрота за счёт UDP вместо TCP
Главный приём прост: DNS по умолчанию использует UDP, а не TCP.
TCP требует трёхэтапного рукопожатия — лишний круг до отправки запроса. Если бы DNS так работал, интернет встал бы. Браузер на одной странице делает десятки запросов. Представьте задержки везде.
UDP избавляет от этого. Клиент шлёт один пакет на порт 53 с вопросом. Сервер отвечает одним пакетом. Всё. Без рукопожатий и торга.
Минус? Пакеты UDP могут потеряться. DNS решает просто: нет ответа в таймаут — спрашивай заново. Больше 99% запросов укладываются в 512 байт, потери редки.
Есть запасной план. Если ответ большой — например, с DNSSEC — сервер ставит бит TC (Truncated). Клиент переключается на TCP порт 53 для полной передачи. Два уровня: скорость по умолчанию, надёжность по нужде.
Иерархия делегирования: перевёрнутое дерево
DNS масштабируется без единой базы всех доменов мира. Это перевёрнутое дерево, читаемое справа налево.
Запрос www.example.com. начинается с корня (та скрытая точка в конце) и спускается вниз:
Root-серверы — стартовая точка. Их 13 логических (A–M), но Anycast размножает на тысячи копий по миру. Ваш запрос уходит ближайшему. Они не знают ваш домен, но подскажут серверы для .com, .org, .uk.
Серверы TLD (Top-Level Domain) ведут реестры. Verisign отвечает за .com, Afilias за .info, другие за страны. Спросите про example.com — назовут nameservers для него.
Authoritative nameservers — на дне дерева. Их ставит регистратор или провайдер вроде Cloudflare, Route 53, NameOcean. Там zone file с A, AAAA, CNAME, MX и всем остальным. Ответ с битом aa: "Я авторитет. Это правда".
Проблема: если nameserver — ns1.example.com, как узнать его IP без IP example.com? TLD спасает glue records — IP nameserver'а прямо в делегации NS. Без них система рухнет.
Кэширование: суперсила интернета
Если бы каждый запрос шёл от корня до authoritative — интернет бы умер.
Спасение в многоуровневом кэшировании повсюду.
Каждая запись несёт TTL — время жизни в секундах. Обещание: "Держи X секунд, не спрашивай раньше". Кэш везде:
- В браузере — Chrome хранит свой, смотрите в
chrome://net-internals/#dns. - В ОС —
systemd-resolvedна Linux,mDNSResponderна macOS, DNS Client в Windows. - У recursive resolver'а — 8.8.8.8 от Google, 1.1.1.1 от Cloudflare или ISP. Один miss — миллионы hit'ов.
Поэтому TTL критичен при миграциях. Меняете сервер? Снижайте TTL заранее — с 24 часов до 5 минут. Иначе кэши игнорируют изменения, трафик уйдёт на старый IP на сутки. Кэш без контроля — тормоз.
Any cast: трюк с маршрутизацией
А как 8.8.8.8 отвечает из Токио и Лондона за 2 мс? Как 13 root'ов растягиваются на тысячи серверов?
Не DNS, а Anycast. Один IP объявляют сотни серверов по миру через BGP. Роутер выбирает ближайший по кратчайшему пути.
Cloudflare так даёт DNS с задержкой в миллисекунды везде. DDoS на root'ы распределяется по всем точкам. Чистая магия инфраструктуры.
Всё в куче
DNS — шедевр распределённых систем. Быстр за счёт UDP без состояний. Масштабируется иерархией дерева. Выживает на кэше. Достаёт быстро через Anycast.
Сделано в 1983-м для крошечного интернета. А сегодня держит триллионы запросов в день. Принципы вечны.
Если работаете с NameOcean или DNS в масштабе, знание основ меняет подход к доменам, миграциям и оптимизации. DNS — не трубы, а артерии сети.