NTP
NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Протокол был разработан Дэвидом Л. Миллсом[en], профессором Делавэрского университета, в 1985 году. Версия на 2015 год — NTPv4[1].
NTP | |
---|---|
Название | Network Time Protocol |
Уровень (по модели OSI) | Прикладной |
Семейство | TCP/IP |
Создан в | 1985 |
Порт/ID | 123/UDP |
Назначение протокола | Синхронизация часов |
Спецификация | RFC 5905 |
NTP, основанный на алгоритме Марзулло, использует для своей работы протокол UDP и учитывает время передачи. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей[2].
Наиболее широкое применение протокол NTP находит для синхронизации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режиме системной службы. В семействе операционных систем Microsoft Windows — это служба W32Time[3], Linux — демон 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 |
Индикатор коррекцииПравить
- Длина — 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 | Произошла итерация по изменению системного времени, виртуальное синхросоединение не установлено |
Часовые слоиПравить
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», что в переводе значит «последний удар» или «последняя попытка».
ПримечанияПравить
- ↑ 1 2 3 RFC 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 на Wayback Machine
- ↑ RFC 4330
- ↑ 1 2 Параметры NTP (неопр.). IANA (22 июня 2010). Дата обращения: 23 октября 2015. Архивировано 4 марта 2016 года.
- ↑ 1 2 How 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 года.
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |