Опубликован: 10.10.2007 | Уровень: специалист | Доступ: платный
Лекция 7:

Сетевой протокол времени NTP

Общие переменные

Следующие переменные являются общими для двух или более систем, партнеров и классов пакетов. Когда необходимо отличить общие переменные с идентичными именами, вводится идентификатор переменной.

Адрес партнера ( peer.peeraddr, pkt.peeraddr ), порт партнера ( peer.peerport, pkt.peerport ). 32-битный IP-адрес и 16-битный номер порта партнера.

Адрес ЭВМ ( peer.hostaddr, pkt.hostaddr ), порт ЭВМ ( peer.hostport, pkt.hostport ). 32-битный IP-адрес и 16-битный номер порта ЭВМ. Эти переменные включаются в переменные состояния для поддержки мультиинтерфейсных систем.

Индикатор приращения ( sys.leap, peer.leap, pkt.leap ) — это двухбитный код предупреждения о включении дополнительных секунд во временную шкау NTP. Эти биты устанавливаются до 23:59 дня добавления и сбрасываются после 00:00 следующего дня. В результате день, для которого проведена эта процедура, окажется длиннее или короче на одну секунду. Для вторичных серверов эти биты устанавливаются протоколом NTP. Биты 0 и 1 ( LI ) принимают значения, перечисленные в таблице 7.1.

Таблица 7.1. Значения кодов индикатора LI
LI Величина Значение
00 0 предупреждения нет
01 1 последняя минута содержит 61 секунду
10 2 последняя минута содержит 59 секунд
11 3 аварийный сигнал (часы не синхронизованы)

Во всех случаях, за исключением аварийного сигнала (alarm = 112), протокол NTP никак не изменяет эти биты, а только передает их программам преобразования времени, которые не являются частью протокола. Аварийная ситуация возникает, когда по какой-либо причине локальные часы оказываются не синхронизованными. Это может случиться в ходе инициализации системы или в случае, когда первичные часы оказываются недоступны в течение длительного времени.

Режим ( peer.mode, pkt.mode ) — это целое 3-битовое число, обозначающее код режима ассоциации, который может принимать значения, приведенные в таблице 7.2.

Таблица 7.2. Значения кодов Режим
Режим Значение
0 Зарезервировано
1 симметричный активный
2 симметричный пассивный
3 Клиент
4 Сервер
5 широковещательный
6 для управляющих сообщений NTP
7 зарезервировано для частного использования

Слой ( sys.stratum, peer.stratum, pkt.stratum ) — это целое число, указывающее код слоя локальных часов, который может принимать значения, приведенные в таблице 7.3.

Таблица 7.3. Значения кодов слой
Слой Значение
0 Не специфицирован или недоступен
1 Первичный эталон (например, радио-часы)
2-15 Вторичный эталон (через NTP или sntp)
16-255 Зарезервировано на будущее

Для целей сравнения значение нуль для кода слоя считается выше, чем любая другая величина. Заметим, что максимальное значение целого, закодированное как пакетная переменная, ограничено параметром ntp.maxstratum.

Период обмена ( sys.poll, peer.hostpoll, peer.peerpoll, pkt.poll ). Это целая переменная со знаком, которая указывает минимальный интервал между передаваемыми сообщениями, измеренный в секундах и представленный как степень 2. Например, значение 6 указывает на минимальный интервал в 64 секунды.

Точность ( sys.precision, peer.precision, pkt.precision ). Это целая переменная со знаком, обозначающая точность часов в секундах и выраженная как ближайшая степень числа 2. Значение должно быть округлено в большую сторону до ближайшего значения степени 2, например, сетевой частоте 50-Гц (20 мс) или 60-Гц (16.67 мс) будет поставлена в соответствие величина -5 (31.25 мс), в то время как кварцевой частоте 1000-Гц (1 мс) будет поставлено в соответствие значение -9 (1.95 мс).

Базовая задержка ( sys.rootdelay, peer.rootdelay, pkt.rootdelay ). Это число с фиксированной запятой со знаком, которое указывает на величину полной циклической задержки (RTT) до первичного эталона частоты, выраженной в секундах.

Базовая дисперсия ( sys.rootdispersion, peer.rootdispersion, pkt.rootdispersion ). Это число с фиксированной запятой больше нуля, указывающее на максимальное значение временной ошибки по отношению к первичному эталону в секундах.

Идентификатор эталонных часов ( sys.refid, peer.refid, pkt.refid ). Это 32-битовый код, идентифицирующий конкретные эталонные часы. В случае слоя 0 (не специфицирован) или слоя 1 (первичный эталонный источник), это 4-октетная ASCII-строка, выровненная по левому краю и дополненная при необходимости нулями, например:

Таблица 7.4. Коды идентификаторов часов
Слой Код Значение
0 dcn Протокол маршрутизации dcn
0 dts Цифровая служба времени (digital time service)
0 nist Общий модем nist
0 tsp Временной протокол tsp
1 atom Атомные часы (калиброванные)
1 vlf vlf-радио (omega, и пр.)
1 callsign Общее радио
1 gps gps УВЧ позиционирование спутников
1 lorc loran-c радионавигация
1 wwvb Радио wwvb НЧ (диапазон 5)
1 goes Спутник goes УВЧ (диапазон 9)
1 wwv Радио wwv ВЧ (диапазон 7)

В случае слоя 2 и выше (вторичный эталон) — это 4-октетный IP-адрес партнера, выбранного для синхронизации.

Эталонная временная метка ( sys.reftime, peer.reftime, pkt.reftime ) — локальное время в формате временных меток, соответствующее моменту последней коррекции показаний часов. Если локальные часы не были синхронизованы, переменная содержит нуль.

Базовая временная метка ( peer.org, pkt.org ) — локальное время в формате временных меток, соответствующее моменту посылки последнего NTP -сообщения. Если партнер недостижим, переменная принимает нулевое значение.

Временная метка получения ( peer.rec, pkt.rec ) — локальное время в формате временных меток, которое соответствуюет моменту прихода последнего NTP -сообщения, полученного от партнера. Если партнер недостижим, переменная принимает нулевое значение.

Временная метка передачи ( peer.xmt, pkt.xmt ) — локальное время в формате временных меток, соответствующее моменту отправки NTP -сообщения.

Системные переменные

Следующие переменные используются операционной системой для синхронизации локальных часов.

Переменная локальные часы ( sys.clock ) содержит показание локальных часов в формате временных меток. Локальное время получается от аппаратных часов конкретной ЭВМ и дискретно увеличивается с конструктивно заданными приращениями.

Переменная Базовые часы ( sys.peer ) представляет собой селектор, идентифицирующий используемый источник синхронизации. Обычно это указатель на структуру, содержащую переменные партнера. Значение нуль указывает, что в настоящее время источник синхронизации отсутствует.

Переменные партнера

Ниже перечислены все переменные партнера, которые используются для управления и реализации измерительных процедур.

Бит конфигурации ( peer.config ) — бит, индицирующий, что ассоциация была сформирована на основе конфигурационной информации и не должна быть расформирована, когда партнер становится недоступен.

Временная метка актуализации ( peer.update ) — локальное время в формате временной метки, отмечающее момент, когда было получено последнее NTP сообщение. Переменная используется для вычисления дисперсии временного сдвига.

Регистр достижимости ( peer.reach ) — сдвиговый регистр битов ntp.window, используемых для определения статуса достижимости партнера. Ввод данных производится со стороны младших бит (справа). Партнер считается достижимым, если как минимум один бит этого регистра равен 1.

Таймер партнера ( peer.timer ) — целочисленный счетчик, используемый для управления интервалом между последовательно посылаемыми NTP -сообщениями. После установки значения счетчика его содержимое уменьшается на 1 (1сек), пока не достигнет нуля. При этом вызывается процедура передачи. Заметим, что работа этого таймера не должна зависеть от локальных часов.

Пакетные переменные

Номер версии ( pkt.version ) — целое число, индицирующее номер версии отправителя. NTP -сообщения всегда посылаются с текущим значением версии ntp.version и будут восприняты лишь при условии совпадения кодов версии ( ntp.version ). Исключения допускаются лишь при смене номера версии.

Переменные фильтра часов

Когда используются фильтры и алгоритмы отбора, дополнительно привлекаются следующие переменные состояния.

Регистр фильтра ( peer.filter ) — сдвиговый регистр каскадов ntp.shift, где каждый каскад запоминает значения измеренной задержки, смещения и вычисленной дисперсии, соответствующих одному наблюдению. Эти три параметра вводятся со стороны старших разрядов и сдвигаются в направлении младших разрядов (направо). При получении результатов нового наблюдения старые результаты теряются.

Счетчик корректных данных ( peer.valid ) — целочисленный счетчик, указывающий на корректные образцы, остающиеся в регистре фильтра. Он используется для определения состояния доступности и для управления увеличением и уменьшением периода рассылки сообщений.

Смещение ( peer.offset ) — число с фиксированной запятой со знаком, индицирующее значение смещение часов партнера по отношению к локальным часам в секундах.

Задержка ( peer.delay ) — число с фиксированной запятой со знаком, индицирующее полную циклическую задержку (RTT) часов партнера по отношению к локальным часам с учетом времени распространения сообщения и отклика в сети в секундах. Заметим, что переменная может принимать как положительное, так и отрицательное значение в зависимости от точности часов и накопившейся ошибки смещения.

Дисперсия ( peer.dispersion ) — число с фиксированной запятой, индицирующее максимальную ошибку часов партнера по отношению к локальным часам с учетом сетевой задержки в секундах. Допускаются только значения больше нуля.

Параметры

Ниже описаны параметры для всех реализаций, работающих в сети Интернет. Необходимо договориться относительно значений этих параметров для того, чтобы исключить ненужную избыточность и стабилизировать ассоциации партнеров. Приведенные параметры применимы для всех ассоциаций.

Номер версии ( ntp.version ) — текущий номер версии NTP (3).

Порт NTP ( ntp.port ) — стандартный номер порта (123), присвоенный протоколу NTP.

Максимальный номер слоя ( ntp.maxstratum ) — максимальный номер слоя, который может быть использован при кодировании пакетной переменной. Этот параметр обычно интерпретируется как определение бесконечности (недостижимости для протокола маршрутизации в субсети).

Максимальный возраст часов ( ntp.maxage ) — максимальный интервал в секундах, в течение которого эталонные часы будут рассматриваться как корректные после последней сверки.

Максимальный сбой ( ntp.maxskew ) — максимальная ошибка смещения, связанная со сбоем локальных часов за время ntp.maxage, в секундах. Отношение ntp.maxskew к ntp.maxage интерпретируется как максимальный сбой, вызванный всей совокупностью факторов.

Максимальное расстояние ( ntp.maxdistance ) — максимально допустимое расстояние между партнерами при синхронизации с использованием алгоритма отбора.

Минимальный период рассылки ( ntp.minpoll ) — минимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.

Максимальный период рассылки ( ntp.maxpoll ) — максимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.

Минимум избранных часов ( ntp.minclock ) — минимальное число партнеров, необходимое для синхронизации (при использовании алгоритма отбора).

Максимум избранных часов> ( ntp.maxclock ) — максимальное число партнеров, необходимое для организации отбора (при использовании алгоритма селекции).

Минимальная дисперсия ( ntp.mindisperse ) — минимальное значение приращения дисперсии для каждого из слоев в секундах (при использовании алгоритма фильтрации).

Максимальная дисперсия ( ntp.maxdisperse ) — максимальная дисперсия в секундах с учетом потерянных данных (при использовании алгоритма фильтрации).

Размер регистра доступности ( ntp.window ) — размер регистра доступности ( peer.reach ) в битах.

Размер фильтра ( ntp.shift ) — размер сдвигового регистра фильтра часов ( peer.filter ) в каскадах.

Вес фильтра ( ntp.filter ) — вес, используемый при вычислении дисперсии фильтра (применяется при работе с алгоритмом фильтрации).

Выбранный вес ( ntp.select ) — вес, используемый при вычислении выбранной дисперсии (применяется при работе алгоритма селекции).

Режимы работы

За исключением широковещательного режима, NTP -ассоциация формируется, когда два партнера обмениваются сообщениями и один или оба из них создает и поддерживает протокольную машину, называемую ассоциацией. Ассоциация может работать в одном из 5 режимов, заданных переменной peer.mode: симметрично активный, симметрично пассивный, клиент, сервер и широковещательный:

Симметрично активный (1). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.

Симметрично пассивный (2). Этот тип ассоциации первоначально создается по прибытии сообщения от партнера, работающего в симметрично активном режиме. Он сохраняется, пока партнер достижим и функционирует в слое, ниже или равном данной ЭВМ. В противном случае ассоциация распадается. Однако ассоциация будет существовать до тех пор, пока, по крайней мере, одно сообщение не будет послано в качестве отклика. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.

Клиент (3). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ (обычно это сетевая рабочая станция) оповещает о своем намерении быть синхронизованной партнером.

Сервер (4). Этот тип ассоциации первоначально создается по прибытии запроса клиента и существует только для отклика на этот запрос. После отклика ассоциация ликвидируется. При работе в этом режиме ЭВМ (обычно рабочая сетевая станция) оповещает о намерении синхронизовать партнера.

Широковещательный (5). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от доступности или слоя партнеров. При работе в этом режиме ЭВМ (обычно сетевой сервер времени, который работает в широковещательной среде) оповещает о намерении синхронизовать всех партнеров.

ЭВМ, работающая в режиме клиента, иногда посылает NTP -сообщение ЭВМ, работающей в режиме сервера, например, сразу после перезагрузки и периодически после этого. Сервер откликается, меняя адреса и номера портов, занося необходимую информацию и отправляя сообщение назад клиенту. Серверы не должны хранить какую-либо статусную информацию в паузах между запросами клиента, в то время как клиенты могут варьировать интервалы между NTP -сообщениями, чтобы удовлетворить локальным требованиям. В этих режимах протокольная машина, описанная в этой статье, может быть существенно упрощена без заметной потери точности или надежности, особенно при работе в быстродействующей локальной сети.

В симметричных режимах отличие клиента от сервера практически исчезает. Симметрично пассивный режим предназначен для использования временными серверами, работающими вблизи базовых узлов (нижний слой ) субсети синхронизации и со сравнительно большим числом партнеров. В этом режиме идентификации партнера не требуется заранее, так как ассоциация с ее переменными состояния создана, только когда получено NTP -сообщение. Более того, запомненное состояние может быть использовано позднее, когда партнер станет недостижим или будет работать на более высоком уровне и по этой причине будет непригоден в качестве источника синхронизации.

Симметрично активный режим предназначен для использования серверами времени, работающими вблизи оконечных узлов (наивысший слой ) синхронизации. Надежный временной сервис обычно может быть реализован с помощью двух партнеров на ближайшем нижележащем слое и одном партнере в том же слое. По этой причине поток сообщений обычно невелик, даже когда связь потеряна, и на каждый запрос приходит отклик об ошибке.

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

Широковещательный режим предназначен для работы в скоростных локальных сетях с большим числом рабочих станций, где не требуется высокая точность. При типичном сценарии один или более временных серверов LAN периодически посылают широковещательные сообщения рабочим станциям, которые затем определяют время на основе предварительно заданной задержки распространения порядка нескольких миллисекунд.

Обработка событий

Существенные события с точки зрения протокола NTP происходят при истечении времени таймеров партнера (peer.timer), один из которых ориентирован специально на данного партнера в активной ассоциации, а также при получении NTP -сообщения от различных партнеров. Событие может произойти как результат команды оператора или обнаруженной ошибки, такой, как отказ первичного эталона.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Иван Бузмаков
Иван Бузмаков
Россия, Сарапул
Никита Сомов
Никита Сомов
Россия, Удмуртская республика