| NTP | |
|---|---|
| Название | Network Time Protocol |
| Уровень (по модели OSI) | Прикладной |
| Семейство | TCP/IP |
| Создан в | 1985 |
| Порт/ID | 123/UDP |
| Назначение протокола | Синхронизация часов |
| Спецификация | RFC 5905 |
NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Протокол был разработан Дэвидом Л. Миллсом[en], профессором Делавэрского университета, в 1985 году. Версия на 2015 год — NTPv4[1].
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 | ||||||||||||||||||||||||||||||||

| Значение | Описание |
|---|---|
| 0 | Нет предупреждения |
| 1 | Последняя минута дня содержит 61 секунду |
| 2 | Последняя минута дня содержит 59 секунд |
| 3 | Неизвестно (время не синхронизировано) |
| Значение | Описание |
|---|---|
| 0 | Зарезервировано |
| 1 | Симметричный активный режим |
| 2 | Симметричный пассивный режим |
| 3 | Клиент |
| 4 | Сервер |
| 5 | Широковещательный режим |
| 6 | Контрольное сообщение NTP |
| 7 | Зарезервировано для частного использования |
| Значение | Описание |
|---|---|
| 0 | Не определено или недопустим |
| 1 | Первичный сервер |
| 2-15 | Вторичный сервер, использующий NTP |
| 16 | Не синхронизировано |
| 17-255 | Зарезервировано |
Для слоя 0, который считается неопределённым или недопустимым, поле Идентификатор источника может использоваться для доставки сообщений, которые выполняют роль данных о состоянии системы и управления доступом. Такие сообщения называются «Kiss-o'-Death»[заметка 1] (KoD), а доставляемые ими ASCII-данные называются «kiss codes» (коды «помощи»). Перечень принятых в настоящее время кодов «помощи» представлен в таблице ниже[6].
Получатели KoD-сообщений обязаны их проверить и выполнить следующие действия[1]:
| Код | Описание |
|---|---|
| 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 | ||||||||||||||||||||||||||||||||
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .