Кэширование и TTL
Кэширование и TTL
DNS-запросов в мире — триллионы в день. Если бы каждый запрос доходил до авторитативных серверов, интернет бы не выдержал. К счастью, DNS спроектирован с агрессивным кэшированием на каждом уровне. Разберём, как работает кэш DNS и что такое TTL.
TTL: сколько живёт запись
У каждой DNS-записи есть TTL (Time To Live) — время в секундах, в течение которого запись можно хранить в кэше. Типичные значения:
example.com. 300 A 93.184.216.34
↑
TTL = 300 секунд = 5 минут
Когда резолвер получает запись с TTL=300, он запоминает её на 5 минут. Повторные запросы в течение этих 5 минут получают ответ из кэша мгновенно. Через 5 минут запись считается «протухшей», и резолвер запрашивает её заново у авторитативного сервера.
Почему TTL важен
TTL — это компромисс между скоростью и гибкостью:
- Короткий TTL (60–300 секунд). Изменения DNS распространяются быстро. Подходит для сервисов, которые могут мигрировать между серверами (failover). Минус: больше запросов к авторитативным серверам.
- Длинный TTL (3600–86400 секунд). Отличная производительность, меньше нагрузка на серверы. Минус: при смене IP-адреса часть пользователей будет получать старый адрес до истечения TTL.
Типичная стратегия: за 5–10 минут до плановой смены IP-адреса администратор понижает TTL до 60 секунд. После того как старые TTL истекут, все используют короткий TTL. Затем меняется IP-адрес (новый TTL уже короткий — изменения подхватываются за минуту). Через некоторое время TTL можно снова поднять.
Где кэшируется DNS
Кэш DNS есть на нескольких уровнях, и каждый сокращает задержку:
- Браузер. Хранит результаты последних запросов (обычно 1–2 минуты, независимо от TTL).
- Операционная система. Локальный DNS-кэш. На Windows:
ipconfig /displaydns, на Mac:sudo dscacheutil -cachedump. - Роутер. Домашний роутер часто кэширует DNS-ответы для всех устройств в сети.
- Резолвер провайдера. Обслуживает тысячи пользователей. Если один уже запросил
google.com, остальные получают ответ из кэша.
Благодаря этой многоуровневой системе, популярные домены (google.com, youtube.com) практически всегда отдаются из кэша. Авторитативные серверы Google получают лишь малую долю реальных запросов.
Негативное кэширование
Если домен не существует (NXDOMAIN — «нет такого домена»), резолвер тоже кэширует этот факт. Время хранения негативного ответа определяется полем MINIMUM в SOA-записи зоны (обычно 300–3600 секунд). Это защищает DNS-инфраструктуру от лавины запросов к несуществующим доменам.
TTL и CDN: как это связано
Сети доставки контента (CDN) активно используют TTL. Когда пользователь из Москвы запрашивает cdn.example.com, DNS возвращает IP сервера в Москве. Когда пользователь из Нью-Йорка запрашивает тот же домен — IP сервера в Нью-Йорке. Это называется GeoDNS или latency-based routing.
Для такой схемы TTL обычно выставляют коротким (60–120 секунд): если сервер в Москве упал, DNS перенаправит трафик на другой регион уже через минуту.
Как очистить DNS-кэш
Иногда нужно принудительно сбросить кэш — например, после смены DNS-записей, чтобы увидеть актуальный результат:
# Mac
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# Windows
ipconfig /flushdns
# Linux (systemd-resolved)
sudo systemd-resolve --flush-caches
# Браузер Chrome
# Открыть chrome://net-internals/#dns → Clear host cache
После очистки кэша следующий запрос к домену пойдёт по полному циклу разрешения.
Проверь себя
- TTL записи — 600 секунд. Через сколько после изменения IP-адреса все пользователи гарантированно увидят новый?
- Почему бы не сделать TTL всегда равным 1 секунде для максимальной гибкости?
- Что произойдёт, если TTL истечёт, а авторитативный сервер недоступен?
- Не раньше, чем через 600 секунд после того, как изменение попало на авторитативный сервер. Но фактически может быть дольше: браузеры и ОС могут игнорировать TTL и держать кэш дольше (до нескольких минут).
- Потому что каждый запрос уходил бы к авторитативному серверу. Это создало бы гигантскую нагрузку на DNS-инфраструктуру и замедлило бы каждый запрос на 50–200 мс.
- Резолвер продолжит отдавать «протухшую» запись из кэша (stale cache) — это лучше, чем вообще не отвечать. Большинство резолверов держат записи в stale-кэше от нескольких часов до суток.
Что унести с урока
- TTL — время жизни DNS-записи в кэше, в секундах. Компромисс скорости и гибкости.
- DNS кэшируется на уровнях: браузер → ОС → роутер → резолвер провайдера.
- Короткий TTL (60–300) — быстрые изменения. Длинный (3600+) — лучшая производительность.
- Перед плановой сменой IP TTL временно понижают, чтобы ускорить распространение изменений.
- Негативное кэширование защищает от повторных запросов к несуществующим доменам.
Модуль DNS завершён. Мы знаем, как имена превращаются в адреса. Теперь перейдём на прикладной уровень — к протоколу, ради которого большинство людей и открывает браузер. В следующем модуле разберём HTTP.