Теория:Протоколы:SNTP

Материал из MikroTik Wiki

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 Время приёма ответа клиентом

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

d = (Т4 – T3) + (T2 – T1)
t = ((Т2 – Т1) + (Т3 – Т4)) / 2

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