Как работает протокол сетевого времени (NTP): объяснение синхронизации часов
Когда большинство людей впервые узнают о сетевом протоколе времени (Network Time Protocol, NTP), они представляют себе нечто простое:
Мой компьютер запрашивает текущее время у сервера времени, получает ответ и обновляет свои часы.
К сожалению, при таком подходе часы будут показывать неточное время.
Сетевой протокол времени (Network Time Protocol, NTP) — это сетевой протокол, который синхронизирует часы компьютеров и сетевых устройств в IP-сетях. Вместо того чтобы просто запрашивать текущее время, NTP оценивает задержку в сети, компенсирует дрейф часов и постоянно корректирует системные часы, чтобы максимально точно синхронизировать компьютеры.
Настоящая сложность заключается не в получении времени. Она заключается в определении того, насколько сетевая задержка повлияла на ответ. Именно поэтому NTP остается одним из самых элегантных и широко используемых протоколов в распределенных системах.
Из этой подробной стать вы узнаете, как работает протокол NTP, почему важно точное время, как NTP вычисляет смещение часов и сетевую задержку с помощью четырех временных меток.
Кроме того, вы узнаете, почему NTP запрашивает время у нескольких серверов и как он синхронизирует часы, несмотря на несовершенство оборудования и непредсказуемость сетей.
Для начала разберемся, что такое NTP.
Что такое протокол сетевого времени (NTP)?
Сетевой протокол времени (Network Time Protocol, NTP) — это сетевой протокол, используемый для синхронизации часов компьютеров и других устройств в IP-сетях. Он оценивает задержку в сети, компенсирует дрейф часов и непрерывно корректирует системные часы, чтобы участвующие в процессе устройства имели общее представление о времени.
Вместо того чтобы просто запрашивать у сервера текущее время, протокол NTP обменивается несколькими временными метками, фильтрует неточные измерения и постепенно корректирует показания локальных часов. Это позволяет компьютерам в интернете синхронизироваться с точностью до миллисекунды в обычных условиях.
Почему важно Точное Время
Современные компьютеры используют точное время не только для отображения правильной даты и времени. Практически каждая распределенная система предполагает, что часы на всех участвующих в ней компьютерах достаточно синхронизированы.
Даже разница в несколько секунд может привести к сбоям при аутентификации, неправильному порядку ведения журнала, невыполнению запланированных задач или несогласованности данных на разных серверах.
Точное время необходимо для многих повседневных технологий, в том числе:
- Веб-безопасность: у HTTPS- и TLS-сертификатов есть срок действия. Если системные часы сильно отстают, браузеры и приложения могут отклонять действительные сертификаты.
- Системный журнал: администраторы используют временные метки для устранения неполадок и расследования инцидентов, связанных с безопасностью. Несинхронизированные часы затрудняют восстановление правильной последовательности событий в нескольких системах.
- Распределенные системы: базы данных, очереди сообщений и распределенные приложения часто используют временные метки для координации операций, обнаружения конфликтов и упорядочивания событий.
- Задания Cron Запланированные задачи:, автоматическое резервное копирование, обновление программного обеспечения и периоды технического обслуживания — все это зависит от точного системного времени.
- Протоколы аутентификации: такие механизмы безопасности, как Kerberos, используют временные метки для предотвращения атак с повторением. Большая разница во времени может привести к сбою запросов на аутентификацию.
- Финансовые системы: банкам, фондовым биржам и платежным системам требуются точные временные метки для аудита, соблюдения нормативных требований и упорядочивания транзакций.
- Мониторинг и наблюдаемость: платформы мониторинга сопоставляют метрики, журналы и трассировки, собранные с множества компьютеров. Единообразные временные метки позволяют определить первопричину сбоев.
Несмотря на то, что идеальная синхронизация в сети невозможна, протокол NTP обеспечивает достаточно близкое соответствие времени для большинства приложений, постоянно оценивая задержку в сети, корректируя дрейф часов и постепенно настраивая локальные системные часы.
Ключевой вывод: Точное время — основополагающее требование для надежных, безопасных и распределенных вычислений. Протокол NTP существует потому, что поддерживать синхронизацию часов в несовершенных сетях гораздо сложнее, чем просто запросить текущее время у другого компьютера.
Использует ли NTP атомные часы?
Не напрямую.
Большинство компьютеров никогда не взаимодействуют с атомными часами. Вместо этого время распределяется по иерархии.
Атомные часы / GPS-привязка │ ▼ Серверы Stratum 1 │ ▼ Серверы Stratum 2 │ ▼ Серверы Stratum 3 │ ▼ Ваша система Linux
Сервер Stratum 1 подключен к авторизованному источнику эталонного времени, например к GPS-приемнику или другому высокоточному источнику времени. Ваш компьютер обычно синхронизируется с серверами Stratum 2 или Stratum 3, которые получают время от серверов, находящихся выше в иерархии.
Ключевой вывод: Вашему компьютеру не нужны атомные часы. Ему нужна только надежная цепочка, ведущая к ним.
Смещение стрелок часов vs. Дрейф часов
Эти два термина часто путают.
Смещение стрелок часов — это разница между показаниями двух часов в определенный момент.
Например:
Computer A: 10:00:05 Computer B: 10:00:00 Clock skew = 5 seconds
Дрейф часов — это показатель того, насколько быстро часы отстают или спешат из-за несовершенства аппаратного генератора.
Даже высококачественные кварцевые генераторы имеют погрешность в несколько частей на миллион, из-за чего часы могут медленно расходиться, если их не синхронизировать.
Почему просто запросить время не получится
Представьте, что ваш компьютер отправляет такой запрос:
«Который час?»
Сервер отвечает:
«12:00:00»
Но к тому времени, когда ответ дойдет до вашего компьютера:
- Была ли задержка в сети 2 мс?
- 20 мс?
- 200 мс?
Без знания этой задержки одной временной метки недостаточно.
Это фундаментальная проблема синхронизации в распределенных системах.
Как NTP оценивает задержку в сети
Вместо обмена одной временной меткой NTP обменивается четырьмя.
Client Server
t1 ---------------------->
receives at t2
replies at t3
<----------------------- t4
Где:
- t1 = клиент отправляет запрос
- t2 = сервер получает запрос
- t3 = сервер отправляет ответ
- t4 = клиент получает ответ
Используя эти четыре временные метки, клиент вычисляет два ключевых значения:
Задержку при передаче данных в обе стороны
δ = (t4 − t1) − (t3 − t2)
Смещение часов
θ = ((t2 − t1) + (t3 − t4)) / 2
Эти уравнения позволяют клиенту оценить как задержку связи, так и разницу в показаниях его часов и часов сервера.
Как NTP выбирает лучший сервер времени
Одно из самых распространённых заблуждений о протоколе сетевого времени (Network Time Protocol, NTP) заключается в том, что он просто связывается с ближайшим или самым низкоуровневым сервером и доверяет времени, которое тот сообщает.
На самом деле NTP гораздо более осторожен.
Компьютерные сети по своей сути ненадежны. Пакеты данных могут задерживаться из-за перегруженности сети, серверы могут быть неправильно настроены, аппаратные часы могут давать погрешность, и даже высокоточные серверы времени могут временно выдавать неточные измерения из-за состояния сети.
Для обеспечения надежной синхронизации протокол NTP оценивает несколько источников времени и постоянно определяет, какой из них является наиболее надежным.
Шаг 1. Запрос к нескольким серверам времени
Вместо того чтобы полагаться на один сервер, клиент NTP обычно настраивается на связь с несколькими независимыми серверами времени.
Каждый сервер возвращает текущее время, что позволяет клиенту сравнивать несколько измерений, а не слепо доверять одному источнику.
Сервер A \ Сервер B -----> Ваш компьютер / Сервер C
Использование нескольких серверов повышает точность и отказоустойчивость. Если один сервер становится недоступным или начинает сообщать неправильное время, клиент может продолжить синхронизацию с оставшимися серверами.
Шаг 2. Измерение сетевой задержки и смещения часов
Для каждого сервера, с которым происходит обмен данными, NTP вычисляет два важных значения:
- Сетевая задержка: расчетное время, необходимое для передачи сообщений между клиентом и сервером.
- Смещение часов: расчетная разница между часами клиента и сервера.
Эти измерения помогают клиенту определить не только какое время сообщает сервер, но и насколько надежны эти измерения.
Сервер с очень большой или сильно варьирующейся сетевой задержкой, как правило, менее подходит для синхронизации, чем сервер со стабильным соединением с низкой задержкой.
Шаг 3. Отклонение ненадежных источников времени
Не каждому серверу можно доверять.
Сервер может сообщать неправильное время по следующим причинам:
- Сбои в работе оборудования
- Ошибки в конфигурации
- Чрезмерная перегрузка сети
- Временные проблемы с сетью
- Потеря синхронизации с вышестоящим источником времени
Предположим, клиент NTP получает следующие значения смещения часов:
| Сервер Времени | Предполагаемое Смещение |
|---|---|
| Сервер A | +8 мс |
| Сервер B | +9 мс |
| Сервер C | +10 мс |
| Сервер D | +430 мс |
Поскольку три сервера показывают практически одинаковое время, а один значительно отличается, NTP определяет сервер D как аномальный и исключает его из процесса синхронизации.
Этот процесс фильтрации помогает предотвратить ситуацию, когда из-за одного неисправного сервера клиент устанавливает неправильное системное время.
Шаг 4. Выбор лучшего источника синхронизации
После фильтрации ненадежных измерений NTP выбирает сервер, который с наибольшей вероятностью будет показывать точное и стабильное время.
Решение принимается на основе нескольких факторов, в том числе:
- Низкая задержка в сети
- Стабильность измерений с течением времени
- Стабильность тактовой частоты
- Уровень стратума
- Общее качество синхронизации
Распространено заблуждение, что сервер Stratum 1 — всегда лучший выбор.
На практике это не всегда так.
Например, расположенный поблизости сервер Stratum 2, подключенный к сети с низкой задержкой, может обеспечить более точную синхронизацию, чем удаленный сервер Stratum 1, до которого можно добраться через медленное или перегруженное интернет-соединение.
Таким образом, NTP оценивает общее качество каждого источника синхронизации, а не просто выбирает сервер с наименьшим номером стратума.
Почему это важно
Без этих механизмов выбора и фильтрации даже один неисправный сервер может привести к тому, что тысячи компьютеров будут использовать неправильное системное время.
Сравнивая несколько независимых источников времени, отбрасывая противоречивые измерения и постоянно переоценивая качество синхронизации, протокол NTP остается устойчивым даже в случае отказа отдельных серверов или сетевых каналов.
Ключевой вывод: NTP не просто выбирает ближайший сервер или сервер с самым низким стратумом. Он постоянно сравнивает несколько источников времени, отфильтровывает ненадежные измерения и синхронизируется с сервером, который обеспечивает наиболее точное и стабильное время в текущих сетевых условиях.
Почему NTP обычно не переводит часы
Предположим, ваш компьютер обнаружил, что его часы спешат на пять секунд.
При наивной реализации часы немедленно переведут назад.
К сожалению, это может вызвать проблемы:
- базы данных
- запланированные задания
- файлы журналов
- TLS-сертификаты
- распределенные приложения
Вместо этого NTP обычно корректирует часы.
Вместо того чтобы мгновенно менять отображаемое время, он слегка ускоряет или замедляет системные часы до тех пор, пока они не придут в соответствие с правильным временем.
Для устранения больших ошибок может потребоваться шаг, но в обычных условиях используется постепенная корректировка с помощью алгоритмов синхронизации часов.
Насколько точен протокол NTP?
В стабильной локальной сети (LAN) протокол NTP часто может синхронизировать часы с точностью до нескольких миллисекунд или даже лучше.
В общедоступном интернете точность обычно составляет десятки миллисекунд и зависит от задержки в сети, перегруженности, качества сервера и аппаратного обеспечения.
Может ли NTP работать без интернета?
Да. Для NTP не требуется подключение к интернету.
Организации часто развертывают собственную внутреннюю инфраструктуру NTP для обеспечения надежности и безопасности. Внутренний NTP-сервер может синхронизироваться с:
- GPS-приемник
- атомные эталонные часы
- другой доверенный внутренний NTP-сервер
В изолированных сетях, промышленных системах управления, военных структурах и исследовательских лабораториях обычно используются локальные NTP-серверы для поддержания точного времени без доступа к интернету.
Почему в распределенных системах синхронизация времени считается сложной задачей
На первый взгляд, архитектуры «ведущий-ведомый» вполне достаточно.
Мастер / | \ A B C
Однако в реальности возникает ряд сложностей:
- у каждого клиента разная задержка в сети
- задержка в сети постоянно меняется
- часы постоянно сбиваются
- серверы могут выходить из строя
- некоторые серверы могут показывать неправильное время
NTP решает эти проблемы, сочетая оценку задержки, статистическую фильтрацию, использование нескольких источников времени и непрерывную синхронизацию часов вместо слепого доверия к одному ведущему устройству.
Именно поэтому в учебниках синхронизации часов посвящены целые главы. Протокол решает гораздо больше задач, чем просто «спрашивает время у сервера».
Почему NTP не позволяет всем компьютерам показывать абсолютно одинаковое время?
Идеальная синхронизация в сети невозможна.
Каждый пакет NTP сталкивается с небольшими задержками из-за:
- Перегрузка сети
- Очереди маршрутизаторов
- Переменное время передачи
- Задержки обработки
- Дрейф часов на каждом компьютере
NTP сводит эти ошибки к минимуму с помощью статистической фильтрации и непрерывной корректировки часов, но полностью устранить неопределенность не может. Цель NTP не в идеальной синхронизации, а в том, чтобы часы были достаточно близки друг к другу для надежной работы.
Распространенные заблуждения о NTP
| Миф | Реальность |
|---|---|
| NTP напрямую использует атомные часы | Большинство клиентов синхронизируются через иерархию серверов. |
| Stratum 1 всегда является наиболее точным | Задержка в сети и качество сервера тоже имеют значение. |
| NTP просто запрашивает время у сервера | Он оценивает задержку и смещение по четырем временным меткам. |
| NTP обеспечивает идеальную синхронизацию часов | Это сводит к минимуму количество ошибок, но не устраняет неопределенность. |
| Чем ниже слой, тем выше точность | Ближайший сервер Stratum 2 или 3 может работать быстрее, чем удаленный сервер Stratum 1. |
Часто задаваемые вопросы
Что такое протокол сетевого времени (NTP)?
Network Time Protocol (NTP) — это сетевой протокол, который синхронизирует часы компьютеров и сетевых устройств в IP-сетях. Он оценивает задержку в сети, компенсирует дрейф часов и постоянно корректирует локальные часы, чтобы системы поддерживали единое представление о времени.
Как NTP синхронизирует компьютерные часы?
NTP обменивается четырьмя временными метками между клиентом и сервером времени. Используя эти временные метки, он оценивает задержку в сети при передаче данных в обе стороны и разницу между часами клиента и сервера (смещение часов). Затем клиент постепенно корректирует свои часы, чтобы минимизировать погрешность.
Использует ли Linux протокол NTP?
Да. Большинство современных дистрибутивов Linux синхронизируют время с помощью NTP-совместимого программного обеспечения, такого как chronyd (Chrony) или systemd-timesyncd. Оба этих инструмента автоматически поддерживают точное системное время, синхронизируясь с доверенными NTP-серверами, хотя Chrony обычно обеспечивает более высокую производительность в системах с нестабильным сетевым подключением или переменным дрейфом часов.
Использует ли NTP атомные часы?
Большинство компьютеров никогда не взаимодействуют напрямую с атомными часами. Вместо этого они синхронизируются с NTP-серверами, которые, в свою очередь, сверяются с высокоточными эталонными часами, такими как атомные часы или GPS-часы. Такая иерархия позволяет эффективно распределять точное время по всему интернету.
В чем разница между тактовым дрейфом и тактовым смещением?
Сдвиг часов — это разница между показаниями двух часов в определенный момент времени.
Дрейф тактовой частоты показывает, насколько быстро тактовая частота увеличивается или уменьшается из-за того, что аппаратный генератор не является абсолютно точным. Дрейф приводит к увеличению рассогласования с течением времени, если тактовые частоты не синхронизируются периодически.
Почему NTP использует четыре временные метки вместо одной?
по одной временной метке невозможно определить разницу между текущим временем и сетевой задержкой, необходимой для ее передачи. Обмениваясь четырьмя временными метками, протокол NTP оценивает как задержку связи, так и смещение часов, что позволяет добиться гораздо более точной синхронизации.
Что такое четыре временные метки NTP?
есть четыре временных метки:
- T1: Клиент отправляет запрос.
- T2: Сервер получает запрос.
- T3: Сервер отправляет ответ.
- T4: Клиент получает ответ.
Эти временные метки позволяют клиенту рассчитать задержку в сети и смещение тактовой частоты.
Почему NTP не меняет системные часы сразу?
Внезапное смещение системных часов назад или вперед может нарушить работу приложений, баз данных, запланированных задач и файлов журналов. Вместо этого NTP обычно корректирует часы, слегка изменяя их скорость, пока они не покажут правильное время. При больших ошибках может потребоваться пошаговое смещение часов.
Почему NTP запрашивает время у нескольких серверов?
сетевые задержки, аппаратные сбои и неправильные настройки сервера могут привести к неточностям в измерении времени. NTP сравнивает ответы от нескольких серверов, отфильтровывает ненадежные результаты и выбирает наиболее достоверный источник времени для повышения точности и отказоустойчивости.
Что такое сервер Stratum?
Stratum указывает на расстояние от сервера до авторитетных эталонных часов:
- Стратум 0: эталонные часы, такие как атомные часы или GPS-приемники (недоступны напрямую через сеть).
- Стратум 1: серверы, напрямую подключенные к эталонным часам Стратума 0.
- Стратум 2: серверы, синхронизированные с серверами Стратума 1.
- Стратум 3 и ниже: серверы, синхронизированные с серверами более высокого стратума.
Более низкий уровень обычно означает меньшее количество этапов синхронизации, но это не гарантирует автоматически более высокую точность. Важную роль также играют состояние сети и качество сервера.
В чем разница между протоколами NTP и PTP?
Протокол NTP предназначен для синхронизации времени в IP-сетях общего назначения и подходит для большинства серверов, настольных компьютеров и сетевых устройств.
Протокол точного времени (Precision Time Protocol, PTP) разработан для сред, требующих гораздо более высокой точности, часто в диапазоне микросекунд или наносекунд, например в сфере телекоммуникаций, промышленной автоматизации, научных исследований и высокочастотной торговли. Для PTP обычно требуется аппаратная временная метка и специализированная сетевая поддержка.
Что произойдет, если протокол NTP перестанет работать?
Если протокол NTP недоступен, системные часы продолжают работать с использованием локального аппаратного генератора. Поскольку ни один генератор не является абсолютно точным, часы постепенно отклоняются от правильного времени.
Со временем это может привести к:
- сбоям аутентификации (например, Kerberos)
- ошибкам при проверке HTTPS-сертификатов
- неправильным временным меткам в файлах журналов
- пропущенным запланированным задачам
- проблемам с сопоставлением событий на нескольких серверах
- несогласованности данных в распределенных системах
Чем дольше недоступна синхронизация, тем больше обычно становится погрешность часов.
Учитывает ли NTP сетевую задержку?
Да. Оценка сетевой задержки — одна из основных функций NTP.
Вместо того чтобы полагаться на одну временную метку, протокол NTP обменивается четырьмя временными метками между клиентом и сервером. Эти временные метки позволяют клиенту оценить как задержку при передаче данных по сети, так и разницу между его собственными часами и часами сервера.
Поскольку задержка в сети постоянно меняется, NTP выполняет этот процесс многократно и непрерывно корректирует свою оценку, не полагаясь на предположение о постоянстве задержки.
Какой протокол использует NTP — UDP или TCP?
NTP использует протокол пользовательских дейтаграмм (UDP), а не TCP.
Протокол UDP хорошо подходит для синхронизации времени, поскольку требует меньше ресурсов и позволяет избежать повторных передач, которые могут привести к дополнительным и непредсказуемым задержкам. Поскольку NTP периодически обменивается небольшими пакетами данных, периодическая потеря пакетов не оказывает существенного влияния, поскольку следующий цикл синхронизации быстро обновляет показания часов.
Какой сетевой порт использует протокол NTP?
NTP использует UDP-порт 123 для связи между клиентом и сервером.
При настройке брандмауэров или политик сетевой безопасности необходимо разрешить обмен данными через UDP-порт 123 между клиентами NTP и их серверами времени. Блокировка этого порта не позволяет системам синхронизировать свои часы.
В чем разница между Chrony и ntpd?
И Chrony, и ntpd реализуют протокол сетевого времени, но они оптимизированы для разных сред.
Chrony в целом обеспечивает:
- более быструю синхронизацию после запуска
- более высокую производительность на ноутбуках и виртуальных машинах
- улучшенную обработку прерывистых сетевых подключений
- более эффективную компенсацию для систем с нестабильным дрейфом часов
ntpd это традиционный демон NTP, который десятилетиями использовался в системах Unix и Linux. Несмотря на то, что он по-прежнему широко поддерживается, многие современные дистрибутивы Linux используют Chrony в качестве службы синхронизации времени по умолчанию из-за его повышенной производительности в реальных условиях.
Почему для NTP используется GPS?
спутники GPS непрерывно передают высокоточную информацию о времени, полученную с бортовых атомных часов.
GPS-приемник, подключенный к NTP-серверу, может использовать эти сигналы в качестве высокоточных эталонных часов. Это позволяет серверу работать как сервер времени Stratum 1 и передавать точное время другим системам в сети.
Хотя у многих GPS ассоциируется с навигацией, одной из его основных функций является точное распределение времени.
Что такое «прыгающая секунда»?
Дополнительная секунда — это поправка на одну секунду, которая периодически добавляется к всемирному координированному времени (UTC), чтобы синхронизировать его с неравномерным вращением Земли.
Поскольку вращение Земли не является идеально постоянным, время по Гринвичу иногда приходится корректировать, чтобы оно оставалось синхронизированным с астрономическим временем.
Протокол NTP включает в себя механизмы уведомления клиентов о приближающейся високосной секунде, чтобы они могли правильно выполнить корректировку.
Некоторые организации также используют такие методы, как размазывание скачков, при которых корректировка постепенно растягивается на более длительный период, чтобы избежать резких скачков на одну секунду, которые могут нарушить работу распределенных приложений.
Заключение
Один из важнейших уроков, которые можно извлечь из изучения распределенных систем, заключается в том, что время — удивительно сложная штука.
NTP работает не потому, что имеет доступ к атомным часам, а потому, что тщательно оценивает неопределенность, фильтрует ненадежные измерения и постоянно корректирует аппаратные недостатки.
Такое сочетание позволяет миллионам компьютеров поддерживать удивительно точную синхронизацию, несмотря на ненадежные сети и несовершенство аппаратного обеспечения.
Редактор: AndreyEx