SNTP — Википедия

SNTP
Название Simple Network Time Protocol
Уровень (по модели OSI) Прикладной
Семейство TCP/IP
Порт/ID 123/UDP
Назначение протокола Синхронизация времени
Спецификация RFC 4330

SNTP (англ. Simple Network Time Protocol) — протокол синхронизации времени по компьютерной сети. Является упрощённой реализацией протокола NTP. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени. SNTP протокол является частным случаем NTP протокола с некоторыми упрощениями. Таким образом SNTP клиент может обращаться к любому NTP-серверу, как к серверу SNTP.

Формат времени

[править | править код]

В протоколе SNTP используется одинаковый с протоколом NTP формат представления времени — 64-битное число, состоящее из 32-битного счётчика секунд и 32-битного счётчика долей секунд. Нулевое значение счётчика времени соответствует нулю часов 1 января 1900 г., 6 ч 28 м 16 с 7 февраля 2036 г. и т. д. Для успешного функционирования протокола необходимо, чтобы клиент знал своё время в пределах ±34 лет относительно времени сервера.

Формат сообщения

[править | править код]
Байт 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0—3 ИК НВ Режим Страта Интервал опроса Точность
4—7 Задержка
8—11 Дисперсия
12—15 Идентификатор источника
16—19 Время обновления
20—23
24—27 Начальное время
28—31
32—35 Время приёма
36—39
40—43 Время отправки
44—47
48—51 Ключ идентификации
52—55 Дайджест сообщения
56—59
60—63
64—67
  • Индикатор коррекции (ИК) показывает предупреждение о будущей вставке или удалении секунды в последней минуте суток:
ИК Значение
0 Нет коррекции
1 Последняя минута будет иметь 61 секунду
2 Последняя минута будет иметь 59 секунд
3 Время не синхронизировано
  • Номер версии (НВ) — текущее значение 4.
  • Режим:
Режим Значение
0 Зарезервирован
1 Симметричный активный
2 Симметричный пассивный
3 Клиент
4 Сервер
5 Широковещательный
6 Зарезервирован для управляющих сообщений NTP
7 Зарезервирован для частного использования
  • Страта — поле определено только для сообщений сервера:
Страта Значение
0 Поцелуй смерти (сервер не должен использоваться)
1 Первичная синхронизация
2-15 Вторичная синхронизация
16-255 Зарезервированно
  • Интервал опроса — беззнаковое целое, двоичная экспонента которого показывает максимальный интервал между последовательными сообщениями в секундах. Определено только для сообщений сервера, допустимые значения от 4 (16 с) до 17 (около 36 ч).
  • Точность — знаковое целое, двоичная экспонента которого показывает точность системных часов. Определено только для сообщений сервера, типичные значения от −6 до −20.
  • Задержка — знаковое число с фиксированной запятой, находящейся между 15 и 16 знаками, показывающее полное время распространения сигнала туда и обратно до источника синхронизации сервера времени. Определено только для сообщений сервера.
  • Дисперсия — беззнаковое число с фиксированной запятой, находящейся между 15 и 16 знаками, показывающее максимальную ошибку из-за нестабильности часов. Определено только для сообщений сервера.
  • Идентификатор источника — источник синхронизации сервера, строка для страты 0 и 1, IP-адрес для вторичных серверов. Определено только для сообщений сервера.
  • Время обновления — время, когда системные часы последний раз были установлены или скорректированны.
  • Начальное время, время приёма, время отправки определены ниже.
  • Ключ идентификации, дайджест сообщения — необязательные поля, используемые для аутентификации.

Работа клиента

[править | править код]

Клиент SNTP может работать в одноадресном, широковещательном и многоадресном режимах. В одноадресном режиме клиент посылает запрос (режим 3) и ждёт ответ (режим 4) от сервера. В широковещательном режиме клиент не посылает запросы, а ожидает сообщения (режим 5) от одного или нескольких серверов. В многоадресном режиме клиент посылает запрос (режим 3) по широковещательному адресу и ждёт ответ (режим 4) от одного или нескольких серверов. Первый ответивший сервер используется для последующих одноадресных запросов, остальные ответы игнорируются.

Поле Одно- многоадресный Широковещательный
Запрос Ответ
Индикатор коррекции 0 0—3 0—3
Номер версии 1—4 из запроса 1—4
Режим 3 4 5
Страта 0 0—15 0—15
Интервал опроса 0 игнорируется игнорируется
Точность 0 игнорируется игнорируется
Задержка 0 игнорируется игнорируется
Дисперсия 0 игнорируется игнорируется
Идентификатор источника 0 игнорируется игнорируется
Время обновления 0 игнорируется игнорируется
Начальное время 0 см. описание игнорируется
Время приёма 0 см. описание игнорируется
Время отправки см. описание см. описание см. описание
Аутентификация необязательно необязательно необязательно
Дайджест сообщения необязательно необязательно необязательно

В одноадресном и многоадресном режиме клиент заполняет поля «НВ», «Режим» и, необязательно, «Время отправки». Остальные поля заполняются нулями. Сервер, получая запрос от клиента, подготавливает своё сообщение для ответа, копируя поле «Время отправки», указанное в запросе клиента, в поле «Начальное время», а также заполняет поля «Время приёма» и «Время отправки». «Время прибытия» фиксируется клиентом в момент приёма ответа от сервера.

Наименование Код Когда генерируется
Начальное время Т1 Время отправки запроса клиентом (время у клиента, т.е. несинхронизированное)
Время приёма Т2 Время приёма запроса сервером
Время отправки Т3 Время отправки ответа сервером
Время прибытия Т4 Время приёма ответа клиентом (время у клиента, т.е. несинхронизированное)

Клиент, получая ответ от сервера, в качестве текущего времени устанавливает T4 + t, где t - сдвиг локального времени. Этот сдвиг учитывает задержку передачи пакетов, в связи с чем синхронизированное время клиента максимально приближенно ко времени сервера.

Сдвиг локального времени t и задержка передачи пакетов d вычисляется по формулам:

t = ((T2 - T1) + (T3 - T4)) / 2
d = (T4 - T1) - (T3 - T2)

Формула для сдвига t получается из следующего уравнения: T` = T4 + t = T3 + d/2

В широковещательном режиме клиент не получает информации о задержке распространения и коррекция не производится.

RFC 4330 — Simple Network Time Protocol (SNTP) Version 4