Браузер не умеет ходить «на сайт». Он умеет отправлять пакеты на IP-адрес — набор из четырёх чисел. Чтобы узнать адрес по имени, существует DNS — распределённая телефонная книга интернета. В прошлой части на это ушло 36 мс первого запроса и 0,6 мс второго. Разберёмся, что происходит за эти 36 мс и почему во второй раз почти ничего.
Это вторая часть цикла «Что происходит, когда открываешь сайт».
Никто не знает всех адресов
В DNS нет сервера, который знает адреса всех сайтов. Вместо этого книга разрезана на зоны, и каждая зона знает только, кому поручена следующая. Корень знает, кто отвечает за .ru. Серверы зоны .ru знают, кто отвечает за alekseychikun.ru. И только серверы самого сайта знают его адрес.
Ходит по этой цепочке не браузер, а рекурсивный резолвер — сервер провайдера или публичный вроде 1.1.1.1 и 8.8.8.8. Браузер задаёт ему один вопрос и получает готовый ответ, а все промежуточные запросы резолвер делает сам:
Пройти цепочку самому
dig +trace делает то же, что резолвер, но показывает каждый шаг. Вот что он выдал для этого сайта (лишнее убрано):
$ dig +trace +nodnssec alekseychikun.ru A
. 262 IN NS a.root-servers.net.
. 262 IN NS b.root-servers.net.
… (всего 13 имён, от a до m)
ru. 172800 IN NS a.dns.ripn.net.
ru. 172800 IN NS b.dns.ripn.net.
… (6 серверов зоны ru)
alekseychikun.ru. 345600 IN NS ns1.beget.com.
alekseychikun.ru. 345600 IN NS ns2.beget.com.
alekseychikun.ru. 345600 IN NS ns1.beget.pro.
alekseychikun.ru. 345600 IN NS ns2.beget.pro.
alekseychikun.ru. 300 IN A 203.0.113.22
Три перехода — три ответа:
- корень не знает адреса сайта, но знает 13 имён корневых серверов и отправляет к серверам зоны
ru. На деле за 13 именами — сотни машин по всему миру, отвечает ближайшая; - серверы зоны ru тоже не знают адреса, зато знают, какие серверы обслуживают этот домен. Это делегирование — его прописывают у регистратора, когда указывают DNS-серверы домена;
- серверы домена — авторитетные — отвечают окончательно: запись
A, IPv4-адрес.
Число во второй колонке — сколько ответ можно помнить
Вторая колонка — TTL, время жизни записи в секундах. Пока оно не вышло, резолвер не переспрашивает, а отвечает из своего кэша:
| Запись | TTL | По-человечески |
|---|---|---|
список серверов зоны ru | 172 800 | 2 суток |
| делегирование домена (из зоны ru) | 345 600 | 4 суток |
адрес сайта (A) | 300 | 5 минут |
Вот почему второй запрос в прошлой части занял 0,6 мс: резолвер помнил и путь, и адрес. Верхние уровни меняются редко, их держат сутками. Адрес сайта мы держим 5 минут — чтобы при переезде на другой сервер новый адрес разошёлся быстро. Платим за это тем, что раз в 5 минут кто-то из посетителей снова ждёт полный ответ.
Длинный TTL экономит время посетителям, короткий — нервы при переезде. Разумный порядок: обычно час и больше, а за сутки до переноса сайта уменьшить до 5 минут, дождаться, пока старое значение истечёт, и только потом менять адрес.
Одна находка из этого же вывода
Если спросить серверы самого домена, какие у него NS-записи, они назовут шесть серверов — к четырём из делегирования добавятся ещё два. Это не ошибка, всё работает: резолвер пойдёт к любому из тех, кого назвала зона ru. Но наборы стоит держать одинаковыми. Если однажды убрать из зоны сервер, который ещё прописан у регистратора, часть резолверов будет спрашивать его и получать отказ.
# что говорит родительская зона (делегирование)
dig +trace +nodnssec example.ru NS | tail -6
# что говорит сам домен
dig example.ru NS +short @ns1.example-dns.net
Какие записи встречаются чаще всего
| Тип | Что хранит |
|---|---|
A / AAAA | адрес IPv4 / IPv6 |
CNAME | «это имя — псевдоним другого имени», например www → основной домен |
NS | какие серверы обслуживают зону |
MX | куда доставлять почту |
TXT | произвольный текст: SPF для почты, подтверждение прав на домен для поисковиков |
CAA | каким центрам сертификации разрешено выпускать сертификаты на домен |
В следующей части — что из этого ломается на практике: почему после смены адреса сайт ещё долго открывается на старом сервере, что делает запись «на всё» и откуда берётся SERVFAIL.
Переезжаете на новый сервер и боитесь, что сайт пропадёт?
Напишите — составлю порядок переключения DNS без простоя и проверю записи до и после.
// загружаю комментарии…