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