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

27 байт добавлено ,  3 года назад
м
викификация, орфография
м (викификация, орфография)
|Спецификация = RFC 5905
}}
'''NTP''' ({{lang-en|Network Time Protocol}} — протокол сетевого времени) — [[сетевой протокол]] для синхронизации внутренних [[системные часы|часов]] [[компьютер]]а с использованием сетей с переменной [[латентность]]ю. Протокол был разработан {{нп5|Дэвид Л. Миллс|Дэвидом Л. Миллсом|en|David L. Mills}}, профессором [[Делавэрский университет|Делавэрского университета]], в 1985 году. Версия на [[2015 год]] год  — NTPv4<ref name="rfc5905">RFC 5905</ref>.
 
NTP, основанный на [[алгоритм Марзулло|алгоритме Марзулло]], использует для своей работы протокол [[UDP]] и учитывает время передачи. Система NTP чрезвычайно устойчива к изменениям латентности [[среда передачи данных|среды передачи]]. В версии 4 способен достигать точности 10 мс (1/100 с) при работе через [[Интернет]], и до 0,2 мс (1/5000 с) и лучше внутри локальных сетей<ref name="ntp-presice">{{cite web |url=http://www.ntp.org/ntpfaq/NTP-s-algo.htm#Q-ACCURATE-CLOCK |title=NTP FAQ |publisher=Проект NTP |accessdate=2015-10-25}}</ref>.
 
Наиболее широкое применение протокол NTP находит для синхронизации серверов точного времени. Для достижения максимальной точности предпочтительна постоянная работа программного обеспечения NTP в режиме [[Службы Windows|системной службы]]. В семействе операционных систем [[Microsoft Windows]] — это служба W32Time<ref>{{cite web|url=http://technet.microsoft.com/en-us/library/cc773061%28WS.10%29.aspx |title=Windows Time Service Technical Reference |publisher=technet.microsoft.com |date=2011-08-17 |accessdate=2011-09-19}}</ref>, [[Linux]] — сервис [[Ntpd]] <ref name="MillsBook">{{cite book|author=David L. Mills|title=Computer Network Time Synchronization: The Network Time Protocol|url=http://books.google.com/books?id=pdTcJBfnbq8C&pg=PA12|date=12 December 2010|publisher=Taylor & Francis|isbn=978-0-8493-5805-0}}</ref>.
 
Более простая реализация этого алгоритма известна как [[SNTP]] — простой протокол сетевого времени. Используется во встраиваемых системах и устройствах, не требующих высокой точности, а также в пользовательских программах точного времени<ref name="rfc4330">RFC 4330</ref>.
 
Данные в заголовке будут отличаться для различных режимов работы. Например, клиент в поля ''[[#Часовой слой|часовой слой]]'', ''[[#Идентификатор источника|идентификатор источника]]'', ''[[#Начальное время|начальное время]]'' и ''[[#Время приёма|время приёма]]'' должен записать нули.
 
=== Заголовок ===
{| class="wikitable" style="margin: 0 auto; text-align: center;"
|}
 
==== Индикатор коррекции ====
[[FileФайл:Синхронизации времени.svg|thumb|500px|right|Пример синхронизации времени, используя NTP]]
: Длина  — 2 бита, от {{lang-en|Leap Indicator}}.
: Целое число, показывающее предупреждение о [[секунда координации|секунде координации]].
:: {| class="wikitable"
 
==== Номер версии ====
: Длина  — 3 бита, от {{lang-en|Version Number}}.
: Целое число, представляющее версию протокола.
 
==== Режим ====
: Длина  — 3 бита, от {{lang-en|Mode}}.
: Целое число, представляющее режим. Значения представлены в таблице ниже.
:: {| class="wikitable"
 
==== Часовой слой ====
: Длина  — 8 бит, от {{lang-en|Stratum}}.
: Целое число, представляющее [[#Часовые слои|часовой слой]].
:: {| class="wikitable"
! Значение
! Описание
|-
 
==== Интервал опроса ====
: Длина  — 8 бит, от {{lang-en|Poll}}.
: Целое число со знаком, представляющее максимальный интервал между последовательными сообщениями. Значение равно двоичному логарифму секунд. Предлагаемые по умолчанию пределы на минимальные и максимальные опросы - — 6 и 10, соответственно.
 
==== Точность ====
: Длина  — 8 бит, от {{lang-en|Precision}}.
: Целое число со знаком, представляющее точность системных часов. Значение равно двоичному логарифму секунд. Например, значению -18−18 будет соответствовать точность около 1 мкс.
 
==== Задержка ====
: Длина  — 32 бита, от {{lang-en|Root Delay}}.
: Общее время распространения сигнала в обе стороны в [[#Короткий формат|коротком формате NTP]].
 
==== Дисперсия ====
: Длина  — 32 бита, от {{lang-en|Root Dispersion}}.
: Общая дисперсия для источника времени в [[#Короткий формат|коротком формате NTP]].
 
==== Идентификатор источника ====
: Длина  — 32 бита, от {{lang-en|Reference ID}}.
: Код источника синхронизации. Зависит от значения в поле [[#Часовой слой|Часовой слой]].
:: Для ''слоя 0'' - — это четыре [[ASCII]] символа, называемые «kiss code», используются для отладки и мониторинга. [[#NTP-сообщение «Kiss-o'-Death»|Смотри ниже]]
:: Для ''слоя 1'' - — это четыре октета ASCII символов, дополненные слева нулями, назначенные для опорного времени. В таблице ниже представлен список, поддерживаемый [[IANA]].<ref name="rid-iana">{{cite web |url=http://www.iana.org/assignments/ntp-parameters/ntp-parameters.xhtml |title=Параметры NTP |publisher=IANA |date=2010-06-22 |accessdate=2015-10-23}}</ref>
::: {| class="wikitable"
! ID
|-
| JJY
| {{нп5|JJY (радиостанция)|Низкочастотный радиопередатчик, 40 кГц, ФукушимаФукуcима, 60 кГц, Сага|en|JJY}}, Япония
|-
| LORC
| Телефонный модем {{нп5|Национальный метрологический институт Германии|Национального метрологического института Германии|en|Physikalisch-Technische Bundesanstalt}}
|}
:: Для ''слоя 2'' и выше - — это идентификатор сервера и может быть использован для фиксирования временных петель. Если используется [[IPv4]], то идентификатор представляет из себя четыре октета IP адреса. Если используется [[IPv6]], то это первые четыре октета [[MD5]] хэша адреса. Стоит отметить, что при использовании IPv6 адресов для сервере с NTPv4 и клиента с NTPv3 идентификатор может принимать случайное значение, из-за чего временные петли могут быть не зафиксированы.
 
==== Время обновления ====
: Длина  — 64 бита, от {{lang-en|Reference Timestamp}}.
: Время, когда система последний раз устанавливала или корректировала время. [[#Обычный формат|Формат NTP]].
 
==== Начальное время ====
: Длина  — 64 бита, от {{lang-en|Origin Timestamp}}.
: Время клиента, когда запрос отправляется серверу. [[#Обычный формат|Формат NTP]].
 
==== Время приёма ====
: Длина  — 64 бита, от {{lang-en|Receive Timestamp}}.
: Время сервера, когда запрос приходит от клиента. [[#Обычный формат|Формат NTP]].
 
==== Время отправки ====
: Длина  — 64 бита, от {{lang-en|Transmit Timestamp}}.
: Время сервера, когда запрос отправляется клиенту. [[#Обычный формат|Формат NTP]].
 
=== NTP-сообщение «Kiss-o'-Death» ===
 
Для '''слоя 0''', который считается неопределённым или недопустимым, поле ''[[#Идентификатор источника|Идентификатор источника]]'' может использоваться для доставки сообщений, которые выполняют роль данных о состоянии системы и управления доступом. Такие сообщения называются «Kiss-o'-Death»<ref name="kod" group="заметка">От «Kiss of Death», что в переводе значит «последний удар» или «последняя попытка».</ref> (KoD), а доставляемые ими ASCII-данные называются «kiss codes» (коды «помощи»). Перечень принятых в настоящее время кодов «помощи» представлен в таблице ниже<ref name="rid-iana" />.
 
[[Файл:Network Time Protocol servers and clients.svg|thumb|350px|right|Жёлтые стрелки обозначают аппаратное соединение; красные стрелки обозначают сетевое соединение.]]
 
NTP использует иерархическую сеть, где каждый уровень имеет свой номер, называемый слой. '''Слой 1'''  — первичные серверы, непосредственно синхронизирующиеся с национальными службами времени через спутник, радио или телефонный модем. '''Слой 2'''  — вторичные серверы, синхронизируются с первичными серверами, и  т. д. Как правило, клиенты и серверы NTP с относительно небольшим числом клиентов не синхронизируется с первичными серверами. Существует несколько сотен общественных вторичных серверов, работающих на более высоких слоях. Они являются предпочтительным выбором<ref name="ntp-warp">{{cite web |url=https://www.eecis.udel.edu/~mills/ntp/html/warp.html |title=How NTP Works |accessdate=2014-03-10}}</ref>.
 
== Формат времени ==
 
Время представляется в системе NTP 64-битным числом (8 [[байт]]), состоящим из 32-битного счётчика секунд и 32-битного счётчика долей секунды, позволяя передавать время в диапазоне 2<sup>32</sup> секунд, с теоретической точностью 2<sup>−32</sup> секунды. Поскольку шкала времени в NTP повторяется каждые 2<sup>32</sup> секунды (136 лет), получатель должен хотя бы примерно знать текущее время (с точностью 68 лет<ref>{{Cite web|url=https://www.eecis.udel.edu/~mills/time.html|title=NTP Timestamp Calculations|publisher=www.eecis.udel.edu|accessdate=2016-04-12}}</ref>). Также следует учитывать, что время отсчитывается с полуночи 1 января 1900 года, а не с 1970, поэтому из времени NTP нужно вычитать почти 70 лет (с учётом високосных лет), чтобы корректно совместить время с Windows или Unix-системами<ref name="ntp-warp" /><ref name="ntp-leap">{{cite web |url=https://www.eecis.udel.edu/~mills/leap.html |title=The NTP Timescale and Leap Seconds |accessdate=2012-05-12}}</ref>.
 
 
== Литература ==
 
* {{публикация|книга|автор=Семенов Ю.А.|заглавие=Telecommunication technologies - Телекоммуникационные технологии|часть=Сетевой протокол времени NTP|ссылка часть=http://book.itep.ru/4/44/ntp_4415.htm|год=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