TTL: что это такое, как его узнать и какой ставить в DNS

TTL ограничивает время жизни данных в сети: в IP-пакете это счётчик маршрутизаторов, в DNS и HTTP-кэше срок хранения в секундах.

Показываем, как узнать TTL командами ping и dig, что значат 64 и 128, какой TTL ставить для DNS и почему сайт после смены IP открывается по старому адресу.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3030 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3684 экспертных мнения Подписаться на Телеграм-канал
Обложка: TTL: что это такое, как его узнать и какой ставить в DNS

TTL (Time To Live, «время жизни») — число, которое ограничивает, сколько живут данные в сети. В IP-пакете это счётчик пересылок: каждый маршрутизатор уменьшает его на единицу, а на нуле пакет уничтожают. В DNS и HTTP-кэше TTL считают в секундах: столько можно хранить копию ответа, прежде чем снова спросить источник.

Узнать TTL пакета можно командой ping, значение стоит в каждой строке ответа. TTL DNS-записи показывают dig и nslookup -debug. Где именно это поле лежит в пакете, мы показывали в разборе модели OSI на живом сетевом пакете.

Если вы искали ТТЛ-микросхемы, режим вспышки «через объектив» или маркетинговую модель Through The Line, это другие аббревиатуры из тех же букв. Здесь речь только о сетях.

Три TTL с одним названием

Рой провожает сетевой пакет с табличкой-счётчиком через цепочку роутеров

Аббревиатура одна, а механизмов несколько. Их путают постоянно: спрашивают про «TTL в роутере», а читают про DNS, и наоборот.

Где В чём измеряется Кто ведёт отсчёт Что происходит на нуле
IP-пакет (IPv4) переходы через маршрутизаторы каждый маршрутизатор на пути пакет уничтожают, отправителю уходит ICMP Time Exceeded
IPv6 переходы, поле называется Hop Limit каждый узел, который пересылает пакет пакет отбрасывают
DNS-запись секунды кэш резолвера запись запрашивают у авторитетного сервера заново
HTTP-кэш секунды (директива max-age) браузер, прокси, CDN копия считается устаревшей
Redis и другие хранилища секунды или миллисекунды сервер хранилища ключ удаляется

Общая идея у всех одна. TTL не даёт заблудившимся или устаревшим данным жить вечно. Отличаются единица счёта и тот, кто его ведёт. IP работает на сетевом уровне, DNS и HTTP на прикладном, а как протоколы делят между собой работу, мы разбирали в обзоре сетевых протоколов.

Как работает TTL в IP-пакете

Поле TTL занимает 8 бит в заголовке IPv4, поэтому его максимум равен 255. В RFC 791, где описан протокол IP, время формально считается в секундах. Но каждый узел, который обрабатывает пакет, обязан уменьшить TTL хотя бы на единицу, даже если управился быстрее секунды.

Поэтому RFC 791 велит считать TTL только верхней границей времени жизни пакета. На деле это лимит переходов: сколько маршрутизаторов пакет успеет пройти.

Требования к маршрутизаторам собраны в RFC 1812. Путь пакета выглядит так:

  1. Компьютер отправляет пакет со стартовым TTL, например 64.
  2. Первый маршрутизатор уменьшает значение до 63 и передаёт пакет дальше.
  3. Каждый следующий маршрутизатор снова вычитает единицу.
  4. Если TTL дошёл до нуля, маршрутизатор обязан отбросить пакет и отправить источнику сообщение ICMP Time Exceeded с кодом 0 («TTL Exceeded in Transit»), так записано в RFC 1812. Для групповой рассылки (multicast) сообщение не отправляют.

Без этого поля пакет, попавший в петлю маршрутизации, крутился бы между двумя роутерами бесконечно и забивал канал. С TTL он погибнет максимум через 255 переходов. Петли, маршруты и разбор пакетов по полям подробно проходят на курсах сетевого администрирования.

В IPv6 то же поле называется Hop Limit. Спецификация RFC 8200 описывает его прямо как счётчик: каждый узел, пересылающий пакет, уменьшает значение на 1.

Как трассировка использует TTL

Команды tracert в Windows и traceroute в Linux и macOS используют TTL нарочно. По справке Microsoft, tracert отправляет первый запрос с TTL 1 и прибавляет по единице, пока не ответит цель или пока не кончится лимит, по умолчанию 30 переходов.

Каждый маршрутизатор, на котором счётчик обнулился, возвращает Time Exceeded и тем самым называет свой адрес. Если какой-то роутер такие сообщения не отправляет, на его месте в трассировке будут звёздочки. Как читать трассировку и искать узел с задержкой, мы разбирали в статье про тест пинга.

То же самое можно увидеть вручную. Отправим пинг на ya.ru из Linux с TTL 3:

$ ping -c 2 -t 3 ya.ru
PING ya.ru (5.255.255.242) 56(84) bytes of data.
From 10.1.91.1 icmp_seq=1 Time to live exceeded
From 10.1.91.1 icmp_seq=2 Time to live exceeded

Трёх переходов не хватило: третий маршрутизатор обнулил счётчик и вернул «Time to live exceeded». Ключ, которым задают TTL у ping, в разных системах свой: в Windows -i, в Linux -t, в macOS -m. В macOS ключ -t означает таймаут, легко перепутать.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Как узнать TTL на компьютере

Проще всего пингануть любой сайт. В ответе вы увидите TTL пакета, который пришёл к вам от удалённого узла, то есть его стартовое значение минус пройденные переходы.

В Windows

  1. Нажмите Win + R, введите cmd и нажмите Enter.
  2. Наберите ping ya.ru.
  3. Посмотрите в конец каждой строки ответа: там стоит TTL= и число. Пример такой строки есть в справке Microsoft по команде ping.

Собственное стартовое значение Windows хранится в параметре реестра DefaultTTL. В справочнике Microsoft по параметрам TCP/IP для него указано значение по умолчанию 128 и диапазон от 0 до 255.

CheckroiCheckroiПодборка курсов по Linux158 курсов • 30 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

В macOS и Linux

Так выглядит пинг ya.ru с сервера на Linux:

$ ping -c 3 ya.ru
PING ya.ru (77.88.44.242) 56(84) bytes of data.
64 bytes from ya.ru (77.88.44.242): icmp_seq=1 ttl=56 time=5.28 ms
64 bytes from ya.ru (77.88.44.242): icmp_seq=2 ttl=56 time=7.95 ms
64 bytes from ya.ru (77.88.44.242): icmp_seq=3 ttl=56 time=7.84 ms

Своё стартовое значение показывает sysctl. В Linux параметр называется net.ipv4.ip_default_ttl, в macOS net.inet.ip.ttl:

$ sysctl net.ipv4.ip_default_ttl
net.ipv4.ip_default_ttl = 64

$ sysctl net.inet.ip.ttl
net.inet.ip.ttl: 64

Значение 64 в Linux взято не с потолка. В документации ядра сказано, что так рекомендует RFC 1700.

Как прочитать число из ответа

Стартовых значений на практике немного, самые частые 64 и 128. Отсюда простой приём:

  • пришло ttl=56: ближайшее стандартное значение сверху 64, значит, пакет, скорее всего, прошёл 8 маршрутизаторов;
  • пришло TTL=116: вероятно, узел стартовал со 128 и пакет прошёл 12 переходов;
  • пришло TTL=64 или TTL=128: узел в вашей же локальной сети, маршрутизаторов между вами нет.

Это оценка, а не точный ответ. Стартовое значение администратор может поменять, поэтому определять операционную систему собеседника по одному TTL ненадёжно.

Второе число в строке ping, time, к TTL отношения не имеет: это задержка в миллисекундах. Если она прыгает от пакета к пакету, смотрите статью про джиттер сети.

CheckroiCheckroiПодборка курсов по сетевому администрированию38 курсов • 18 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

TTL в роутере и при раздаче интернета с телефона

Чаще всего про TTL в роутере вспоминают из-за мобильного интернета. Когда телефон раздаёт интернет, он работает как маршрутизатор. Пакеты ноутбука проходят через телефон, и TTL у них уменьшается на единицу.

В базе знаний производителя роутеров Kroks стартовые значения перечислены так: Windows 128, Linux и macOS 64, Android и iOS на мобильном интернете тоже 64. Значит, в сеть оператора пакеты самого телефона уходят с 64, а пакеты ноутбука на Windows после телефона уходят со 127.

По этой разнице оператор может отличить трафик телефона от трафика раздачи. На части тарифов раздача платная или ограничена, условия написаны в описании тарифа у оператора.

В веб-интерфейсе роутеров Kroks для правил TTL есть отдельный раздел, а изменение TTL в обиходе называют «фиксацией TTL». В той же справке Kroks отдельно предупреждают: неправильная настройка TTL может привести к проблемам с доступом к некоторым ресурсам и сервисам.

Менять TTL, чтобы скрыть раздачу от оператора, значит нарушать условия тарифа, поэтому пошаговой инструкции для этого здесь не будет. Если раздача нужна постоянно, честнее выбрать тариф, где она разрешена.

TTL в DNS: сколько хранится запись

Песочные часы рядом с карточками адресной книги и маленьким глобусом

В DNS тот же термин значит другое. По RFC 1035, TTL записи задаёт интервал, в течение которого её можно хранить в кэше, прежде чем снова обратиться к источнику. Значение 0 означает, что запись годится только для текущего запроса и кэшировать её не следует.

Единица счёта здесь секунды. Позже RFC 2181 уточнил диапазон: число без знака от 0 до 2 147 483 647, то есть до 231 − 1.

Как посмотреть TTL DNS-записи

Сравним два ответа про один домен. Сначала спросим авторитетный сервер Яндекса, который хранит оригинал записи:

$ dig ya.ru A +noall +answer @ns1.yandex.ru
ya.ru.			600	IN	A	77.88.55.242
ya.ru.			600	IN	A	77.88.44.242
ya.ru.			600	IN	A	5.255.255.242

Теперь публичный резолвер Яндекса:

$ dig ya.ru A +noall +answer @77.88.8.8
ya.ru.			413	IN	A	77.88.44.242
ya.ru.			413	IN	A	77.88.55.242
ya.ru.			413	IN	A	5.255.255.242

Второе число в строке и есть TTL. Авторитетный сервер отдаёт полные 600 секунд, а резолвер показывает остаток: запись лежит у него в кэше, и счётчик идёт вниз. Когда он дойдёт до нуля, резолвер спросит ya.ru заново.

Сами DNS-запросы уходят на сетевой порт 53, его закрепляет тот же RFC 1035.

В Windows то же покажет nslookup -debug ya.ru: в подробном выводе будут строки ttl = ….

Ответ «такого домена нет» тоже кэшируется

Отрицательный ответ резолвер тоже запоминает. По RFC 2308, срок задаёт запись SOA: берётся меньшее из её поля MINIMUM и её собственного TTL.

$ dig yandex.ru SOA +noall +answer @8.8.8.8
yandex.ru.		3233	IN	SOA	ns1.yandex.ru. sysadmin.yandex-team.ru. 2023040331 600 300 2592000 900

Последнее число, 900, и есть MINIMUM. Если запросить несуществующий поддомен yandex.ru, резолвер будет помнить отказ не дольше 900 секунд, то есть 15 минут.

Отсюда частая ловушка: создали новый поддомен, а он «не работает». Скорее всего, вы проверили его до создания, и резолвер ещё хранит в кэше ответ, что такого имени нет.

Какой TTL ставить для DNS

Если домен компании ведёте вы, выбор TTL входит в обычные задачи системного администратора. Стандарта на «правильный» TTL нет, это компромисс между скоростью изменений и нагрузкой. Наши практические ориентиры:

Ситуация TTL Почему
Адрес сайта меняется редко 3600–86 400 секунд (от часа до суток) меньше запросов к DNS, ответы из кэша быстрее
Готовите переезд на другой сервер 300 секунд, выставить заранее после смены адреса старый быстро вытеснится из кэшей
Аварийное переключение между серверами 60–300 секунд трафик уйдёт на резервный адрес за минуты
Почтовые MX и NS-записи от 3600 секунд их почти не меняют, частые запросы ни к чему

Главное правило переезда: снижать TTL нужно заранее, не позже чем за срок старого TTL до смены адреса. Если у записи стояли сутки, а вы снизили TTL до 5 минут в день переезда, часть резолверов ещё до суток будет отдавать старый IP.

TTL в HTTP-кэше и Redis

Рой радуется, что новый дизайн сайта сразу появился в браузере

В HTTP роль TTL играет директива max-age заголовка Cache-Control. По справке MDN, она задаёт максимальное время, в течение которого ресурс считается актуальным, и, в отличие от Expires, отсчитывается относительно времени запроса.

Для общих кэшей вроде прокси и CDN есть отдельная директива s-maxage: она переопределяет max-age, а частные кэши, например браузер, её игнорируют. Как CDN хранит копии файлов ближе к пользователю, мы рассказывали в статье про сети доставки контента.

Посмотреть TTL ответа можно через curl -sI. Картинка со статического сервера Яндекса:

$ curl -sI https://yastatic.net/s3/home-static/_/37/37a02b5dc7a51abac55d8a5b6c865f0e.png | grep -iE "^(HTTP|cache-control)"
HTTP/2 200
cache-control: max-age=31536000

31 536 000 секунд равны 365 дням: картинку разрешено хранить в кэше год. А вот главная страница нашего сайта:

$ curl -sI https://checkroi.ru/ | grep -iE "^(HTTP|cache-control)"
HTTP/2 200
cache-control: public, max-age=60, stale-while-revalidate=86400

Страница свежая 60 секунд. Директива stale-while-revalidate, по той же справке MDN, означает, что клиент готов получить просроченный ответ, пока в фоне идёт проверка свежих данных. Число задаёт, сколько секунд так можно делать.

TTL ключей в Redis

В Redis срок жизни ставят на ключ: командой EXPIRE или опцией EX у SET. Пример из документации Redis к команде TTL:

> SET mykey "Hello"
OK
> EXPIRE mykey 10
(integer) 1
> TTL mykey
(integer) 10

Команда TTL возвращает оставшиеся секунды. Два особых ответа стоит помнить:

  • -1: ключ есть, но срока жизни у него нет, он будет жить, пока его не удалят;
  • -2: ключа нет совсем.

Миллисекундная версия той же команды называется PTTL.

CheckroiCheckroiПодборка курсов по Redis39 курсов • 12 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→ Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки с TTL и что с ними делать

Большая часть проблем с TTL выглядит как «я всё поменял, а ничего не изменилось». Пять типичных случаев:

  1. Сменили IP в DNS, а у части людей сайт открывается по старому адресу. Резолверы хранят старую запись до конца её TTL. Решение: снижать TTL заранее и не выключать старый сервер, пока не истечёт прежний TTL.
  2. Ping пишет «Time to live exceeded». Пакет не дошёл до цели: вы сами задали маленький TTL ключом либо на пути петля маршрутизации. Решение: запустить трассировку. Если адреса в ней повторяются по кругу, это петля, и разбираться нужно с провайдером или своим роутером.
  3. Выкатили новый CSS, а у пользователей старый дизайн. Файлу отдали max-age на год, а имя не поменяли, и браузер берёт копию из кэша. Решение: менять имя файла или параметр версии вроде ?ver= при каждом выпуске.
  4. Поставили DNS TTL 0 или 30 секунд «на всякий случай». Резолверы спрашивают авторитетный сервер почти на каждый запрос, ответы медленнее, нагрузка выше. Решение: ставить короткий TTL только на время работ.
  5. Ключ в Redis должен был истечь, а живёт вечно. По документации к SET, успешный SET сбрасывает прежний срок жизни ключа. Решение: передавать EX при каждой записи или использовать опцию KEEPTTL, которая сохраняет срок.

Где разобраться в сетях системно

TTL лишь одна из десятков деталей, из которых складывается работа сети, и разбирать их поштучно по мере поломок долго. Маршрутизацию, DNS и диагностику удобнее пройти один раз по порядку.

Если сети интересны как профессия, начните с разбора кто такой сетевой инженер. Курсы, где маршрутизацию, DNS и диагностику дают по порядку и с практикой, собраны в каталоге курсов для системных администраторов:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Системный администратор»
Перейти на сайт курса
НетологияНетология73 300 ₽5125 ₽/мес.11 месяцевОбзор курса
Системный администратор
Перейти на сайт курса
GeekBrainsGeekBrains99 500 ₽2764 ₽/мес.7 месяцевОбзор курса
Системный администратор (Бакалавриат)
Перейти на сайт курса
Университет СинергияУниверситет Синергия73 333 ₽ - 3 годаОбзор курса
Онлайн-курс Системный администратор
Перейти на сайт курса
БруноямБруноям65 900 ₽5491 ₽/мес.6 месяцевОбзор курса
Системный администратор + ИИ
Перейти на сайт курса
Институт профессиональных квалификаций (ИПК)ИПК30 450 ₽3171 ₽/мес.260 часовОбзор курса

Больше программ — в полном каталоге курсов для системных администраторов

Часто задаваемые вопросы

Что значит TTL 64 и 128?

Это стартовые значения TTL у пакетов, которые отправляет система. Linux и macOS по умолчанию ставят 64, Windows ставит 128 (параметр DefaultTTL). В ответе ping видно уже не стартовое число, а остаток после всех маршрутизаторов на пути.

В чём измеряется TTL?

В IP-пакете формально в секундах, но на деле это число переходов: каждый маршрутизатор вычитает единицу. В DNS, HTTP-кэше и Redis TTL считают в секундах.

Какое максимальное значение TTL?

У IP-пакета 255, потому что поле занимает 8 бит. У DNS-записи до 2 147 483 647 секунд, то есть 2^31 − 1.

Какой TTL ставить для DNS-записи?

Если адрес меняется редко, хватит 3600 секунд и больше. Перед переездом на другой сервер снизьте TTL до 300 секунд заранее, не позже чем за срок старого TTL до смены адреса.

Как узнать TTL сайта?

TTL пакетов покажет команда ping с адресом сайта: число стоит после ttl= в каждой строке ответа. TTL DNS-записи покажет dig с именем домена, а в Windows команда nslookup -debug.

Почему ping пишет «Time to live exceeded»?

TTL пакета обнулился раньше, чем пакет дошёл до цели. Либо вы сами задали слишком маленький TTL ключом, либо на пути петля маршрутизации. Запустите трассировку и посмотрите, где адреса начинают повторяться.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!