Подтвердить что ты не робот

Как работает протокол сетевого времени?

Запись в Википедии не содержит подробностей и RFC слишком плотный. Кто-нибудь здесь знает, как обычно работает NTP?

Я ищу общий обзор, объясняющий, как алгоритм Марзулло (или его модификация) используется для перевода временной метки на сервер в метку времени на клиенте. В частности, какой механизм используется для обеспечения точности, которая в среднем составляет 10 мс, когда эта связь происходит по сети с сильно изменяемой задержкой, что часто в несколько раз больше.

4b9b3361

Ответ 1

(Это не алгоритм Марзулло, который используется только высокоуровневыми серверами для получения точного времени с использованием нескольких источников. Так обычный клиент получает время, используя только один сервер)

Прежде всего, отметки времени NTP хранятся в секундах с 1 января 1900 года. 32 бит для количества секунд и 32 бит для долей секунды.

Синхронизация сложна. Клиент сохраняет метку времени (например, A) (все эти значения находятся в секундах), когда он отправляет запрос. Сервер отправляет ответ, состоящий из "истинного" времени, когда он получил пакет (вызов этого X) и "истинного" времени, когда он будет передавать пакет (Y). Клиент получит этот пакет и зарегистрирует время его получения (B).

NTP предполагает, что время, проведенное в сети, одинаково для отправки и получения. В течение достаточно продолжительных интервалов времени в нормальных сетях это должно быть так. Мы знаем, что общее время прохождения от отправки запроса до получения ответа составляло B-A секунд. Мы хотим удалить время, затрачиваемое сервером на обработку запроса (Y-X), оставив только время обхода сети, чтобы B-A- (Y-X). Поскольку мы предполагаем, что время прохождения сети является симметричным, количество времени, которое потребовалось для получения ответа от сервера клиенту, - [B-A- (Y-X)]/2. Таким образом, мы знаем, что сервер отправил свой ответ в момент времени Y, и нам потребовался [B-A- (Y-X)]/2 секунды, чтобы получить ответ.

Итак, истинное время, когда мы получили ответ, равно Y + [B-A- (Y-X)]/2 секунды. И то, как работает NTP.

Пример (целые секунды, чтобы упростить математику):

  • Клиент отправляет запрос в "неправильное" время 100. A = 100.
  • Сервер получает запрос при "истинном" времени 150. X = 150.
  • Сервер медленный, поэтому он не отправляет ответ до "истинного" времени 160. Y = 160.
  • Клиент получает запрос в "неправильное" время 120. B = 120.
  • Клиент определяет время, потраченное на сеть, - B-A- (Y-X) = 120-100- (160-150) = 10 секунд
  • Клиент предполагает, сколько времени потребовалось для получения ответа от сервера клиенту, 10/2 = 5 секунд.
  • Клиент добавляет это время к "истинному" времени, когда сервер отправил ответ, чтобы оценить, что он получил ответ в "истинное" время 165 секунд.
  • Клиент теперь знает, что ему нужно добавить 45 секунд к своим часам.

В правильной реализации клиент работает как демон, все время. В течение длительного периода времени со многими образцами NTP может фактически определить, медленны или быстрые компьютерные часы, и автоматически настраивать их соответствующим образом, позволяя ему сохранять достаточно хорошее время, даже если оно позже отключено от сети. Вместе с усреднением ответов с сервера и применением более сложного мышления вы можете получить невероятно точное время.

Там, конечно, более правильная реализация, чем та, но суть ее.

Ответ 2

  • Клиент NTP запрашивает все свои NTP серверы в какое время.
  • Различные серверы разные ответы, с разными уровнями доверия, поскольку запросы будут принимать разные суммы времени для поездки от клиента до сервер и обратно.
  • Алгоритм Марзулло найдет наименьший диапазон значений времени, соответствующих все предоставленные ответы.
  • Вы можете быть более уверенными в точности ответа от этого алгоритма, чем на любом одном сервере времени, потому что пересечение нескольких наборов, скорее всего, будет содержать меньше элементов, чем любой отдельный набор.
  • Чем больше запросов вы запрашиваете, тем больше ограничений у вас будет на возможном ответе, и тем точнее будут ваши часы.

Ответ 3

ЕСЛИ вы используете временные метки для принятия решения о заказе, определенные времена могут не быть назначены. Вместо этого вы могли бы использовать lamport clocks, которые меньше страдают, чем сетевая синхронизация. Он может рассказать вам, что получилось "первым", но не точная разница во времени. Не важно, что на самом деле говорят компьютерные часы.

Ответ 4

Фокус в том, что некоторые пакеты бывают быстрыми, а быстрые пакеты дают вам ограниченные ограничения на время.