NTP
NTP | |
---|---|
Название | Network Time Protocol |
Уровень (помодели OSI) | Прикладной |
Семейство | TCP/IP |
Создан в | 1985 |
Порт/ID | 123/UDP |
Назначение протокола | Синхронизация часов |
Спецификация | RFC 5905 |
NTP(англ.Network Time Protocol— протокол сетевого времени) —сетевой протоколдля синхронизации внутреннихчасовкомпьютерас использованием сетей с переменнойлатентностью.Протокол был разработанДэвидом Л. Миллсом[англ.],профессоромДелавэрского университета,в 1985 году. Версия на2015 год— NTPv4[1].
NTP, основанный наалгоритме Марзулло,использует для своей работы протоколUDPи учитывает время передачи. Система NTP чрезвычайно устойчива к изменениям латентностисреды передачи.В версии 4 способен достигать точности 10 мс (1/100 с) при работе черезИнтернет,и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей[2].
Наиболее широкое применение протокол NTP находит для синхронизации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режимесистемной службы.В семействе операционных системMicrosoft Windows— это служба W32Time[3],вUNIX-подобных системах— демонNtpd[4]или chronyd.
Более простая реализация этого алгоритма известна какSNTP— простой протокол сетевого времени. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени[5].
Структура пакета
[править|править код]Структура пакета описана в RFC 5905[1].Пакет состоит из целого числа 32-битных слов.
Данные в заголовке будут отличаться для различных режимов работы. Например, клиент в полячасовой слой,идентификатор источника,начальное времяивремя приёмадолжен записать нули.
Заголовок
[править|править код]Отступ | Октет | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Октет | Бит | 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 | 0 | ИК | Версия | Режим | Часовой слой | Интервал опроса | Точность | ||||||||||||||||||||||||||
4 | 32 | Задержка | |||||||||||||||||||||||||||||||
8 | 64 | Дисперсия | |||||||||||||||||||||||||||||||
12 | 96 | Идентификатор источника | |||||||||||||||||||||||||||||||
16 | 128 | Время обновления | |||||||||||||||||||||||||||||||
20 | 160 | ||||||||||||||||||||||||||||||||
24 | 192 | Начальное время | |||||||||||||||||||||||||||||||
28 | 224 | ||||||||||||||||||||||||||||||||
32 | 256 | Время приёма | |||||||||||||||||||||||||||||||
36 | 288 | ||||||||||||||||||||||||||||||||
40 | 320 | Время отправки | |||||||||||||||||||||||||||||||
44 | 352 |
Индикатор коррекции
[править|править код]![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8.svg/500px-%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8.svg.png)
- Длина — 2 бита, отангл.Leap Indicator.
- Целое число, показывающее предупреждение осекунде координации.
Значение Описание 0 Нет предупреждения 1 Последняя минута дня содержит 61 секунду 2 Последняя минута дня содержит 59 секунд 3 Неизвестно (время не синхронизировано)
Номер версии
[править|править код]- Длина — 3 бита, отангл.Version Number.
- Целое число, представляющее версию протокола.
Режим
[править|править код]- Длина — 3 бита, отангл.Mode.
- Целое число, представляющее режим. Значения представлены в таблице ниже.
Значение Описание 0 Зарезервировано 1 Симметричный активный режим 2 Симметричный пассивный режим 3 Клиент 4 Сервер 5 Широковещательный режим 6 Контрольное сообщение NTP 7 Зарезервировано для частного использования
Часовой слой
[править|править код]- Длина — 8 бит, отангл.Stratum.
- Целое число, представляющеечасовой слой.
Значение Описание 0 Не определено или недопустим 1 Первичный сервер 2-15 Вторичный сервер, использующий NTP 16 Не синхронизировано 17-255 Зарезервировано
Интервал опроса
[править|править код]- Длина — 8 бит, отангл.Poll.
- Целое число со знаком, представляющее максимальный интервал между последовательными сообщениями. Значение равно двоичному логарифму секунд. Предлагаемые по умолчанию пределы на минимальные и максимальные опросы — 6 и 10, соответственно.
Точность
[править|править код]- Длина — 8 бит, отангл.Precision.
- Целое число со знаком, представляющее точность системных часов. Значение равно двоичному логарифму секунд. Например, значению −18 будет соответствовать точность около 1 мкс.
Задержка
[править|править код]- Длина — 32 бита, отангл.Root Delay.
- Общее время распространения сигнала в обе стороны вкоротком формате NTP.
Дисперсия
[править|править код]- Длина — 32 бита, отангл.Root Dispersion.
- Общая дисперсия для источника времени вкоротком формате NTP.
Идентификатор источника
[править|править код]- Длина — 32 бита, отангл.Reference ID.
- Код источника синхронизации. Зависит от значения в полеЧасовой слой.
- Дляслоя 0— это четыреASCIIсимвола, называемые «kiss code», используются для отладки и мониторинга.Смотри ниже
- Дляслоя 1— это четыре октета ASCII символов, дополненные слева нулями, назначенные для опорного времени. В таблице ниже представлен список, поддерживаемыйIANA[6].
- Дляслоя 2и выше — это идентификатор сервера и может быть использован для фиксирования временных петель. Если используетсяIPv4,то идентификатор представляет собой четыре октета IP адреса. Если используетсяIPv6,то это первые четыре октетаMD5хэша адреса. При использовании IPv6 адресов для сервера с NTPv4 и клиента с NTPv3 идентификатор может принимать случайное значение, из-за чего временные петли могут быть не зафиксированы.
Время обновления
[править|править код]- Длина — 64 бита, отангл.Reference Timestamp.
- Время, когда система последний раз устанавливала или корректировала время.Формат NTP.
Начальное время
[править|править код]- Длина — 64 бита, отангл.Origin Timestamp.
- Время клиента, когда запрос отправляется серверу.Формат NTP.
Время приёма
[править|править код]- Длина — 64 бита, отангл.Receive Timestamp.
- Время сервера, когда запрос приходит от клиента.Формат NTP.
Время отправки
[править|править код]- Длина — 64 бита, отангл.Transmit Timestamp.
- Время сервера, когда запрос отправляется клиенту.Формат NTP.
NTP-сообщение «Kiss-o'-Death»
[править|править код]Дляслоя 0,который считается неопределённым или недопустимым, полеИдентификатор источникаможет использоваться для доставки сообщений, которые выполняют роль данных о состоянии системы и управления доступом. Такие сообщения называются «Kiss-o'-Death»[заметка 1](KoD), а доставляемые ими ASCII-данные называются «kiss codes» (коды «помощи»). Перечень принятых в настоящее время кодов «помощи» представлен в таблице ниже[6].
Получатели KoD-сообщений обязаны их проверить и выполнить следующие действия[1]:
- При получении кодовых комбинацийDENYиRSTRклиент обязан разорвать виртуальные соединения с данным сервером времени и прекратить передачу сообщений этому серверу.
- При получении кодовой комбинацииRATEклиент обязан незамедлительно снизить свой интервал опроса этого сервера и продолжать его уменьшать каждый раз при получении этой кодовой комбинации.
- При получении кодовой комбинации начинающейся с ASCII-символаХ,предназначенной для проведения экспериментальных исследований и последующих усовершенствований, она должна быть проигнорирована, если она не распознаётся.
- Все другие кодовые комбинации и KoD-сообщения, не определённые данным протоколом, уничтожаются после их поверки.
Код | Описание |
---|---|
ACST | Виртуальное соединение установлено одноадресным сервером |
AUTH | Аутентификация сервером завершилась отказом |
AUTO | Autokey-последовательность некорректна |
BCST | Виртуальное соединение установлено широковещательным сервером |
CRYP | Криптографическая аутентификация или идентификация завершились отказом |
DENY | Удалённый сервер отказал в доступе |
DROP | Потеря удаленного сервера времени в симметричном режиме |
RSTR | Отказ в доступе вследствие локальной стратегии безопасности |
INIT | Виртуальное соединение с первого раза не установлено |
MCST | Виртуальное синхросоединение установлено динамически обнаруженным сервером |
NKEY | Ключ не найден (либо он никогда ранее не загружался, либо он является ненадёжным) |
RATE | Скорость превышена. Сервер временно запретил доступ, так как клиент превысил порог скорости |
RMOT | Изменение виртуального соединения со стороны удалённого IP-узла, использующего NTP-протокол напрямую |
STEP | Произошла итерация по изменению системного времени, виртуальное синхросоединение не установлено |
Часовые слои
[править|править код]![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Network_Time_Protocol_servers_and_clients.svg/350px-Network_Time_Protocol_servers_and_clients.svg.png)
NTP использует иерархическую сеть, где каждый уровень имеет свой номер, называемый слой (англ.stratum).Слой 1— первичные серверы, непосредственно синхронизирующиеся с национальными службами времени через спутник, радио или телефонный модем.Слой 2— вторичные серверы, синхронизируются с первичными серверами, и т. д. Как правило, клиенты и серверы NTP с относительно небольшим числом клиентов не синхронизируется с первичными серверами. Существует несколько сотен общественных вторичных серверов, работающих на более высоких слоях. Они являются предпочтительным выбором[7].
Формат времени
[править|править код]Время представляется в системе NTP 64-битным числом (8байт), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 232секунд, с теоретической точностью 2−32секунды. Поскольку шкала времени в NTP повторяется каждые 232секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 68 лет[8]). Также следует учитывать, что время отсчитывается с полуночи 1 января 1900 года, а не с 1970, поэтому из времени NTP нужно вычитать 70 лет (с учётом високосных лет), чтобы корректно совместить время с Windows или Unix-системами[7][9].
Бит | 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 | Секунды | Доли секунд |
Бит | 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 | Секунды | |||||||||||||||||||||||||||||||
4 | Доли секунд |
Бит | 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 | Номер эры | |||||||||||||||||||||||||||||||
4 | Отступ эры | |||||||||||||||||||||||||||||||
8 | Доли | |||||||||||||||||||||||||||||||
12 |
См. также
[править|править код]Заметки
[править|править код]- ↑От «Kiss of Death», что в переводе значит «последний удар» или «последняя попытка».
Примечания
[править|править код]- ↑123RFC 5905
- ↑NTP FAQ .Проект NTP. Дата обращения: 25 октября 2015.Архивировано6 сентября 2011 года.
- ↑Windows Time Service Technical Reference .technet.microsoft.com (17 августа 2011). Дата обращения: 19 сентября 2011.Архивировано6 сентября 2011 года.
- ↑David L. Mills.Computer Network Time Synchronization: The Network Time Protocol(англ.).—Taylor & Francis,2010. —ISBN 978-0-8493-5805-0.Архивировано18 июля 2014 года.
- ↑RFC 4330
- ↑12Параметры NTP .IANA (22 июня 2010). Дата обращения: 23 октября 2015.Архивировано4 марта 2016 года.
- ↑12How NTP Works .Дата обращения: 10 марта 2014.Архивировано20 июня 2014 года.
- ↑NTP Timestamp Calculations .www.eecis.udel.edu. Дата обращения: 12 апреля 2016.Архивировано26 октября 2015 года.
- ↑The NTP Timescale and Leap Seconds .Дата обращения: 12 мая 2012.Архивировано15 мая 2012 года.
Литература
[править|править код]- Семенов Ю.А.Сетевой протокол времени NTP// Telecommunication technologies - Телекоммуникационные технологии. — 2014.
- Миллс, Дэвид Л.Сличение времени в компьютерных сетях. Протокол сетевого времени на Земле и в космосе. — Киев: Wircom, 2011. — С. 464. —ISBN 978-966-97191-0-2.
- Другие версии RFC:RFC 778,RFC 891,RFC 956,RFC 958,RFC 1305,RFC 2030,RFC 4330
Ссылки
[править|править код]- NTP: The Network Time Protocol(англ.).Network Time Foundation. — Общественный проект по развитию протокола и служб NTP. Дата обращения: 29 сентября 2008.Архивировано5 сентября 2017 года.
- Welcome to the NTP.Servers Web(англ.).Network Time Foundation (18 апреля 2013). — Проект публичных серверов NTP и рабочей группыIETFпо протоколу NTP. Дата обращения: 6 декабря 2010.Архивировано8 декабря 2010 года.
- NTP Pool Project .— Общественный ресурс — кластер публичных NTP-серверов, поддерживаемых волонтёрами. Дата обращения: 7 марта 2019.Архивировано22 апреля 2009 года.
- NTP Server Online Tester .Server Test.— Онлайн-инструмент для проверки доступности сервера в Интернете. Дата обращения: 7 марта 2019.Архивировано7 марта 2019 года.
- Услуги NTP серверов .ВНИИФТРИ.— Серверы точного времени Главного метрологического центра государственной службы времени, частоты и определения параметров вращения Земли Всероссийского научно-исследовательского института Физико-технических и радиотехнических измерений. Дата обращения: 1 марта 2021.Архивировано24 января 2021 года.
Эта статья входит в числодобротных статейрусскоязычного раздела Википедии. |