Почему часы компьютера нужно подводить
Кварцевый генератор в любом компьютере или телефоне идёт чуть быстрее или медленнее эталона, и без коррекции ошибка копится минутами за недели. Казалось бы, не страшно, но многие сетевые механизмы зависят от согласованного времени. Сертификаты TLS имеют срок действия, и при сильно сбитых часах браузер сообщит о недействительном сертификате. Одноразовые коды TOTP считаются от текущего времени, распределённые системы сравнивают отметки в журналах, а следователь, разбирающий инцидент, должен уметь сопоставить события на разных машинах.
NTP, Network Time Protocol, решает именно эту задачу. Он один из старейших протоколов интернета и при хороших условиях позволяет держать точность порядка единиц или десятков миллисекунд в обычной сети, а в локальной — заметно точнее.
Страты и путь времени от атомных часов
Время в NTP передаётся по иерархии, слои которой называют стратами. Страта 0 — эталонные источники: атомные часы и приёмники спутниковой навигации. К ним напрямую подключены серверы страты 1, те раздают время серверам страты 2 и так далее, а номер показывает число шагов до эталона. Чем выше номер, тем дальше от источника, но это не то же самое, что плохое качество.
Клиент обычно опрашивает несколько серверов, а не один, и по совокупности ответов отбрасывает те, что расходятся с большинством. Так одиночный неисправный или неверный сервер не портит время. Подходящие серверы берутся из публичного пула, а домашний роутер часто выступает посредником для устройств сети.
Как вычисляется поправка с учётом задержки сети
Простое «спроси и поставь» не годится: ответ идёт по сети, и пока он добирается, время уже ушло вперёд. NTP использует четыре отметки: когда клиент отправил запрос, когда сервер его принял, когда сервер отправил ответ и когда клиент получил его. Из них вычисляется круговая задержка и смещение часов клиента относительно сервера, при допущении, что путь туда и обратно занял примерно одинаковое время.
Сбой этого допущения, например при перегруженном канале в одну сторону, ограничивает точность. Часы после вычисления не просто «перескакивают»: если расхождение мало, система плавно подстраивает частоту, ускоряя или замедляя ход, чтобы время не шло скачком назад. Резкий скачок допускается только при больших отклонениях, обычно при запуске.
Где встречается и что значит порт UDP 123
Протокол использует UDP и порт 123, поэтому запросы небольшие и лёгкие. Клиент есть в каждой современной операционной системе: Windows синхронизируется с серверами Microsoft по умолчанию, macOS и мобильные системы — со своими, Linux применяет chrony или systemd-timesyncd. В корпоративной среде часто поднимают собственный сервер времени для внутренней сети, а сетевое оборудование и серверы берут время у него.
Попутно всплывает тема безопасности. Ответы NTP сами по себе не защищены, и для атак на отражение использовались открытые серверы с устаревшей командой мониторинга. Есть расширение NTS, добавляющее аутентификацию, но распространено оно пока не везде. Для домашнего пользователя это означает одно: пользуйтесь серверами системы и не открывайте свой сервер времени в интернет без нужды.
У виртуальных машин и устройств без батарейки для часов есть своя особенность: после выключения или приостановки они возвращаются с устаревшим временем, поэтому при старте сначала корректируют его большим скачком, а затем плавно. Если сервер после включения долго живёт с неверной датой, стоит проверить, что служба времени запускается до сервисов, зависящих от сертификатов.
Заблуждения и проверка у себя
Распространённое допущение — что достаточно часов, идущих «по интернету» в браузере. Браузер время не подводит, оно берётся из системы. Второе — что часовой пояс и время — одно и то же. NTP переносит время в универсальной шкале UTC, а пояс и летнее время накладывает уже система. Поэтому неправильный пояс NTP не исправит.
Проверить синхронизацию можно так. В Windows в командной строке команда w32tm /query /status покажет источник и время последней синхронизации, а в параметрах даты можно нажать «Синхронизировать». В Linux команда timedatectl сообщает, синхронизированы ли часы, а chronyc tracking показывает текущее смещение. Если TLS внезапно ругается на сертификаты у всех сайтов сразу, первым делом сверьте дату на устройстве.