Эта статья является кандидатом в добротные статьи

NTP: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Номинирование статьи в добротные с помощью гаджета QA (v. 3OlkLk7z)
Строка 551: Строка 551:
[[Категория:Интернет-протоколы]]
[[Категория:Интернет-протоколы]]
[[Категория:Часы]]
[[Категория:Часы]]
{{Кандидат в добротные статьи|28 октября 2015}}

Версия от 18:45, 28 октября 2015

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

NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Протокол был разработан Дэвидом Л. Миллсом[англ.], профессором Делавэрского университета, в 1985 году. Текущая версия — NTPv4. [1]

NTP, основанный на алгоритме Марзулло, использует для своей работы протокол UDP и включает такую особенность, как учёт времени передачи. Система NTP чрезвычайно устойчива к изменениям латентности среды передачи. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через Интернет, и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей. [2]

Наиболее широкое применение протокол NTP находит для реализации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режиме системной службы. В семействе операционных систем Microsoft Windows — это служба W32Time (модуль w32time.dll, выполняющийся в svchost.exe), Linux — сервис Ntpd.

Более простая реализация этого алгоритма известна как SNTP — простой протокол сетевого времени. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени. [3]

NTP не следует путать с daytime protocol RFC 867 или time protocol RFC 868 (win программа FG Time Sync).

Структура пакета

NTP пакет состоит из целого числа 32-битных слов.

Заголовок

Заголовок NTPv4
Отступ Октет 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 бита)
Целое число, представляющее версию протокола. Текущее значение: 4.

Режим (3 бита)
Целое число, представляющее режим. Значения представлены в таблице ниже.
Значение Описание
0 Зарезервировано
1 Симметричный активный режим
2 Симметричный пассивный режим
3 Клиент
4 Сервер
5 Широковещательный режим
6 Контрольное сообщение NTP
7 Зарезервировано для частного использования

Часовой слой (8 бит, англ. Stratum)
Целое число, представляещее часовой слой.
Значение Описание
0 Не определено или недопустим
1 Первичный сервер
2-15 Вторичный сервер, использующий NTP
16 Не синхронизировано
17-255 Зарезервировано

Интервал опроса (8 бит, англ. Poll)
Целое число со знаком, представляющее максимальный интервал между последовательными сообщениями. Значение равно двоичному логарифму секунд. Предлагаемые по умолчанию пределы на минимальные и максимальные опросы - 6 и 10, соответственно.

Точность (8 бит)
Целое число со знаком, представляющее точность системных часов. Значение равно двоичному логарифму секунд. Например, значению -18 будет соответствовать точность около 1 мкс.

Задержка (32 бита)
Общая время распространения сигнала в обе стороны в коротком формате NTP.

Дисперсия (32 бита)
Общая дисперсия для источника времени в коротком формате NTP.

Индентификатор источника (32 бита, англ. Reference ID)
Код источника синхронизации. Зависит от значения в поле Часовой слой.
Для слоя 0 - это четыре ASCII символа, называемые «kiss code», используются для отладки и мониторинга. Смотри ниже
Для слоя 1 - это четыре октета ASCII символов, дополненные слева нулями, назначенные для опорного времени. В таблице ниже представлен список, поддерживаемый IANA.[4]
ID Источник
GOES Геостационарный спутник системы экологического мониторинга и наблюдения
GPS Глобальная система местоопределения
GAL Система местоопределения «Галилео»
PPS Общий радиосигнал с длительностью импульса, равной 1 секунде[англ.]
IRIG Группа стандартизации в телеметрии[англ.], США
WWVB Низкочастотный радиопередатчик, 60 кГц, Форт Коллинз[англ.], Колорадо, США
DCF Низкочастотный радиопередатчик, 77.5 кГц, DCF77, Майнфлинген, ФРГ
HBG Низкочастотный радиопередатчик, 75 кГц, Прангинс[англ.], Швейцария
MSF Низкочастотный радиопередатчик, 60 кГц, Антхорн[англ.], Великобритания
JJY Низкочастотный радиопередатчик, 40 кГц, Фукушима, 60 кГц, Сага[англ.]*, Япония
LORC Среднечастотный радиопередатчик, 100 кГц, радионавигация, LORAN-C[англ.]
TDF Среднечастотный радиопередатчик, 162 кГц, Аллоуис[англ.], Франция
CHU Высокочастотный радиопередатчик, Оттава, Онтарио[англ.], Канада
WWV Высокочастотный радиопередатчик, Форт Коллинз, Колорадо[англ.], США
WWVH Высокочастотный радиопередатчик, Кауаи, Гавайи[англ.], США
NIST Телефонный модем Национального института стандартов и технологий США
ACTS Телефонный модем Национального института стандартов и технологий США
USNO Телефонный модем Национальной обсерватории США
PTB Телефонный модем Национального метрологического института Германии[англ.]
Для слоя 2 и выше - это индентификатор сервера и может быть использован для фиксирования временных петель. Если используется IPv4, то индентификатор представляет из себя четыре октета IP адреса. Если используется IPv6, то это первые четыре отктета MD5 хэша адреса. Стоит отметить, что при использовании IPv6 адресов для сервере с NTPv4 и клиента с NTPv3 индентификатор может принимать случайное значение, из-за чего временные петли могут быть не зафиксированы.

Время обновления (64 бита)
Время, когда система последний раз устанавливала или корректировала время. Формат NTP.

Начальное время (64 бита)
Время клиента, когда запрос отправляется серверу. Формат NTP.

Время приёма (64 бита)
Время сервера, когда запрос приходит от клиента. Формат NTP.

Время отправки (64 бита)
Время сервера, когда запрос отправляется клиенту. Формат NTP.

NTP-сообщение «Kiss-o'-Death»

Для слоя 0, который считается не определённым или не допустимым, поле Индентификатор источника может использоваться для доставки сообщений, которые выполняют роль данных о состоянии системы и управления доступом. Такие сообщения называются «Kiss-o'-Death»[заметка 1] (KoD), а доставляемые ими ASCII-данные называются «kiss codes» (коды «помощи»). Перечень принятых в настоящее время кодов «помощи» представлен в таблице ниже.[4]

Получатели 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 использует иерархическую, многоуровневую систему источников времени. Каждый уровень этой иерархии называется слоем, которым присваивается номер, начиная с 0 (нуль) в верхней части. Уровень слоя определяет расстояние от эталонных часов и существует, чтобы предотвратить циклические зависимости в иерархии. Важно отметить, что слой не является показателем качества и надежности, это значит, что источник слоя 3 может дать сигнал более высокого качества, чем некоторые источники слоя 2. В основном, слои служат для распределения нагрузки и обеспечения большей площади покрытия. Это определение слоя также отличается от понятия часовых слоёв, используемых в телекоммуникационных системах.

Эталон времени

Высокоточные приборы, служащие эталоном времени, такие как атомные часы, радиочасы или их аналоги. Обычно эти устройства не подключены к сети; вместо этого они подключены к локальному компьютеру (например, через интерфейс RS-232), либо это различные радиостанции и спутники.

Первичный сервер

Компьютеры, к которому напрямую подключены эталонные часы и принадлежат слою 1. Он выступает в качестве сетевого сервера времени и отвечает на NTP-запросы посылаемые вторичными серверами.

Вторичный сервер

Компьютеры (со слоя 2 по слой 15), которые получают время от серверов вышележащих слоёв, используя для этого протокол NTP. И вступают в качестве серверов для нижележащих слоёв. Обычно, компьютеры обращаются к нескольким серверам предыдущего слоя, и используя NTP-алгоритм, получают наилучший образец данных, отсеивая сервера с очевидно неверным временем. Компьютеры могут сравнивать свои данные с другими компьютерами своего слоя для получения стабильных и непротиворечивых данных на всех компьютерах слоя.

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

Время представляется в системе NTP 64-битным числом (8 байт), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 232 секунд, с теоретической точностью 2−32 секунды. Поскольку шкала времени в NTP повторяется каждые 232 секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 50 лет). Также следует учитывать, что время отсчитывается с полуночи 1 января 1900 года, а не с 1970, поэтому из времени NTP нужно вычитать почти 70 лет (с учётом високосных лет), чтобы корректно совместить время с Windows или Unix-системами.

Короткий формат времени
Бит 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 Доли
16

См. также

Заметки

  1. От «Kiss of Death», что в переводе значит «последний удар» или «последняя попытка».

Примечания

  1. 1 2 RFC 5905
  2. NTP FAQ. Проект NTP. Дата обращения: 25 октября 2015.
  3. RFC 4330
  4. 1 2 Параметры NTP. IANA (22 июня 2010). Дата обращения: 23 октября 2015.

Рекомендуемая литература

Ссылки

  • ВНИИФТРИ — национальный метрологический институт России — список серверов NTP Государственного эталона времени и частоты (ГЭВЧ) Российской Федерации
  • Network Time Protocol project — общественный проект по развитию протокола и служб NTP
  • NTP Public Services Project — проект публичных серверов NTP и рабочей группы IETF по протоколу NTP
  • pool.ntp.org — ресурс, представляющий большой виртуальный кластер NTP-серверов для миллионов пользователей. По состоянию на 08 сентября 2014 в pool.ntp.org зарегистрированно 3816 серверов. Есть возможность выбрать региональные сервера.
  • ntp.mobatime.ru — с 2005 года публичный бесплатный NTP-сервер Mobatime первого стратума (Россия, Санкт-Петербург).