
До этого мы говорили как данные бегают по сети, что такое IP-адрес и как работает транспорт (TCP/UDP).
Теперь разберёмся с тем, что пользователь видит каждый день - доменные имена:
Компьютеры общаются по IP-адресам, но людям удобнее работать с именами.
Механизм, который связывает имя и IP-адрес, называется DNS.
Начнём с терминов.
Доменное имя - читаемый человеком текстовый адрес сервиса в сети.
Примеры:
IP-адрес - числовой адрес устройства в сети (мы уже разбирали: 203.0.113.42 и т.п.).
DNS (Domain Name System) - система, которая отвечает за то, чтобы по доменному имени найти соответствующий IP-адрес и вернуть его тому, кто спрашивает.
DNS можно представить как «телефонный справочник интернета», который по имени (example.com) говорит «у этого имени IP такой-то (93.184.216.34)».
Но это не один большой сервер, а распределённая система: множество DNS-серверов по всему миру, у каждого из которых своя зона ответственности. Они общаются друг с другом по определённым правилам.
DNS-запрос - это вопрос в стиле «Какой IP-адрес соответствует доменному имени example.com?»
Его отправляет либо операционная система, либо браузер/приложение через ОС.
Запрос содержит доменное имя (example.com), тип записи, которую мы ищем (например, IP-адрес) и дополнительные служебные поля.
Ответ содержит найденный IP-адрес (или несколько) и информацию о том, как долго можно хранить этот ответ (время жизни - TTL).
Чтобы понимать, как распределена ответственность, надо разобрать, из чего состоит доменное имя.
Возьмём пример: www.shop.example.com.
Разбираем справа налево:
Ответственность за разные «кусочки» делится между разными DNS-серверами - одни отвечают за .com, другие знают, кто отвечает за example.com, а третьи знают, какие IP-адреса у shop.example.com.
Слово «DNS-сервер» - общее. На деле есть разные роли.
Разберём главные:
Это DNS-сервер, к которому обращается ваш компьютер.
Обычно это DNS-сервер вашего провайдера, публичный DNS (например, 8.8.8.8 от Google) или корпоративный DNS в вашей компании.
Рекурсивный значит, что «если я сам не знаю ответ, я пойду спрашивать других DNS-серверов, пока не найду окончательный ответ, и принесу его тебе».
Именно сюда идёт первый DNS-запрос от вашего устройства.
Этот сервер официально отвечает за какой-то домен/зону (например, за example.com). Он хранит записи: какой IP у example.com, какой IP у www.example.com, кто ещё авторитетен для этой зоны и т.п.
Авторитетный значит «я - источник правды для этого домена.
Если кто-то будет спорить, правым считаюсь я».
Любой рекурсивный сервер по факту и есть кэширующий. Когда он один раз выяснил, что «example.com → 93.184.216.34», он запоминает (кеширует) этот ответ на некоторое время. Пока ответ не устарел, сервер не будет ходить по всем уровням снова, а будет отдавать ответ из кеша.
Это сильно снижает нагрузку на всю инфраструктуру DNS.
Теперь соберём всё в последовательную историю: что происходит, когда вы в браузере набираете example.com и нажимаете Enter.
Будем считать, что ОС и браузер ещё не знают IP этого домена и в локальном кеше пусто.
Перед тем как лезть в сеть, система проверяет:
Если IP уже есть - DNS-запрос «наружу» не нужен.
Если нет - идём дальше.
ОС знает адрес рекурсивного DNS-сервера, обычно:
ОС формирует DNS-запрос «Какой IP-адрес у example.com?» и отправляет его на этот DNS-сервер. Этот сервер - наш точка входа в DNS-мир.
Первым делом рекурсивный сервер смотрит свой кеш:
Как сервер понимает, «просрочена» запись или нет?
Для этого в DNS-ответе есть TTL.
TTL (Time To Live) - время жизни DNS-записи в секундах. Это значение задаёт владелец домена на своём авторитетном сервере.
Если в кеше пусто, рекурсивный сервер начинает полноценное разрешение.
DNS устроен как иерархическое дерево. На вершине - корневые серверы (root DNS servers). Их немного, они распределены по миру и обслуживают зону . (корень). Они не знают IP всех доменов, но знают кто отвечает за зоны верхнего уровня: .com, .org, .ru и т.д.
Рекурсивный сервер обращается к корневому: «Мне нужен IP example.com. Подскажи, кто отвечает за зону .com?». Корневой сервер отвечает: «За .com отвечают вот такие TLD-серверы. Вот их адреса.»
Теперь рекурсивный сервер идёт к одному из TLD-серверов для .com.
TLD-серверы - это DNS-серверы, которые отвечают за зону верхнего уровня: .com,.org,.ru и т.п.
Рекурсивный сервер спрашивает «Мне нужен IP example.com. Кто авторитетен для именно example.com?». TLD-сервер отвечает «Авторитетными DNS-серверами для example.com являются: ns1.provider.net, ns2.provider.net (и их IP)».
Теперь рекурсивный сервер идёт к авторитетному DNS-серверу для example.com. Это тот сервер, где владелец домена (или его хостинг-провайдер) настроил запись «имя → IP».
Рекурсивный сервер спрашивает «Какой IP-адрес у example.com?
(Тип записи: A - IPv4 или AAAA - IPv6)»
Авторитетный сервер отвечает «example.com → 93.184.216.34,
TTL = 3600 секунд (1 час).»
Получив ответ, рекурсивный сервер сохраняет запись в своём кеше (с TTL, который указал авторитетный сервер), чтобы при следующем запросе не ходить по цепочке заново. Затем он отправляет IP-адрес назад на ваш компьютер. Операционная система тоже может сохранить запись в своём локальном кеше, а браузер - в своём (в зависимости от настроек).
С этого момента, пока TTL не истёк, запросы к example.com чаще всего будут отрабатываться из кеша (либо на вашем компьютере, либо на DNS-сервере провайдера).
Чтобы было понятно, что именно хранит авторитетный DNS-сервер, посмотрим на основные типы записей.
DNS-запись - это строка вида «для этого имени - такие-то данные».
Часто встречаются:
Пока для общей картины нам важно, что DNS - это не только «имя → IP», но и другие сведения о домене. Но IP-записи (A/AAAA) - базовый случай.