Время — самый важный и невосполнимый ресурс любого человека. Проблема эта занимала людей всегда, и уже более 4 тысяч лет они пытаются как-то упорядочить учет расходования этого ресурса, создавая различные календарные системы и устройства измерения времени. Календарные системы древнего мира отражали сельскохозяйственные, политические и ритуальные нужды, характерные для того времени. Астрономические наблюдения для установления зимнего и летнего солнцестояния производились еще 4000 лет тому назад. Проблема создания календаря возникала только в обществах, где государственная стабильность поддерживалась в течение достаточно долгого времени (Китай, Египет, государство майя). В 14-ом столетии до Рождества Христова в Китае была определена длительность солнечного года — 365.25 дней и лунного месяца — 29.5 дней. Солнечно-лунный календарь действовал на ближнем востоке (за исключением Египта) и в Греции, начиная с 3-го тысячелетия до нашей эры. Ранние календари использовали либо 13 лунных месяцев по 28 дней, либо 12 месяцев с чередующейся протяженностью 29 и 30 дней.
Древнеегипетский календарь имел 12 30-дневных лунных месяцев, но был привязан к сезонному появлению звезды Сириус (sirius — sothis). Для того, чтобы примирить этот календарь с солнечным годом, был изобретен гражданский календарь, в котором добавлено 5 дней, доводящих длительность года до 365 дней. Однако со временем было замечено, что гражданский год примерно на одну четверть дня короче, чем солнечный год. Выбранная длительность года обеспечивала полное совпадение с солнечным годом раз за 1460 лет. Этот период называется циклом Сотиса (sothic-цикл). Так же, как и китайцы, древние египтяне установили длительность солнечного года равной 365,25 дней, что с точностью 11 минут совпадает с результатами современных вычислений. В 432 году до рождества Христа, почти на сто лет позже китайцев, греческий астроном Метон вычислил, что 110 лунных месяцев по 29 дней и 125 лунных месяцев по 30 дней соответствуют 6940 солнечным дням, и это лишь немного превышает 19 лет. 19-летний цикл, названный циклом Метона, установил длительность лунного месяца равной 29,532 солнечных дней, что с точностью до 2 минут совпадает с результатами современных измерений.
В древнем Риме использовался лунный календарь. Юлий Цезарь пригласил александрийского астронома Сосигенса, который разработал календарь (по понятным причинам называнный юлианским), принятый в 46 году до Рождества Христова. Календарь содержал 365 дней в году с добавлением одного дня каждые 4 года. Однако первые 36 лет по ошибке дополнительный день добавлялся каждые три года. В результате набежало лишних три дня, которые пришлось компенсировать вплоть до 8 года нашей эры.
Семидневная неделя была введена лишь в четвертом столетии нашей эры императором Константином I.
Во время романской эры 15-летний цикл переписи использовался при исчислении налогов. Последовательность имен дней недели воспроизводится через 28 лет, этот период называется солнечным циклом. Таким образом, учитывая 28-летний солнечный цикл, 19-летний цикл Метона и 15-летний переписи, получаем суперцикл протяженностью 7980-лет, называемый юлианской эрой, которая начинается в 4713 году до Рождества Христова.
К 1545 году расхождение между юлианским календарем и солнечным годом достигло 10 дней. В 1582, астрономы Кристофер Клавиус и Луиджи Лилио предложили новую схему календаря. Папа Григорий XIII выпустил буллу, в которой среди прочего указывалось, что в году содержится 365.2422 дней. Для того, чтобы более точно аппроксимировать эту новую величину, только столетние годы, которые делятся без остатка на 400, объявляются високосными, что предполагает длительность года 365,2425 дней. В настоящее время григорианский календарь принят большинством стран мира.
Но чтобы мерить расширение вселенной или распад протона, необходимо ввести стандартную схему нумерации дней. По решению Международного астрономического Союза был принят стандарт секунды и юлианская система нумерации дней (jdn). Стандартный день содержит 86,400 стандартных секунд, а стандартный год состоит из 365,25 стандартных дней.
В схеме (JDN), предложенной в 1583 французским ученым Джозефом Юлиусом Скалигером, JDN 0.0 соответствует 12 часам (полдень) первого дня юлианской эры — 1 января 4713 до нашей эры. Годы до нашей эры подсчитываются согласно юлианскому календарю, в то время как годы нашей эры нумеруются по календарю григорианскому. 1 января 1 года после Рождества Христова в григорианском календаре соответствует 3 января 1 года юлианского календаря [DER90], в JDN 1.721.426,0 день соответствует 12 часам первого дня нашей эры.
Эталоном времени может стать любой циклический процесс с достаточно стабильным периодом. Для измерения времени сначала использовали солнечные часы (Вавилон, 3,5 тысячи лет назад), которые были пригодны только днем при безоблачном небе. Им на смену пришли водяные часы, способные работать круглые сутки (если позволял объем сосуда). Позднее были изобретены песочные часы (появились примерно тысячу лет назад), которые могли обеспечить точность около 15-20 минут за сутки. Именно от этого типа часов пошла морская единица измерения времени — "склянки". Революцию в сфере измерения времени вызвало изобретение механических часов (Вестминстерские куранты 1288 год). Первые часы с маятником были изготовлены Х. Гюйгенсом в 1657 году, через 13 лет был изобретен анкерный механизм. Механическим хронометрам человечество обязано великим географическим открытиям 18 века (Дж. Кук). Первые часы с использованием электричества был разработаны А. Бейном в 1840 году, а первые кварцевые часы увидели свет в 1918 году. В 1937 году кварцевые часы Л.Эссена были установлены в Гринвичской лаборатории (GMT), они имели точность 2 мсек в сутки. В 1944 году радиостанция BBC стала передавать сигналы точного времени с погрешностью около 0,1 мсек/сутки. Сейчас кварцевые часы можно увидеть на запястьях людей и в любом компьютере. Первые атомные часы были изготовлены в 1949 году. Без этих технологических свершений технический прогресс 20-го века был бы невозможен. Кварцевые часы побывали в космосе и на Луне.
В 1967 году был принят цезиевый (Cs133) стандарт времени, где одна секунда соответствует 9192631770 периодам перехода между уровнями в атоме цезия
Не исключено, что со временем эталоном времени станет излучение миллисекундного пульсара (открыт в 1982 году), имеющего период 1,55780645169838 миллисекунды. Этот пульсар предположительно имеет массу Солнца, радиус 10 км и вращается со скоростью 642 оборота в секунду.
С 1 января 2001 года английским правительством было официально объявлено о новом стандарте времени Grinwich e-time (GET), который будет использоваться для обеспечения глобальных электронных платежей через Интернет.
Для оценки времени природа снабдила человека, как и некоторых других живых существ, так называемыми биологическими часами. Эти часы отсчитывают циклы длительностью около 24 часов. У нас, правда, есть природный генератор — это сердце, с периодом около 1 секунды. За отсчет времени ответственен теменной участок коры больших полушарий мозга. Механизмы оценки коротких временных интервалов и упорядочение наших жизненных событий происходят разными способами. Но эти механизмы хороши, пожалуй, лишь для определения времени обеда.
Калиброванный эталон времени, например, атомные часы, — довольно сложное и дорогостоящее устройство, требующее квалифицированного обслуживания. По этой причине многие пользователи не могут позволить себе такие издержки и вынуждены обращаться к услугам удаленных эталонов. Это может быть первичный эталон, размещенный где-то в локальной сети, или радио-часы. Условия доступа к сети уже предполагают наличие определенной дисперсии для времени доставки калибровочной информации. Если же эталон размещен далеко в Интернет, значения задержки и дисперсии могут возрасти многократно. Для обеспечения большей надежности калибровки обычно используют несколько эталонов, а для снижения влияния временных разбросов привлекают довольно сложные алгоритмы усреднения.
Сетевой протокол задания времени
Протокол
Точность, достижимая с помощью
Существует ряд механизмов в Интернет, которые позволяют передавать и записывать время, когда произошло какое-то событие. Это протокол daytime [POS83a], time protocol [POS83b], сообщения ICMP "временная метка" [DAR81b] и опция IP "временная метка" [SU81].
Юниксовский (4.3BSD) времязадающий демон [GUS85a] измеряет временные сдвиги различных клиентских процессов и рассылает им соответствующие поправки.
В этой модели сервер определен с помощью алгоритма выбора [GUS85b], который исключает ситуации, где сервер не выбран или выбрано более одного сервера. Процесс выбора требует возможности рассылки широковещательных сообщений.
(рис 7.1) В модели
Под стабильностью подразумевается степень постоянства задающей частоты часов, а под точностью — соответствие этой частоты национальным стандартам времени. Если не указано обратного, под временным сдвигом между часами подразумевается разница показаний этих часов, в то время как под сбоем (
Протокол
В протоколе
Клиент посылает
Процесс передачи, управляемый независимыми таймерами для каждого из партнеров, осуществляет накопление информации в базе данных и посылает сообщения
Процесс приема осуществляет получение сообщений
Субсеть синхронизации представляет собой соединение первичных и вторичных серверов времени, клиентов и каналов передачи данных. Первичные серверы времени синхронизованы непосредственно от эталонов времени, обычно от радио-часов. Вторичные серверы могут быть синхронизованы от первичных серверов или других вторичных серверов времени. Система серверов имеет иерархическую структуру, построенную по схеме клиент-сервер. Понятно, что вторичные серверы обеспечивают более низкую временную точность.
Следуя принципам, принятым в телефонной промышленности, точность каждого сервера определяется номером слоя (
Точность однократной сверки падает по мере роста значения
Дополнительным фактором является то, что каждый переход от одного слоя к другому предполагает наличие ненадежного сервера времени, который вносит дополнительные ошибки. Алгоритм выбора серверов времени использует разновидность
Такая конструкция способствует тому, что субсеть автоматически реконфигурируется и настраивается на максимально достижимую точность даже при выходе из строя первичных или вторичных серверов времени. Если даже все первичные серверы выйдут из строя или станут недоступными, их функции будут выполнять вторичные серверы, если расстояние до них, согласно алгоритму Беллмана-Форда, не превышает значения метрики, соответствующего бесконечности (разрыву связи). Если все серверы окажутся на больших расстояниях, субсеть продолжит работу при установках, выполненных при последней синхронизации (коррекции внутренних часов). Даже в этом случае достижима точность порядка миллисекунд в сутки.
Если два сервера находятся согласно алгоритму на равных расстояниях, допускается случайный выбор.
Все арифметические операции в рамках протокола выполняются в формате с
Временные метки
Временная метка формируется путем копирования показания местных часов. Это производится в момент времени, заданный каким-то событием, например, приходом сообщения. Для поддержания наивысшей точности важно, чтобы это делалось как можно ближе к оборудованию или программному обеспечению, инициирующему этот процесс. В случае, когда временная метка недоступна, например, производится перезагрузка машин, поле метки характеризуется 64 нулями.
Заметим, что с 1968 года старший бит (бит 0 целой части) равен единице, а где-то в 2036 году 64-битовое поле переполнится.
Ниже приводится обзор различных переменных и параметров, используемых протоколом. Они распределены по классам системных переменных, которые имеют отношение к операционной среде и механизму реализации местных часов. Сюда входят переменные партнеров, которые характеризуют состояние протокольных машин участников обмена, переменные пакетов, описывающие содержимое пересылаемых
Следующие переменные являются общими для двух или более систем, партнеров и классов пакетов. Когда необходимо отличить общие переменные с идентичными именами, вводится идентификатор переменной.
Адрес партнера ( peer.peeraddr, pkt.peeraddr ), порт партнера ( peer.peerport, pkt.peerport ). 32-битный IP-адрес и 16-битный номер порта партнера.
Адрес ЭВМ ( peer.hostaddr, pkt.hostaddr ), порт ЭВМ ( peer.hostport, pkt.hostport ). 32-битный IP-адрес и 16-битный номер порта ЭВМ. Эти переменные включаются в переменные состояния для поддержки мультиинтерфейсных систем.
Индикатор приращения ( sys. ) — это двухбитный код предупреждения о включении дополнительных секунд во временную шкау
| |
Величина | Значение |
|---|---|---|
| 00 | 0 | предупреждения нет |
| 01 | 1 | последняя минута содержит 61 секунду |
| 10 | 2 | последняя минута содержит 59 секунд |
| 11 | 3 | аварийный сигнал (часы не синхронизованы) |
Во всех случаях, за исключением аварийного сигнала (
Режим ( peer.mode, pkt.mode ) — это целое 3-битовое число, обозначающее код режима ассоциации, который может принимать значения, приведенные в таблице 7.2.
| Режим | Значение |
|---|---|
| 0 | Зарезервировано |
| 1 | симметричный активный |
| 2 | симметричный пассивный |
| 3 | Клиент |
| 4 | Сервер |
| 5 | широковещательный |
| 6 | для управляющих сообщений |
| 7 | зарезервировано для частного использования |
sys. ) — это целое число, указывающее код слоя локальных часов, который может принимать значения, приведенные в таблице 7.3.
| |
Значение |
|---|---|
| 0 | Не специфицирован или недоступен |
| 1 | Первичный эталон (например, радио-часы) |
| 2-15 | Вторичный эталон (через |
| 16-255 | Зарезервировано на будущее |
Для целей сравнения значение нуль для кода слоя считается выше, чем любая другая величина. Заметим, что максимальное значение целого, закодированное как пакетная переменная, ограничено параметром .
Период обмена ( 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 ). Это число с
Базовая дисперсия ( sys.rootdispersion, peer.rootdispersion, pkt.rootdispersion ). Это число с
Идентификатор эталонных часов ( sys.refid, peer.refid, pkt.refid ). Это 32-битовый код, идентифицирующий конкретные эталонные часы. В случае слоя 0 (не специфицирован) или слоя 1 (первичный эталонный источник), это 4-октетная ASCII-строка, выровненная по левому краю и дополненная при необходимости нулями, например:
| |
Код | Значение |
|---|---|---|
| 0 | Протокол маршрутизации |
|
| 0 | Цифровая служба времени (digital time service) | |
| 0 | nist | Общий модем nist |
| 0 | Временной протокол |
|
| 1 | atom | Атомные часы (калиброванные) |
| 1 | ||
| 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 ) — локальное время в формате временных меток, соответствующее моменту посылки последнего
Временная метка получения ( peer.rec, pkt.rec ) — локальное время в формате временных меток, которое соответствуюет моменту прихода последнего
Временная метка передачи ( peer.xmt, pkt.xmt ) — локальное время в формате временных меток, соответствующее моменту отправки
Следующие переменные используются операционной системой для синхронизации локальных часов.
Переменная локальные часы ( sys.clock ) содержит показание локальных часов в формате временных меток. Локальное время получается от аппаратных часов конкретной ЭВМ и дискретно увеличивается с конструктивно заданными приращениями.
Переменная Базовые часы ( sys.peer ) представляет собой селектор, идентифицирующий используемый источник синхронизации. Обычно это указатель на структуру, содержащую переменные партнера. Значение нуль указывает, что в настоящее время источник синхронизации отсутствует.
Ниже перечислены все переменные партнера, которые используются для управления и реализации измерительных процедур.
Бит конфигурации ( peer.config ) — бит, индицирующий, что ассоциация была сформирована на основе конфигурационной информации и не должна быть расформирована, когда партнер становится недоступен.
Временная метка актуализации ( peer.update ) — локальное время в формате временной метки, отмечающее момент, когда было получено последнее
Регистр достижимости ( peer.reach ) —
Таймер партнера ( peer.timer ) — целочисленный счетчик, используемый для управления интервалом между последовательно посылаемыми
Номер версии ( pkt.version ) — целое число, индицирующее номер версии отправителя. ). Исключения допускаются лишь при смене номера версии.
Когда используются фильтры и алгоритмы отбора, дополнительно привлекаются следующие переменные состояния.
Регистр фильтра ( peer.filter ) —
Счетчик корректных данных ( peer.valid ) — целочисленный счетчик, указывающий на корректные образцы, остающиеся в регистре фильтра. Он используется для определения состояния доступности и для управления увеличением и уменьшением периода рассылки сообщений.
Смещение ( peer.offset ) — число с
Задержка ( peer.delay ) — число с
Дисперсия ( peer. ) — число с
Ниже описаны параметры для всех реализаций, работающих в сети Интернет. Необходимо договориться относительно значений этих параметров для того, чтобы исключить ненужную избыточность и стабилизировать ассоциации партнеров. Приведенные параметры применимы для всех ассоциаций.
Номер версии ( ) — текущий номер версии
Порт ) — стандартный номер порта (123), присвоенный протоколу
Максимальный номер слоя ( ) — максимальный номер слоя, который может быть использован при кодировании пакетной переменной. Этот параметр обычно интерпретируется как определение бесконечности (недостижимости для протокола маршрутизации в субсети).
Максимальный возраст часов ( ) — максимальный интервал в секундах, в течение которого эталонные часы будут рассматриваться как корректные после последней сверки.
Максимальный сбой ( ) — максимальная ошибка смещения, связанная со сбоем локальных часов за время
Максимальное расстояние ( ) — максимально допустимое расстояние между партнерами при синхронизации с использованием алгоритма отбора.
Минимальный период рассылки ( ) — минимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.
Максимальный период рассылки ( ) — максимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.
Минимум избранных часов ( ) — минимальное число партнеров, необходимое для синхронизации (при использовании алгоритма отбора).
Максимум избранных часов> ( ) — максимальное число партнеров, необходимое для организации отбора (при использовании алгоритма селекции).
Минимальная дисперсия ( ) — минимальное значение приращения дисперсии для каждого из слоев в секундах (при использовании алгоритма фильтрации).
Максимальная дисперсия ( ) — максимальная дисперсия в секундах с учетом потерянных данных (при использовании алгоритма фильтрации).
Размер регистра доступности ( ) — размер регистра доступности ( peer.reach ) в битах.
Размер фильтра ( ) — размер peer.filter ) в каскадах.
Вес фильтра ( ) — вес, используемый при вычислении дисперсии фильтра (применяется при работе с алгоритмом фильтрации).
Выбранный вес ( ) — вес, используемый при вычислении выбранной дисперсии (применяется при работе алгоритма селекции).
За исключением широковещательного режима, peer.mode: симметрично активный, симметрично пассивный, клиент, сервер и широковещательный:
Симметрично активный (1). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.
Симметрично пассивный (2). Этот тип ассоциации первоначально создается по прибытии сообщения от партнера, работающего в симметрично активном режиме. Он сохраняется, пока партнер достижим и функционирует в слое, ниже или равном данной ЭВМ. В противном случае ассоциация распадается. Однако ассоциация будет существовать до тех пор, пока, по крайней мере, одно сообщение не будет послано в качестве отклика. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.
Клиент (3). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ (обычно это сетевая рабочая станция) оповещает о своем намерении быть синхронизованной партнером.
Сервер (4). Этот тип ассоциации первоначально создается по прибытии запроса клиента и существует только для отклика на этот запрос. После отклика ассоциация ликвидируется. При работе в этом режиме ЭВМ (обычно рабочая сетевая станция) оповещает о намерении синхронизовать партнера.
Широковещательный (5). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от доступности или слоя партнеров. При работе в этом режиме ЭВМ (обычно сетевой сервер времени, который работает в широковещательной среде) оповещает о намерении синхронизовать всех партнеров.
ЭВМ, работающая в режиме клиента, иногда посылает
В симметричных режимах отличие клиента от сервера практически исчезает. Симметрично пассивный режим предназначен для использования временными серверами, работающими вблизи базовых узлов (нижний
Симметрично активный режим предназначен для использования серверами времени, работающими вблизи оконечных узлов (наивысший
В нормальной ситуации один партнер работает в активном режиме (симметричный активный, клиент или широковещательный), как это сконфигурировано в стартовом файле, в то время как другие работают в пассивном режиме (симметричный пассивный или сервер), часто без предварительной конфигурации. Однако оба партнера могут быть сконфигурированы для работы в симметричном режиме. Условие ошибки возникает, когда оба партнера работают в одном и том же режиме, но не в симметричном активном. В таких случаях каждый партнер будет игнорировать сообщения, поступающие от другого, и ассоциация, если она существовала, будет ликвидирована из-за недостижимости партнера.
Широковещательный режим предназначен для работы в скоростных локальных сетях с большим числом рабочих станций, где не требуется высокая точность. При типичном сценарии один или более временных серверов LAN периодически посылают широковещательные сообщения рабочим станциям, которые затем определяют время на основе предварительно заданной задержки распространения порядка нескольких миллисекунд.
Существенные события с точки зрения протокола
Алгоритмы фильтрации и селекции
Дисперсия партнера ( $$\varepsilon$$ ) содержит вклады от ошибок измерения ( $$\rho$$ ) и накопления ошибок дрейфа (
Каждый раз, когда соответствующие переменные партнеров изменяются, значения дисперсии корректируются. Ниже приводятся основные определения переменных и формулы их вычисления:
$$\theta = peer.offset, \\ \delta = peer.delay, \\ \varepsilon = peer.dispersion = \rho + \varphi \tau + \varepsilon _{\sigma }, \\ \lambda = \varepsilon + |\delta |/2,$$где $$\delta = RTT$$, $$\theta$$ — сдвиг часов, $$\varphi \tau$$ — накопление сбоя, $$\varphi = ntp.maxskew/ntp.maxage$$, $$\tau$$ — момент времени передачи исходной временной метки (на основе $$\tau$$ вычисляется $$\theta$$ и $$\delta$$ ), $$\varepsilon _{\sigma }$$ — дисперсия фильтра. Переменные, относящиеся к партнеру i, определяются следующим образом:
Окончательно, предполагая, что для синхронизации выбран i-ый партнер, система переменных определяется следующим образом:
$$\theta = комбинированное\ окончательное\ смещение\ (combined\ final\ offset), \\ \delta = \delta _{i}, \\ e = \varepsilon _{i} + \varepsilon _{\xi } + \theta , \\ \lambda = \lambda _{i}, \\ где\ \varepsilon _{\xi } — дисперсия\ выбора\ (select\ dispersion).$$Процедура получения выполняется после прихода
Пакетная процедура проверяет корректность сообщения, вычисляет задержку/смещение и вызывает другие процедуры для отбора данных и выбора источника синхронизации. При этом проверяется, чтобы переданная временная метка отличалась от последней, полученной от того же партнера. Кроме того, проверяется, чтобы исходная временная метка соответствовала последней метке, посланной тому же партнеру. В случае широковещательного режима (5) RRT =0 и полная точность операции передачи времени будет недостижимой. Однако полученная точность может быть вполне приемлемой для многих целей. Процедура вызова коррекции времени использует в качестве параметра peer.hostpoll ( peer.peerpoll может быть изменено).
Контролируется, чтобы исходная и полученная временные метки не были равны нулю. Если любая из них равна нулю, ассоциация не синхронизирована или потеряла доступ в одном или обоих направлениях.
Пусть i — четное целое число.
ti-3, ti-2, ti-1 и ti — содержимое переменных pkt.org, pkt.rec, pkt.xmt и peer.rec, соответственно. Смещение часов $$\phi,$$ $$RTT =\delta$$ и дисперсия $$\varepsilon$$ ЭВМ по отношению к партнеру равны:
где, как и прежде, $$\varphi = ntp.maxskew/ntp.maxage. <<$$ - обозначает сдвиг кода влево. Значение $$\varepsilon$$ представляет собой максимальную ошибку или дисперсию, связанную с ошибкой измерения на стороне ЭВМ, а также накопление ошибок из-за дрейфа локальных часов за время после отправки последнего сообщения, посланного партнером. Дисперсия корректируется процедурой фильтра часов (clock-filter).
Рассмотренный метод эквивалентен непрерывному стробированию, которое используется в некоторых телефонных сетях. Преимуществом метода является полная независимость от порядка и времени прихода сообщений, а также допустимость потери некоторых пакетов. Очевидно, что достижимые точности зависят от статистических свойств каналов связи.
Процедура "часовой фильтр" вызывается для вычисления задержки ( peer.delay ), смещения ( peer.offset ) и дисперсии ( peer. ) для партнера. Спецификация алгоритма часового фильтра не является составной частью протокола
Процедура коррекции показания часов вызывается процедурой приема, когда процедура фильтрации определила корректные значения смещения задержки и дисперсии для данного партнера.
Может так случиться, что локальные часы оказались сброшены. В этом случае вызывается процедура очистки (clear procedure) для каждого из партнеров, чтобы возвратить в исходное состояние фильтр часов, период рассылки и, если необходимо, осуществить выбор нового источника синхронизации.
Процедура расстояния вычисляет базовую (root) задержку $$\delta,$$ базовую дисперсию $$\varepsilon$$ и базовое расстояние синхронизации $$\lambda.$$ ЭВМ не будет синхронизовать выбранного партнера, если расстояние больше, чем .
В некоторых конфигурациях системы
Спецификация алгоритмов выбора часов и работы локальных часов не являются составной частью
Когда ЭВМ связана с первичным эталоном времени, таким, как радио-часы, удобно ввести информацию об этих часах в базу данных, как если бы это был обычный партнер. В процедуре первичных часов часы запрашиваются раз в минуту или около того, полученный же временной код используется для корректировки показаний местных часов. Когда обнуляется peer.timer для первичного партнера, процедура передачи не вызывается, а посылается запрос радио-часам с использованием ASCII-последовательности, предусмотренной для этого случая. Когда получен корректный временной код от радио-часов, он преобразуется в формат временной метки peer. устанавливается в зависимости от состояния бита оповещения временного кода, если таковой имеется, или вручную оператором. Значение для peer.peeraddr,
которое становится равно sys.refid, когда вызывается процедура корректировки показаний часов, делается равным ASCII-строке, описывающей часы.
Процедура инициализации вызывается при перезагрузке системы или при повторном запуске демона
Эта процедура является аппаратно-зависимой и служит, среди прочего, для формирования ассоциации. Адреса и режимы работы партнеров определяются в процессе чтения при перезагрузке или в результате обработки команд оператора. В случае привлечения механизма аутентификации только аутентифицированный партнер может стать источником синхронизации.
Процедура receive-instantiation вызывается процедурой приема, когда обнаруживается новый партнер. Она инициализирует переменные партнера и формирует ассоциацию. Если сообщение получено от партнера, работающего в режиме клиента (3), ЭВМ переводится в режим сервера (4); в противном случае, она устанавливается в симметрично пассивный режим (2).
Эта процедура вызывается из процедуры инициализации для того, чтобы установить переменные состояния для первичных часов. Значение peer.precision определяется из спецификации радио-часов и аппаратного интерфейса. Значение peer.rootdispersion номинально равно удесятеренной максимальной ошибке радио-часов, например, 10 мсек для WWVB или радио-часов GOES и 100 мсек для менее точных радио-часов WWV.
В некоторых конфигурациях, включающих в себя атомные часы или приемники LORAN-C, первичный эталон может выдавать только секундные импульсы и не предоставлять полного временного кода (числа секунд и пр.). В этих конфигурациях нумерация секунд может быть получена из других источников, таких, как радио-часы или даже другие
Процедура очистки вызывается, когда произошло событие, которое значительно изменило достижимость или вызвало поломку локальных часов.
Процедура запроса-коррекции (poll-update)
Процедура запроса-коррекции реализуется, когда происходит событие, которое может вызвать изменение периода запросов (рассылки) или таймера партнера. Она проверяет значения периода запросов ЭВМ ( peer. hostpoll ) и партнера ( peer.peerpoll ), а также устанавливает их в заданных пределах.
Если интервал запросов не изменился, а таймер партнера на нуле, то таймер просто сбрасывается в начальное состояние. Если интервал
Процедура расстояния вычисляет расстояние синхронизации на основе переменных партнеров.
Заметим, что, в то время как $$\delta$$ может быть в некоторых случаях отрицательной, $$\varepsilon$$ и $$\lambda$$ всегда положительны.
Конструкция
Если требуется более надежная модель, система может базироваться на списке доступа, в который включаются 32-битовый IP-адрес, 32-битовая маска и 3-битовый код режима работы. Если логическое И адреса эталона ( pkt.peeraddr ) и маски на входе ЭВМ соответствуют определенному адресу и режиму ( pkt.mode ), доступ разрешается, в противном случае отправителю запроса присылается ICMP-сообщение об ошибке. Список управления доступом служит фильтром, определяющим, какой из партнеров может сформировать ассоциацию.
Наиболее важным фактором, влияющим на точность и надежность синхронизации, является набор алгоритмов, используемых для уменьшения статистических ошибок и искажений при сбоях в различных компонентах субсети. Алгоритмы, описанные в этой статье, не являются частью стандарта
Чтобы
где w — весовой коэффициент, который служит для учета влияния расстояния синхронизации на дисперсию. В алгоритмах w выбирается меньше 1/2: w = для дисперсии фильтра (filter w = для дисперсии выбора (select
Существует две процедуры, описанные ниже: процедура "часовой-фильтр" (clock-filter), которая применяется для выбора лучших записей смещения для данных часов, и процедура "выбора часов" (clock-selection), которая применяется, чтобы выбрать наилучшие часы среди иерархического набора часов.
Процедура часовой фильтр исполняется по прибытии сообщения filtered clock offset — peer.offset ), peer.delay ) и дисперсии ( peer. ). Она также корректирует дисперсию хранящихся записей и текущее показание часов ( peer.update ).
Процедура часового фильтра применяет
Дисперсия $$\varepsilon _{i}$$ для всех корректных записей в регистре фильтра должна корректироваться, с тем, чтобы отражать накопление смещения со времени последней коррекции. Эти записи заносятся также во временный список, следуя стандартному формату записей [расстояние, индекс]. Записи в
Смещение партнера $$\theta _{0}$$, задержка $$\delta _{0}$$ и дисперсия $$\varepsilon _{0}$$ выбираются как величины, соответствующие записи с минимальным расстоянием; другими словами, записи, соответствующей первому элементу временного списка (в данной нотации имеет индекс 0).
Переменные peer.offset и peer.delay представляют смещение шкалы часов и peer. характеризует максимальную ошибку из-за неточности измерений, дрейфа и вариации записей. Все три переменные используются при выборе часов для синхронизации.
Процедура выбора часов использует переменные партнера $$\theta , \delta , \varepsilon$$ и $$\tau,$$ она вызывается, когда эти переменные изменились или изменился статус доступности. Процедура включает в себя две составные части: алгоритм пересечения (intersection algorithm) и алгоритм кластеризации (clustering algorithm). Алгоритм пересечения подготавливает список кандидатов партнеров, могущих стать источниками синхронизации и вычисляет доверительный интервал для каждого из них. Алгоритм кластеризации сортирует список кандидатов по кодам слоя и расстояния синхронизации. Системная переменная sys.peer представляет собой указатель на наиболее вероятного кандидата, если таковой имеется, или на нулевую величину в противном случае.
Каждый из партнеров просматривается последовательно и добавляется в конец списка, если он прошел ряд тестов. Для каждого из m кандидатов в список заносятся 3 записи в форме $$[указатель, тип]: [\theta - lambda;, - 1], [\theta , 0]$$ и $$[\theta + \lambda , 1]$$. В результате в списке будет 3m записей, которые будут позднее упорядочены.
Нижеприведенный алгоритм представляет собой адаптированную версию f и занесения нуля в счетчики i и c. Затем, начиная с конца упорядоченного, для каждой записи [указатель, тип] значение типа вычитается из кода счетчика i, который содержит число пересечений. Если код типа равен нулю, инкрементируется значение c, которое регистрирует число ложных кандидатов. Если для некоторых записей i >= m - f, конец записи становится нижней границей пересечения; в противном случае, f увеличивается на 1 и процедура повторяется. Без сброса значений f или c аналогичная процедура используется для нахождения верхней границы, за исключением того, что значение кода тип добавляется к счетчику. Если после того как обе границы определены c <= f,
процедура продолжается для найденных m - f кандидатов, в противном случае, f увеличивается на 1 и вся процедура повторяется.
Заметим, что работа продолжается далее данной точки, только если имеется более m/2 пересечений. Однако возможно, но не слишком вероятно, что в области пересечения окажется менее m/2 кандидатов.
В исходном алгоритме
Последующие шаги служат для того, чтобы отсеять кандидатов со слишком большими дисперсиями. Практика показывает, что число кандидатов может быть достаточно велико. Это может привести к большому числу циклов повторения процедуры отбора, которые не дадут какого-либо улучшения результатов. Длина списка кандидатов ограничивается переменной .
Заметим, что $$\varepsilon _{\xi i}$$ представляет собой дисперсию относительно i-го партнера из списка кандидатов, которая может быть вычислена методом дисперсии фильтра, описанным выше. $$\varepsilon _{j}$$ — дисперсия j-ого партнера из списка, включающая в себя вклады от ошибок измерения, от накопления дрейфа и из-за дисперсии фильтра. Если максимальное значение $$\varepsilon _{\xi i}$$ больше, чем минимальное значение $$\varepsilon _{j}$$, а число кандидатов больше, чем , то i-ый партнер удаляется из списка и процедура повторяется. Если текущий источник синхронизации является одним из членов списка и нет других кандидатов из более низкого слоя, процедура прерывается и никакие другие последующие шаги не предпринимаются. В противном случае в качестве источника синхронизации берется первый кандидат из списка.
Алгоритм сконструирован так, чтобы отдавать предпочтение партнерам из головной части списка, которые размещены в более низком слое, имеют наименьшее расстояние и могут обеспечить наибольшую точность и стабильность. С помощью правильного выбора весового коэффициента v (называемого
Для того, чтобы иметь точные локальные часы, ЭВМ должна быть оборудована аппаратными часами, которые состоят из задающего генератора и интерфейса, обеспечивающего необходимые операции установки и коррекции. Логические часы конструируются, используя эти компоненты и программы, осуществляющие подстройку частоты и абсолютного показания локальных часов. Такая система позволяет достичь точности времени до 15 нс и стабильности частоты на уровне 0.3 мс в день. Предлагаемая модель удобна для применения как компенсируемых, так и некомпенсируемых кварцевых генераторов, пригодна она и для часов, использующих для создания временной шкалы частоту сети переменного тока.
Важно заметить, что конкретная описанная реализация является лишь одной из многих возможных.
Локальные часы "пушистый шарик" представляют собой комбинацию аппаратных и программных регистров, а также алгоритмов, которые осуществляют функционирование часов — работу управляемого задающего генератора, синхронизуемого от внешнего источника. Далее следует описание его компонент и способа работы. Заметим, что все числа представлены в форме дополнений до 2, а все сдвиги являются арифметическими (заполнение знаком при сдвиге вправо и нулем при сдвиге влево).
48-битовый часовой регистр (clock) и 32-битовый предварительный счетчик (x. 32-битовый регистр компенсации дрейфа (y. 16-битовый счетчик оповещения ( z. 32-битовый регистр
настройки (
Все регистры, кроме предварительного счетчика, обычно размещаются в памяти. В типовом интерфейсе часов, таком, как DEC KWV11-C, регистр
Когда наступает момент подстройки, CLOCK.ADJ секунд вычитается из содержимого
Если локальные часы нескорректированы, они продолжают работать со смещением и частотой (при отсутствии дрейфа), установленными при последней коррекции. Корректирующая информация имеет формат 48-битного целого числа со знаком. Это число характеризует целое и дробное число миллисекунд (запятая располагается после 32-го двоичного разряда). Если полученная величина превосходит максимальное значение, заданное CLOCK.MAX, необходима постепенная пошаговая коррекция. В нормальной ситуации величина поправки вычисляется в рамках алгоритма u представляет собой 32-битовый код с битами 0-31, равными разрядам 16-47 корректирующего кода. Если некоторые младшие биты корректирующего кода не используются, они устанавливаются равными биту знака. Такие операции сдвигают положение запятой влево по отношению биту 16,
что уменьшает влияние ошибок округления. Пусть b число начальных нулей в коде регистра c — число начальных нулей в коде счетчика b установится равным:
b = b - 16 + clock.comp
b не должно быть меньше нуля (это логарифм постоянной времени обратной связи). Затем установим c равным:
c = 10 - c
Величина c представляет собой логарифм времени интегрирования с момента последней коррекции. Затем вычисляются новые значения кодов для регистров CLOCK.ADJUST и
x = u >> b, y = y + (u >> (b + b - c)).
В заключение вычисляем экспоненциальное среднее
z = z + (u << (b + clock.mult) - z) >> clock.weight,
где сдвиг влево переносит положения запятой с целью достижения большей точности.
Для каждого периода подстройки определяется корректирующий код из двух составляющих. Первая составляющая (фаза) определяется как
x >> clock.phase,
эта величина затем вычитается из предшествующего значения регистра Clock-Adjust. Результат становится новым значением кода этого регистра. Вторая компонента — (частота) определяется как
y >> clock.freq.
Совокупность фазы и частоты представляет собой окончательный корректирующий код, который затем добавляется к коду регистра (clock). В заключение счетчик
Величина b, вычисленная ранее, может использоваться для изменения величины системной переменной, характеризующей период запросов (коррекций) sys.poll.
sys.poll <- b + NTP.MINPOLL.
При условии, что шум коррекций велик, частота аппаратного задающего генератора может меняться быстро из-за изменений условий окружающей среды. В этом случае период запросов укорачивается. Когда шум незначителен, задающий генератор стабилен и период запросов растет вплоть до секунд.
Когда величина поправки превышает CLOCK.MAX, имеется возможность того, что часы окажутся настолько не синхронизованы, что наилучшим решением будет немедленная замена содержимого регистра часов. Однако, в случаях, когда вариация записи весьма высока, разумно не поверить в возможность скачкообразного изменения, если только со времени последней коррекции не прошло достаточно много времени. Следовательно, если обнаружено скачкообразное изменение, а счетчик CLOCK.MINSTEP, корректирующее сообщение игнорируется.
Если обнаружено ступенчатое изменение, коррекция заносится непосредственно в регистры Clock, а содержимое регистров Clock-Adjust и
Практически значения CLOCK.MAX могут быть превышены временным сервером лишь в условиях чрезмерной перегрузки канала или при сбоях оборудования. Наиболее часто встречаемый случай — это смена сервера при регистрации слишком большого числа ошибок или из-за сильной вариации задержки. Рекомендуется, чтобы реализации программ включали средства формирования значений CLOCK.MAX для особых случаев. Величина, на которую можно превысить CLOCK.MAX, не нарушая требования монотонности, зависит от значения приращения регистра часов (
Базовая модель надежности
Преобразование из формата sys. устанавливается на первичном сервере вручную. Следует иметь в виду, что большинство радио-часов не имеет автоматических или ручных средств добавления/вычитания секунд. Но даже в случае некорректного добавления/вычитания секунды локальные часы будут вновь синхронизованы не позднее чем через число секунд, заданное CLOCK.MINSTEP.
Формат
(рис 7.2) Формат сообщения NTP.Индикатор добавления (
Номер версии (VN) — трехбитовое поле, указывающее на номер версии протокола
Режим (Mode) — трехбитовое поле, определяющее режим, значения кодов режима приведены в таблице 7.2.
включительно.
Период запросов (poll interval) — 8-битовое поле, указывающее на максимальное значение интервала между запросами. Код, записанный в этом поле, интерпретируется как целое число со знаком и характеризует значение периода в секундах как ближайшее к величине степени двух. Коды, которые могут быть записаны в этом поле, должны лежать в интервале между и включительно.
Точность (precision) — 8-битовое поле, обозначающее точность локальных часов в секундах. Код поля интерпретируется как целая степень со знаком числа 2.
Базовая задержка (Root Delay) — 32-битовое поле, характеризующее
Базовая дисперсия (Root
Идентификатор эталонных часов (
В случае слоя 2 и больше (вторичный эталон) — это 4-октетный IP-адрес ЭВМ — первичного эталона.
Эталонная временная метка (Reference Timestamp) — поле локального времени (64-битовый формат временных меток), когда часы корректировались в последний раз.
Исходная временная метка (Originate Timestamp) определяет время, когда запрос направлен серверу (стандартный 64-битовый формат временных меток).
Получаемая временная метка (Receive Timestamp) — время, когда запрос прибыл к серверу (стандартный 64-битовый формат временных меток).
Передаваемая временная метка (Transmit Timestamp) — локальное время, когда послан отклик сервером (стандартный 64-битовый формат временных меток).
Аутентификатор (authenticator) (
В сетевой среде должны быть средства управления программами
Управляющие сообщения
IP-ЭВМ не должны обрабатывать дейтограммы длиннее 576 октетов; однако, некоторые команды или отклики могут содержать данные, не помещающиеся в одну дейтограмму. Для решения этой проблемы все октеты сообщения нумеруются, начиная с нуля. При передаче фрагментов сообщения номер первого октета записывается в поле смещения (offset), а число октетов в поле длины. Бит (M — more) устанавливается во всех фрагментах за исключением последнего.
Большинство контрольных функций включает посылку команды и получение отклика. Отправитель выбирает ненулевой порядковый номер и устанавливает статусное поле и биты R и E равными нулю. Получатель интерпретирует код операции и дополнительную информацию, содержащуюся в поле данных, вносит изменение в поле статуса и устанавливает бит R=1, а также возвращает три 32-битного слова заголовка вместе с другой дополнительной информацией поля данных. В случае неверного формата сообщения или ошибки в поле данных получатель заносит соответствующий код в поле статуса, устанавливает биты R и E равными 1 и
Некоторые команды осуществляют чтение или запись для системных переменных и переменных партнеров для ассоциации, идентифицированной в команде. Другие читают или записывают значения переменных, которые связаны с радио-часами и другими приборами, имеющими непосредственное отношение к эталонам времени. Для определения ассоциации применяется ее 16-битовый идентификатор. Для системных переменных используется идентификатор нуль. Управляющий объект может затребовать текущий список идентификаторов с тем, чтобы их задействовать в дальнейшем. При попытке употребить уже недействительный идентификатор будет прислан соответствующий отклик, после чего необходимо запросить список идентификаторов еще раз.
Некоторые события, такие, как изменение статуса доступа к партнеру, не сопряжены с какими-либо командами и происходят асинхронно. Программа может запоминать информацию о таких событиях и пересылать ее в откликах. Текущий статус и краткая аннотация чрезвычайных событий пересылаются каждым откликом. Биты в статусном поле указывают на то, произошло ли какое-либо событие с момента предыдущего отклика и было ли их больше одного.
Формат заголовков управляющих
(рис 7.3) Формат управляющего сообщения NTPПервые два бита, обозначенные ZZ, должны всегда содержать 0.
Номер версии (VN —
Режим (Mode) — трехбитовое поле, определяющее режим, значение кода режима для управляющих сообщений равно 6.
Бит отклика (R) — равен нулю для команд и 1 для откликов.
Бит ошибки (E) — равен нулю для нормального отклика и 1 в случае ошибки.
Бит продолжения (M — more) — равен нулю для последнего фрагмента и 1 для всех остальных.
Код операции (OP) — 5-битовое поле, определяющее код команды. Значения кодов и их функции представлены в таблице 7.5.
| Код | Функция |
|---|---|
| 0 | Зарезервировано |
| 1 | чтение статуса команда/отклик |
| 2 | чтение переменной команда/отклик |
| 3 | запись переменной команда/отклик |
| 4 | чтение переменных часов команда/отклик |
| 5 | запись переменных часов команда/отклик |
| 6 | установка адреса/порта trap команда/отклик |
| 7 | отклик на Trap |
| 8-31 | Зарезервировано на будущее |
Порядковый номер (Sequence) — 16-битовое поле, определяющее номер запроса или отклика и облегчающее определения их соответствия.
Статус — 16-битовое поле, содержащее код статуса системы, партнера или часов.
Идентификатор ассоциации (Association ID) — 16-битовое поле, несущее в себе идентификатор ассоциации.
Смещение (Offset) — 16-битовое поле, которое определяет положение первого октета поля данных в сообщении, передаваемом в нескольких дейтограммах (позиция задается в октетах).
Длина (Count) — 16-битовое поле, определяющее длину поля данных в октетах.
Данные — это поле содержит информацию сообщения, как для команд, так и для откликов. Максимальное число октетов в поле данных равно 468.
Аутентификатор (
Статусные слова указывают на текущее состояние системы ассоциации и часов. Эти слова интерпретируются программами сетевого мониторинга и имеют 4 разных 16-битовых формата. Статусные слова партнеров и системы соответствуют откликам для всех команд за исключением случая чтения/записи переменных часов и установки адреса/порта для TRAP. Идентификатор ассоциации нуль соответствует системным статусным словам, в то время как ненулевой идентификатор указывает на какую-то конкретную ассоциацию. Статусное слово, присланное в ответ на команду чтения или записи переменной часов, указывает на состояние оборудования и кодирующего программного обеспечения.
Системное статусное слово может присутствовать в статусном поле отклика и имеет следующий формат.
Индикатор добавления (
Источник часов (
| Код | Функция |
|---|---|
| 0 | Не специфицирован или неизвестен |
| 1 | Калиброванные атомные часы (напр., hp 5061) |
| 2 | |
| 3 | ВЧ (диапазон 7) радио (напр., chu, msf, wwv/h) |
| 4 | УВЧ (диапазон 9) спутник (напр., goes, gps) |
| 5 | Локальная сеть (напр., |
| 6 | UDP/ |
| 7 | UDP/time |
| 8 | eyeball-and-wristwatch |
| 9 | Телефонный модем (напр., nist) |
| 10-63 | Зарезервировано на будущее |
Системный счетчик событий — четырехбитовое целое число, которое обозначает число событий, происшедших с момента последнего получения статусного слова системы. Счетчик обнуляется, когда присылается в статусном поле отклика, и остается неизменным после достижения значения 15.
Код системного события — четырехбитовое число, идентифицирующее последнее
| Код | Функция |
|---|---|
| 0 | Не специфицировано |
| 1 | |
| 2 | Системный или аппаратный сбой |
| 3 | Новое статусное слово системы (изменение битов добавления или синхронизации) |
| 4 | Новый источник синхронизации или |
| 5 | Сброс системных часов (корректирующая добавка превысила clock.max) |
| 6 | Некорректное системное время или дата |
| 7 | |
| 8-15 | Зарезервировано на будущее |
Статусное слово партнера возвращается в статусном поле отклика на команду чтения статуса, а также чтения или записи переменных. Это слово появляется в списке идентификаторов ассоциации и статусных слов, присылаемых в ответ на команду чтения статуса с нулевым идентификатором ассоциации. Формат статусного слова партнера содержит следующие поля (рис 7.4)
(рис 7.4) Форматы статусных словСтатус партнера — 5-битный код, характеризующий состояние партнера, определяемого процедурой обмена. Значения этого поля представлены в таблице 7.8.
| Значение кода | Функция |
|---|---|
| 0 | Сконфигурирован (peer.config) |
| 1 | Разрешена аутентификация (peer.authenable) |
| 2 | Аутентификация успешна (peer.authentic) |
| 3 | Партнер доступен (peer.reach) |
| 4 | Зарезервировано на будущее |
Выбор партнера ( Sel ) — 3-битный код, который говорит о состоянии партнера, определенного в результате процедуры выбора часов. Значения кодов представлены в таблице 7.9.
| Значение кода | Функция |
|---|---|
| 0 | Отклонен |
| 1 | Проверка соответствия прошла успешно (тесты 1 - 8) |
| 2 | Прошел проверки корректности (алгоритм пересечения) |
| 3 | Прошел проверки как кандидат |
| 4 | Проверка ресурсов прошла успешно (алгоритм кластеризации) |
| 5 | Текущий источник синхронизации; превышено максимальное расстояние (если используются предельные проверки) |
| 6 | Текущий источник синхронизации; максимальное расстояние в пределах нормы |
| 7 | Зарезервировано на будущее |
Счетчик событий партнера — 4-битовое число событий (exception) партнера, которые произошли со времени последнего получения статусного слова в рамках отклика или сообщения TRAP. Счетчик сбрасывается при занесении кода в поле статуса отклика и перестает изменяться при достижении значения 15.
Код события партнера — 4-битовое целое число, идентифицирующее последнее событие партнера. Новое значение переписывает предыдущее. Значения кодов представлены в таблице 7.10.
| Значение кода | Функция |
|---|---|
| 0 | Не специфицировано |
| 1 | IP-ошибка партнера |
| 2 | Ошибка аутентификации партнера (бит peer.authentic был равен 1, а теперь =0) |
| 3 | Партнер не достижим (peer.reach стал равен нулю) |
| 4 | Партнер достижим (peer.reach стал не равен нулю) |
| 5 | Проблема с часами партнера |
| 6-15 | Зарезервировано на будущее |
Существует два способа подключить эталонные часы к
Состояние часов — 8-битовое число, характеризующее текущее состояние часов. Допустимые значения этого числа и их смысл представлены в таблице 7.11.
| Код | Функция |
|---|---|
| 0 | Работа часов в пределах нормы |
| 1 | Тайм-аут отклика |
| 2 | Плохой формат отклика |
| 3 | Сбой оборудования или программы |
| 4 | Потеря при передаче |
| 5 | Неверный формат или значение даты |
| 6 | Неверный формат или значение времени |
| 7-255 | Зарезервировано на будущее |
Код события для часов — 8-битовый код, идентифицирующий последнее событие для данных часов (exception). Новое значение переписывает предыдущее значение кода. Когда значение кода становится ненулевым для поля статуса радио-часов, этот код копируется в статусное поле кода события и считается, что произошло событие для системных часов или часов партнера.
Статусное слово ошибки присылается в поле статуса отклика, если обнаружена ошибка в формате сообщения или в его содержимом. Его присутствие указывается равенствами E (error) и R (response) битов 1. Коды ошибки и их значения собраны в таблице 7.12.
| Код ошибки | Значение |
|---|---|
| 0 | Не специфицировано |
| 1 | Неудачная аутентификация |
| 2 | Неверный формат или длина сообщения |
| 3 | Неверный код операции |
| 4 | Неизвестный идентификатор ассоциации |
| 5 | Неизвестное имя переменной |
| 6 | Неверное значение переменной |
| 7 | Административно запрещено |
| 8-255 | Зарезервировано на будущее |
Команды состоят из заголовка и опционного поля данных. Если поле данных присутствует, оно включает в себя список идентификаторов и, возможно, их значений.
<identifier>[=<value>],<identifier> =<value> ],...
где <identifier> представляет собой имя переменной системы или партнера в форме ASCII-последовательности, а <value> является десятичным или шестнадцатеричным числом, или строкой, соответствующей синтаксису языка C. Для большей читаемости допускается применение пробелов ([n.n.n.n], где n — десятичное число. Скобки являются
Команды интерпретируются следующим образом.
Чтение статуса (1). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Команда работает по-разному в зависимости от значения идентификатора. Если идентификатор не равен нулю, отклик содержит идентификатор партнера и статусное слово. Если идентификатор ассоциации равен нулю, отклик включает в себя системный идентификатор (0) и статусное слово, в то время как поле данных содержит список пар двоичных кодов:
<идентификатор ассоциации> <статусное слово>,
по одному на каждую определенную в данный момент ассоциацию.
Чтение переменных (2). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Если идентификатор ассоциации не равен нулю, отклик включает в себя идентификатор запрашиваемого партнера и его статусное слово, в то время как в поле данных записывается список переменных партнера и их значения. Если идентификатор ассоциации равен нулю, поле данных содержит список системных переменных и их значения. Если партнер выбран в качестве источника синхронизации, отклик включает в себя идентификатор партнера и его статусное слово.
Запись переменных (3). Поле данных команды содержит список присвоений, описанный выше. Отклик идентичен отклику на команду чтения переменных.
Чтение переменных часов (4). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Идентификатор ассоциации выбирает переменные системных часов или партнера точно так же, как в случае команды чтения переменных. Отклик включает в себя запрошенные идентификатор часов и статусное слово, а поле данных несет в себе список переменных часов и их значений, включая последний временной код, полученный от часов.
Запись переменных часов (5). Поле данных команды содержит список присвоений, как это описано выше. Отклик имеет формат, как в случае команды чтения переменных часов.
Установка адреса/порта Trap (6). Идентификатор ассоциации команды, статус и поле данных игнорируются. Адрес и номер порта для последующих TRAP-сообщений берутся из самого управляющего сообщения. Исходное значение счетчика TRAP для сообщений откликов заимствуется из поля номера по порядку. Идентификатор ассоциации, статус и поле данных в отклике несущественны.
Отклик на TRAP (7). Это сообщение посылается, когда происходит некоторое событие (exception) в системе, у партнера или для данных часов. Код команды равен 7, а бит R=1. Содержимое trap-счетчика увеличивается на 1 для каждого сообщения данного типа. Поле номер по порядку сообщения равно содержимому этого счетчика. При посылке сообщения TRAP используется IP-адрес и номер порта, заданные командой установки адреса и порта TRAP. В случае системного TRAP идентификатор ассоциации устанавливается равным нулю, а поле статус содержит статусное слово системы. В случае TRAP партнера поле идентификатора ассоциации соответствует партнеру, а поле статус несет в себе его статусное слово. В поле данных
Ниже рассматривается соответствие временной шкалы
Для синхронизации необходимо уметь сравнить их частоты и показания. Базовыми источниками временных стандартов традиционно служили периоды движения Земли, Луны и других космических объектов. К сожалению, они не слишком стабильны.
Первичными стандартами частоты являются осцилляторы с высокой стабильностью. Такие стандарты используют межуровневые переходы в атомах водорода, цезия и рубидия. В таблице 7.13 приведены характеристики типичных стандартов времени. Локальные же часы обычно используют некомпенсированные кварцевые генераторы. Такие генераторы не только подвержены дрейфам под действием изменения параметров окружающей среды, но систематически меняют свои свойства со временем (старение).
Даже если кварцевый генератор имеет температурную компенсацию, его частота должна время от времени сравниваться с первичным стандартом для обеспечения высокой точности.
Сеть, в которой все часы фазированы и согласованы по частоте с единым стандартом, называется изохронной. Сети, где разные часы сфазированы с разными стандартами, но все они привязаны к одной базовой частоте, называются плезиохронными. В плезиохронных системах фазы разных осцилляторов могут дрейфовать друг относительно друга, что может приводить к накоплению ошибок.
Обычно часовые осцилляторы классифицируются по трем параметрам: стабильность, разброс и блуждание. Стабильность определяется систематическими вариациями частоты со временем. Синонимом нестабильности является старение и дрейф. Разброс (называемый также временным дрожанием) характеризует кратковременные случайные вариации частоты с составляющими более 10 Гц, в то время как блуждание характеризует медленные вариации частоты с составляющими менее 10 Гц.
| |
Минимальная точность (за день) | Минимальная стабильность (за день) |
|---|---|---|
| 1 | 1 x 10-11 | Не специфицировано |
| 2 | 1.6 x 10-8 | 1 x 10-10 |
| 3 | 4.6 x 10-6 | 3.7 x 10-7 |
| 4 | 3.2 x 10-5 | Не специфицировано |
Конструкция, работа и характеристики осциллятора слоя 1 предполагаются сопоставимыми с национальными стандартами времени и часто базируются на цезиевом стандарте. Часы слоя 4 соответствуют требованиям обычных цифровых каналов и систем PBX. Слои 2-3 могут использоваться для работы с мощными синхронными каналами связи.
Для того, чтобы атомное и обычное время могли быть взаимосвязаны, национальные администрации обеспечивают работу первичных стандартов времени и частоты и совместно координируют их функционирование. Большинство морских держав поддерживают широковещательные радиослужбы времени.
Американский Национальный Институт Стандартов и Технологии (NIST — National Institute of Standards and Technology) поддерживает три радиослужбы для рассылки временной информации. Одна из них использует передачу (ВЧ или CCIR диапазон 7) на частотах 2.5, 5, 10, 15 и 20 Мгц. Сигнал распространяется, отражаясь от верхних слоев атмосферы, что неизбежно приводит к непредсказуемым вариациям задержки на принимающей стороне. С 60-секундным интервалом передается временной код, который транслируется на 100 килогерцной субнесущей со скоростью передачи 1 бит/с. Этот код содержит информацию об
Вторая служба времени NIST использует передачу (НЧ или CCIR диапазон 5) на частоте 60 КГц, она доступна на континентальной части США и вблизи берегов. Сигнал распространяется в нижней части атмосферы и по этой причине слабо подвержен вариациям времени распространения. Временной код передается с периодом в 60 секунд со скоростью 1 бит/с. Достижимая точность составляет 50 миллисекунд [BLA74]. Ряд европейских стран предлагают аналогичные службы времени (Великобритания — MSF; Германия — DCF77). Коды времени здесь включают информацию о текущем годе и предупреждение о добавляемой/вычитаемой секунде. Третья служба NIST использует передачу на частоте 468 МГц (УВЧ или CCIR диапазон 9) с геостационарных спутников GOES, три из которых перекрывают западное полушарие. Временной код перемежается с сообщениями, адресованными удаленным датчикам, и состоит из 600 4-битовых слов, передаваемых с периодом в 30 секунд. Код содержит информацию об
Министерство обороны США разработало глобальную систему определения координат GPS (Global Positioning System). Эта система базируется на 24 спутниках, движущихся по орбитам с периодом 12 часов. Система GPS может обеспечить точность определения времени на уровне нескольких наносекунд [VAN84].
Американская береговая охрана в течение многих лет использует службу радионавигации LORAN-C [FRA82]. Эта служба обеспечивает временную точность менее 1 мксек.
Система радионавигации военно-морского флота США и других стран OMEGA [VAS78] состоит из 8 передатчиков, работающих на частотах от 10.2 до 13.1 КГц (УНЧ или CIR диапазон 4) и перекрывающих весь земной шар 24 часа в сутки. Точность этой системы составляет около 1 мсек. Система OMEGA обеспечивает высокую точность для частоты, но не передает временного кода. По этой причине приемник должен предварительно получить географические координаты с точностью до градуса и время
Заметим, что не все службы времени передают информацию о текущем годе и предупреждения о добавлении/вычитании секунды. Протокол
В течение многих лет наиболее важным применением времени и частоты были всемирная навигация и космическая наука, которые зависят от наблюдений солнца, луны и звезд. За стандартную секунду (в 1957 году) принята 1/31,556,925.9747 периода вращения Земли вокруг Солнца (тропический год). Согласно этой шкале, тропический год длится 365.2421987 дней, а лунный месяц — 29.53059 дней. Однако тропический год может быть определен лишь с точностью около 50 мсек.
С древнейших времен человечеству были известны три осциллятора (процесса задающих временную шкалу) — вращение Земли вокруг своей оси, вращение Луны вокруг Земли и вращение Земли вокруг Солнца. К сожалению, с точки зрения требований современных технологий все эти три осциллятора не обладают достаточной стабильностью. В 1967 году стандартная секунда была переопределена и теперь равняется 9,192,631,770 периодов перехода в атоме цезия-133. С 1972 года стандарты времени и частоты базируются на международном атомном времени TAI (International Atomic Time). Точность таких часов составляет около микросекунды в сутки. Важно то, что новая шкала абсолютно однородна и не подвержена дрейфам.
Международное бюро мер и стандартов IBWM (International Bureau of Weights and Measures) использует астрономические наблюдения, выполненные морской обсерваторией США и другими обсерваториями для определения
Для более точной временной привязки событий после 1972 года необходимо знать, когда вставлялись или удалялись секунды коррекции (удаление пока никогда не производилось). Как определено в докладе 517 CCIR, который воспроизведен в [BLA74], дополнительные секунды вставляются после 23:59:59 в последний день июня или декабря. Неоднородность во временную шкалу (TAI) помимо добавляемых секунд вносят также 100 миллисекундные коррекции UT1, называемые DUT1, которые служат для повышения точности при навигации. Следует признать, что момент добавления секунды является началом новой (однородной) временной шкалы.
Временная шкала
Время — самый важный и невосполнимый ресурс любого человека. Проблема эта занимала людей всегда, и уже более 4 тысяч лет они пытаются как-то упорядочить учет расходования этого ресурса, создавая различные календарные системы и устройства измерения времени. Календарные системы древнего мира отражали сельскохозяйственные, политические и ритуальные нужды, характерные для того времени. Астрономические наблюдения для установления зимнего и летнего солнцестояния производились еще 4000 лет тому назад. Проблема создания календаря возникала только в обществах, где государственная стабильность поддерживалась в течение достаточно долгого времени (Китай, Египет, государство майя). В 14-ом столетии до Рождества Христова в Китае была определена длительность солнечного года — 365.25 дней и лунного месяца — 29.5 дней. Солнечно-лунный календарь действовал на ближнем востоке (за исключением Египта) и в Греции, начиная с 3-го тысячелетия до нашей эры. Ранние календари использовали либо 13 лунных месяцев по 28 дней, либо 12 месяцев с чередующейся протяженностью 29 и 30 дней.
Древнеегипетский календарь имел 12 30-дневных лунных месяцев, но был привязан к сезонному появлению звезды Сириус (sirius — sothis). Для того, чтобы примирить этот календарь с солнечным годом, был изобретен гражданский календарь, в котором добавлено 5 дней, доводящих длительность года до 365 дней. Однако со временем было замечено, что гражданский год примерно на одну четверть дня короче, чем солнечный год. Выбранная длительность года обеспечивала полное совпадение с солнечным годом раз за 1460 лет. Этот период называется циклом Сотиса (sothic-цикл). Так же, как и китайцы, древние египтяне установили длительность солнечного года равной 365,25 дней, что с точностью 11 минут совпадает с результатами современных вычислений. В 432 году до рождества Христа, почти на сто лет позже китайцев, греческий астроном Метон вычислил, что 110 лунных месяцев по 29 дней и 125 лунных месяцев по 30 дней соответствуют 6940 солнечным дням, и это лишь немного превышает 19 лет. 19-летний цикл, названный циклом Метона, установил длительность лунного месяца равной 29,532 солнечных дней, что с точностью до 2 минут совпадает с результатами современных измерений.
В древнем Риме использовался лунный календарь. Юлий Цезарь пригласил александрийского астронома Сосигенса, который разработал календарь (по понятным причинам называнный юлианским), принятый в 46 году до Рождества Христова. Календарь содержал 365 дней в году с добавлением одного дня каждые 4 года. Однако первые 36 лет по ошибке дополнительный день добавлялся каждые три года. В результате набежало лишних три дня, которые пришлось компенсировать вплоть до 8 года нашей эры.
Семидневная неделя была введена лишь в четвертом столетии нашей эры императором Константином I.
Во время романской эры 15-летний цикл переписи использовался при исчислении налогов. Последовательность имен дней недели воспроизводится через 28 лет, этот период называется солнечным циклом. Таким образом, учитывая 28-летний солнечный цикл, 19-летний цикл Метона и 15-летний переписи, получаем суперцикл протяженностью 7980-лет, называемый юлианской эрой, которая начинается в 4713 году до Рождества Христова.
К 1545 году расхождение между юлианским календарем и солнечным годом достигло 10 дней. В 1582, астрономы Кристофер Клавиус и Луиджи Лилио предложили новую схему календаря. Папа Григорий XIII выпустил буллу, в которой среди прочего указывалось, что в году содержится 365.2422 дней. Для того, чтобы более точно аппроксимировать эту новую величину, только столетние годы, которые делятся без остатка на 400, объявляются високосными, что предполагает длительность года 365,2425 дней. В настоящее время григорианский календарь принят большинством стран мира.
Но чтобы мерить расширение вселенной или распад протона, необходимо ввести стандартную схему нумерации дней. По решению Международного астрономического Союза был принят стандарт секунды и юлианская система нумерации дней (jdn). Стандартный день содержит 86,400 стандартных секунд, а стандартный год состоит из 365,25 стандартных дней.
В схеме (JDN), предложенной в 1583 французским ученым Джозефом Юлиусом Скалигером, JDN 0.0 соответствует 12 часам (полдень) первого дня юлианской эры — 1 января 4713 до нашей эры. Годы до нашей эры подсчитываются согласно юлианскому календарю, в то время как годы нашей эры нумеруются по календарю григорианскому. 1 января 1 года после Рождества Христова в григорианском календаре соответствует 3 января 1 года юлианского календаря [DER90], в JDN 1.721.426,0 день соответствует 12 часам первого дня нашей эры.
Эталоном времени может стать любой циклический процесс с достаточно стабильным периодом. Для измерения времени сначала использовали солнечные часы (Вавилон, 3,5 тысячи лет назад), которые были пригодны только днем при безоблачном небе. Им на смену пришли водяные часы, способные работать круглые сутки (если позволял объем сосуда). Позднее были изобретены песочные часы (появились примерно тысячу лет назад), которые могли обеспечить точность около 15-20 минут за сутки. Именно от этого типа часов пошла морская единица измерения времени — "склянки". Революцию в сфере измерения времени вызвало изобретение механических часов (Вестминстерские куранты 1288 год). Первые часы с маятником были изготовлены Х. Гюйгенсом в 1657 году, через 13 лет был изобретен анкерный механизм. Механическим хронометрам человечество обязано великим географическим открытиям 18 века (Дж. Кук). Первые часы с использованием электричества был разработаны А. Бейном в 1840 году, а первые кварцевые часы увидели свет в 1918 году. В 1937 году кварцевые часы Л.Эссена были установлены в Гринвичской лаборатории (GMT), они имели точность 2 мсек в сутки. В 1944 году радиостанция BBC стала передавать сигналы точного времени с погрешностью около 0,1 мсек/сутки. Сейчас кварцевые часы можно увидеть на запястьях людей и в любом компьютере. Первые атомные часы были изготовлены в 1949 году. Без этих технологических свершений технический прогресс 20-го века был бы невозможен. Кварцевые часы побывали в космосе и на Луне.
В 1967 году был принят цезиевый (Cs133) стандарт времени, где одна секунда соответствует 9192631770 периодам перехода между уровнями в атоме цезия
Не исключено, что со временем эталоном времени станет излучение миллисекундного пульсара (открыт в 1982 году), имеющего период 1,55780645169838 миллисекунды. Этот пульсар предположительно имеет массу Солнца, радиус 10 км и вращается со скоростью 642 оборота в секунду.
С 1 января 2001 года английским правительством было официально объявлено о новом стандарте времени Grinwich e-time (GET), который будет использоваться для обеспечения глобальных электронных платежей через Интернет.
Для оценки времени природа снабдила человека, как и некоторых других живых существ, так называемыми биологическими часами. Эти часы отсчитывают циклы длительностью около 24 часов. У нас, правда, есть природный генератор — это сердце, с периодом около 1 секунды. За отсчет времени ответственен теменной участок коры больших полушарий мозга. Механизмы оценки коротких временных интервалов и упорядочение наших жизненных событий происходят разными способами. Но эти механизмы хороши, пожалуй, лишь для определения времени обеда.
Калиброванный эталон времени, например, атомные часы, — довольно сложное и дорогостоящее устройство, требующее квалифицированного обслуживания. По этой причине многие пользователи не могут позволить себе такие издержки и вынуждены обращаться к услугам удаленных эталонов. Это может быть первичный эталон, размещенный где-то в локальной сети, или радио-часы. Условия доступа к сети уже предполагают наличие определенной дисперсии для времени доставки калибровочной информации. Если же эталон размещен далеко в Интернет, значения задержки и дисперсии могут возрасти многократно. Для обеспечения большей надежности калибровки обычно используют несколько эталонов, а для снижения влияния временных разбросов привлекают довольно сложные алгоритмы усреднения.
Сетевой протокол задания времени
Протокол
Точность, достижимая с помощью
Существует ряд механизмов в Интернет, которые позволяют передавать и записывать время, когда произошло какое-то событие. Это протокол daytime [POS83a], time protocol [POS83b], сообщения ICMP "временная метка" [DAR81b] и опция IP "временная метка" [SU81].
Юниксовский (4.3BSD) времязадающий демон [GUS85a] измеряет временные сдвиги различных клиентских процессов и рассылает им соответствующие поправки.
В этой модели сервер определен с помощью алгоритма выбора [GUS85b], который исключает ситуации, где сервер не выбран или выбрано более одного сервера. Процесс выбора требует возможности рассылки широковещательных сообщений.
(рис 7.1) В модели
Под стабильностью подразумевается степень постоянства задающей частоты часов, а под точностью — соответствие этой частоты национальным стандартам времени. Если не указано обратного, под временным сдвигом между часами подразумевается разница показаний этих часов, в то время как под сбоем (
Протокол
В протоколе
Клиент посылает
Процесс передачи, управляемый независимыми таймерами для каждого из партнеров, осуществляет накопление информации в базе данных и посылает сообщения
Процесс приема осуществляет получение сообщений
Субсеть синхронизации представляет собой соединение первичных и вторичных серверов времени, клиентов и каналов передачи данных. Первичные серверы времени синхронизованы непосредственно от эталонов времени, обычно от радио-часов. Вторичные серверы могут быть синхронизованы от первичных серверов или других вторичных серверов времени. Система серверов имеет иерархическую структуру, построенную по схеме клиент-сервер. Понятно, что вторичные серверы обеспечивают более низкую временную точность.
Следуя принципам, принятым в телефонной промышленности, точность каждого сервера определяется номером слоя (
Точность однократной сверки падает по мере роста значения
Дополнительным фактором является то, что каждый переход от одного слоя к другому предполагает наличие ненадежного сервера времени, который вносит дополнительные ошибки. Алгоритм выбора серверов времени использует разновидность
Такая конструкция способствует тому, что субсеть автоматически реконфигурируется и настраивается на максимально достижимую точность даже при выходе из строя первичных или вторичных серверов времени. Если даже все первичные серверы выйдут из строя или станут недоступными, их функции будут выполнять вторичные серверы, если расстояние до них, согласно алгоритму Беллмана-Форда, не превышает значения метрики, соответствующего бесконечности (разрыву связи). Если все серверы окажутся на больших расстояниях, субсеть продолжит работу при установках, выполненных при последней синхронизации (коррекции внутренних часов). Даже в этом случае достижима точность порядка миллисекунд в сутки.
Если два сервера находятся согласно алгоритму на равных расстояниях, допускается случайный выбор.
Все арифметические операции в рамках протокола выполняются в формате с
Временные метки
Временная метка формируется путем копирования показания местных часов. Это производится в момент времени, заданный каким-то событием, например, приходом сообщения. Для поддержания наивысшей точности важно, чтобы это делалось как можно ближе к оборудованию или программному обеспечению, инициирующему этот процесс. В случае, когда временная метка недоступна, например, производится перезагрузка машин, поле метки характеризуется 64 нулями.
Заметим, что с 1968 года старший бит (бит 0 целой части) равен единице, а где-то в 2036 году 64-битовое поле переполнится.
Ниже приводится обзор различных переменных и параметров, используемых протоколом. Они распределены по классам системных переменных, которые имеют отношение к операционной среде и механизму реализации местных часов. Сюда входят переменные партнеров, которые характеризуют состояние протокольных машин участников обмена, переменные пакетов, описывающие содержимое пересылаемых
Следующие переменные являются общими для двух или более систем, партнеров и классов пакетов. Когда необходимо отличить общие переменные с идентичными именами, вводится идентификатор переменной.
Адрес партнера ( peer.peeraddr, pkt.peeraddr ), порт партнера ( peer.peerport, pkt.peerport ). 32-битный IP-адрес и 16-битный номер порта партнера.
Адрес ЭВМ ( peer.hostaddr, pkt.hostaddr ), порт ЭВМ ( peer.hostport, pkt.hostport ). 32-битный IP-адрес и 16-битный номер порта ЭВМ. Эти переменные включаются в переменные состояния для поддержки мультиинтерфейсных систем.
Индикатор приращения ( sys. ) — это двухбитный код предупреждения о включении дополнительных секунд во временную шкау
| |
Величина | Значение |
|---|---|---|
| 00 | 0 | предупреждения нет |
| 01 | 1 | последняя минута содержит 61 секунду |
| 10 | 2 | последняя минута содержит 59 секунд |
| 11 | 3 | аварийный сигнал (часы не синхронизованы) |
Во всех случаях, за исключением аварийного сигнала (
Режим ( peer.mode, pkt.mode ) — это целое 3-битовое число, обозначающее код режима ассоциации, который может принимать значения, приведенные в таблице 7.2.
| Режим | Значение |
|---|---|
| 0 | Зарезервировано |
| 1 | симметричный активный |
| 2 | симметричный пассивный |
| 3 | Клиент |
| 4 | Сервер |
| 5 | широковещательный |
| 6 | для управляющих сообщений |
| 7 | зарезервировано для частного использования |
sys. ) — это целое число, указывающее код слоя локальных часов, который может принимать значения, приведенные в таблице 7.3.
| |
Значение |
|---|---|
| 0 | Не специфицирован или недоступен |
| 1 | Первичный эталон (например, радио-часы) |
| 2-15 | Вторичный эталон (через |
| 16-255 | Зарезервировано на будущее |
Для целей сравнения значение нуль для кода слоя считается выше, чем любая другая величина. Заметим, что максимальное значение целого, закодированное как пакетная переменная, ограничено параметром .
Период обмена ( 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 ). Это число с
Базовая дисперсия ( sys.rootdispersion, peer.rootdispersion, pkt.rootdispersion ). Это число с
Идентификатор эталонных часов ( sys.refid, peer.refid, pkt.refid ). Это 32-битовый код, идентифицирующий конкретные эталонные часы. В случае слоя 0 (не специфицирован) или слоя 1 (первичный эталонный источник), это 4-октетная ASCII-строка, выровненная по левому краю и дополненная при необходимости нулями, например:
| |
Код | Значение |
|---|---|---|
| 0 | Протокол маршрутизации |
|
| 0 | Цифровая служба времени (digital time service) | |
| 0 | nist | Общий модем nist |
| 0 | Временной протокол |
|
| 1 | atom | Атомные часы (калиброванные) |
| 1 | ||
| 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 ) — локальное время в формате временных меток, соответствующее моменту посылки последнего
Временная метка получения ( peer.rec, pkt.rec ) — локальное время в формате временных меток, которое соответствуюет моменту прихода последнего
Временная метка передачи ( peer.xmt, pkt.xmt ) — локальное время в формате временных меток, соответствующее моменту отправки
Следующие переменные используются операционной системой для синхронизации локальных часов.
Переменная локальные часы ( sys.clock ) содержит показание локальных часов в формате временных меток. Локальное время получается от аппаратных часов конкретной ЭВМ и дискретно увеличивается с конструктивно заданными приращениями.
Переменная Базовые часы ( sys.peer ) представляет собой селектор, идентифицирующий используемый источник синхронизации. Обычно это указатель на структуру, содержащую переменные партнера. Значение нуль указывает, что в настоящее время источник синхронизации отсутствует.
Ниже перечислены все переменные партнера, которые используются для управления и реализации измерительных процедур.
Бит конфигурации ( peer.config ) — бит, индицирующий, что ассоциация была сформирована на основе конфигурационной информации и не должна быть расформирована, когда партнер становится недоступен.
Временная метка актуализации ( peer.update ) — локальное время в формате временной метки, отмечающее момент, когда было получено последнее
Регистр достижимости ( peer.reach ) —
Таймер партнера ( peer.timer ) — целочисленный счетчик, используемый для управления интервалом между последовательно посылаемыми
Номер версии ( pkt.version ) — целое число, индицирующее номер версии отправителя. ). Исключения допускаются лишь при смене номера версии.
Когда используются фильтры и алгоритмы отбора, дополнительно привлекаются следующие переменные состояния.
Регистр фильтра ( peer.filter ) —
Счетчик корректных данных ( peer.valid ) — целочисленный счетчик, указывающий на корректные образцы, остающиеся в регистре фильтра. Он используется для определения состояния доступности и для управления увеличением и уменьшением периода рассылки сообщений.
Смещение ( peer.offset ) — число с
Задержка ( peer.delay ) — число с
Дисперсия ( peer. ) — число с
Ниже описаны параметры для всех реализаций, работающих в сети Интернет. Необходимо договориться относительно значений этих параметров для того, чтобы исключить ненужную избыточность и стабилизировать ассоциации партнеров. Приведенные параметры применимы для всех ассоциаций.
Номер версии ( ) — текущий номер версии
Порт ) — стандартный номер порта (123), присвоенный протоколу
Максимальный номер слоя ( ) — максимальный номер слоя, который может быть использован при кодировании пакетной переменной. Этот параметр обычно интерпретируется как определение бесконечности (недостижимости для протокола маршрутизации в субсети).
Максимальный возраст часов ( ) — максимальный интервал в секундах, в течение которого эталонные часы будут рассматриваться как корректные после последней сверки.
Максимальный сбой ( ) — максимальная ошибка смещения, связанная со сбоем локальных часов за время
Максимальное расстояние ( ) — максимально допустимое расстояние между партнерами при синхронизации с использованием алгоритма отбора.
Минимальный период рассылки ( ) — минимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.
Максимальный период рассылки ( ) — максимальный период рассылки, допустимый для любого из партнеров в сети Интернет. Этот период выражается в секундах и представляет собой степень 2.
Минимум избранных часов ( ) — минимальное число партнеров, необходимое для синхронизации (при использовании алгоритма отбора).
Максимум избранных часов> ( ) — максимальное число партнеров, необходимое для организации отбора (при использовании алгоритма селекции).
Минимальная дисперсия ( ) — минимальное значение приращения дисперсии для каждого из слоев в секундах (при использовании алгоритма фильтрации).
Максимальная дисперсия ( ) — максимальная дисперсия в секундах с учетом потерянных данных (при использовании алгоритма фильтрации).
Размер регистра доступности ( ) — размер регистра доступности ( peer.reach ) в битах.
Размер фильтра ( ) — размер peer.filter ) в каскадах.
Вес фильтра ( ) — вес, используемый при вычислении дисперсии фильтра (применяется при работе с алгоритмом фильтрации).
Выбранный вес ( ) — вес, используемый при вычислении выбранной дисперсии (применяется при работе алгоритма селекции).
За исключением широковещательного режима, peer.mode: симметрично активный, симметрично пассивный, клиент, сервер и широковещательный:
Симметрично активный (1). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.
Симметрично пассивный (2). Этот тип ассоциации первоначально создается по прибытии сообщения от партнера, работающего в симметрично активном режиме. Он сохраняется, пока партнер достижим и функционирует в слое, ниже или равном данной ЭВМ. В противном случае ассоциация распадается. Однако ассоциация будет существовать до тех пор, пока, по крайней мере, одно сообщение не будет послано в качестве отклика. При работе в этом режиме ЭВМ оповещает о своем намерении синхронизовать и быть синхронизованной партнером.
Клиент (3). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от достижимости или слоя своего партнера. При работе в этом режиме ЭВМ (обычно это сетевая рабочая станция) оповещает о своем намерении быть синхронизованной партнером.
Сервер (4). Этот тип ассоциации первоначально создается по прибытии запроса клиента и существует только для отклика на этот запрос. После отклика ассоциация ликвидируется. При работе в этом режиме ЭВМ (обычно рабочая сетевая станция) оповещает о намерении синхронизовать партнера.
Широковещательный (5). ЭВМ, работающая в этом режиме, периодически посылает сообщения вне зависимости от доступности или слоя партнеров. При работе в этом режиме ЭВМ (обычно сетевой сервер времени, который работает в широковещательной среде) оповещает о намерении синхронизовать всех партнеров.
ЭВМ, работающая в режиме клиента, иногда посылает
В симметричных режимах отличие клиента от сервера практически исчезает. Симметрично пассивный режим предназначен для использования временными серверами, работающими вблизи базовых узлов (нижний
Симметрично активный режим предназначен для использования серверами времени, работающими вблизи оконечных узлов (наивысший
В нормальной ситуации один партнер работает в активном режиме (симметричный активный, клиент или широковещательный), как это сконфигурировано в стартовом файле, в то время как другие работают в пассивном режиме (симметричный пассивный или сервер), часто без предварительной конфигурации. Однако оба партнера могут быть сконфигурированы для работы в симметричном режиме. Условие ошибки возникает, когда оба партнера работают в одном и том же режиме, но не в симметричном активном. В таких случаях каждый партнер будет игнорировать сообщения, поступающие от другого, и ассоциация, если она существовала, будет ликвидирована из-за недостижимости партнера.
Широковещательный режим предназначен для работы в скоростных локальных сетях с большим числом рабочих станций, где не требуется высокая точность. При типичном сценарии один или более временных серверов LAN периодически посылают широковещательные сообщения рабочим станциям, которые затем определяют время на основе предварительно заданной задержки распространения порядка нескольких миллисекунд.
Существенные события с точки зрения протокола
Алгоритмы фильтрации и селекции
Дисперсия партнера ( $$\varepsilon$$ ) содержит вклады от ошибок измерения ( $$\rho$$ ) и накопления ошибок дрейфа (
Каждый раз, когда соответствующие переменные партнеров изменяются, значения дисперсии корректируются. Ниже приводятся основные определения переменных и формулы их вычисления:
$$\theta = peer.offset, \\ \delta = peer.delay, \\ \varepsilon = peer.dispersion = \rho + \varphi \tau + \varepsilon _{\sigma }, \\ \lambda = \varepsilon + |\delta |/2,$$где $$\delta = RTT$$, $$\theta$$ — сдвиг часов, $$\varphi \tau$$ — накопление сбоя, $$\varphi = ntp.maxskew/ntp.maxage$$, $$\tau$$ — момент времени передачи исходной временной метки (на основе $$\tau$$ вычисляется $$\theta$$ и $$\delta$$ ), $$\varepsilon _{\sigma }$$ — дисперсия фильтра. Переменные, относящиеся к партнеру i, определяются следующим образом:
Окончательно, предполагая, что для синхронизации выбран i-ый партнер, система переменных определяется следующим образом:
$$\theta = комбинированное\ окончательное\ смещение\ (combined\ final\ offset), \\ \delta = \delta _{i}, \\ e = \varepsilon _{i} + \varepsilon _{\xi } + \theta , \\ \lambda = \lambda _{i}, \\ где\ \varepsilon _{\xi } — дисперсия\ выбора\ (select\ dispersion).$$Процедура получения выполняется после прихода
Пакетная процедура проверяет корректность сообщения, вычисляет задержку/смещение и вызывает другие процедуры для отбора данных и выбора источника синхронизации. При этом проверяется, чтобы переданная временная метка отличалась от последней, полученной от того же партнера. Кроме того, проверяется, чтобы исходная временная метка соответствовала последней метке, посланной тому же партнеру. В случае широковещательного режима (5) RRT =0 и полная точность операции передачи времени будет недостижимой. Однако полученная точность может быть вполне приемлемой для многих целей. Процедура вызова коррекции времени использует в качестве параметра peer.hostpoll ( peer.peerpoll может быть изменено).
Контролируется, чтобы исходная и полученная временные метки не были равны нулю. Если любая из них равна нулю, ассоциация не синхронизирована или потеряла доступ в одном или обоих направлениях.
Пусть i — четное целое число.
ti-3, ti-2, ti-1 и ti — содержимое переменных pkt.org, pkt.rec, pkt.xmt и peer.rec, соответственно. Смещение часов $$\phi,$$ $$RTT =\delta$$ и дисперсия $$\varepsilon$$ ЭВМ по отношению к партнеру равны:
где, как и прежде, $$\varphi = ntp.maxskew/ntp.maxage. <<$$ - обозначает сдвиг кода влево. Значение $$\varepsilon$$ представляет собой максимальную ошибку или дисперсию, связанную с ошибкой измерения на стороне ЭВМ, а также накопление ошибок из-за дрейфа локальных часов за время после отправки последнего сообщения, посланного партнером. Дисперсия корректируется процедурой фильтра часов (clock-filter).
Рассмотренный метод эквивалентен непрерывному стробированию, которое используется в некоторых телефонных сетях. Преимуществом метода является полная независимость от порядка и времени прихода сообщений, а также допустимость потери некоторых пакетов. Очевидно, что достижимые точности зависят от статистических свойств каналов связи.
Процедура "часовой фильтр" вызывается для вычисления задержки ( peer.delay ), смещения ( peer.offset ) и дисперсии ( peer. ) для партнера. Спецификация алгоритма часового фильтра не является составной частью протокола
Процедура коррекции показания часов вызывается процедурой приема, когда процедура фильтрации определила корректные значения смещения задержки и дисперсии для данного партнера.
Может так случиться, что локальные часы оказались сброшены. В этом случае вызывается процедура очистки (clear procedure) для каждого из партнеров, чтобы возвратить в исходное состояние фильтр часов, период рассылки и, если необходимо, осуществить выбор нового источника синхронизации.
Процедура расстояния вычисляет базовую (root) задержку $$\delta,$$ базовую дисперсию $$\varepsilon$$ и базовое расстояние синхронизации $$\lambda.$$ ЭВМ не будет синхронизовать выбранного партнера, если расстояние больше, чем .
В некоторых конфигурациях системы
Спецификация алгоритмов выбора часов и работы локальных часов не являются составной частью
Когда ЭВМ связана с первичным эталоном времени, таким, как радио-часы, удобно ввести информацию об этих часах в базу данных, как если бы это был обычный партнер. В процедуре первичных часов часы запрашиваются раз в минуту или около того, полученный же временной код используется для корректировки показаний местных часов. Когда обнуляется peer.timer для первичного партнера, процедура передачи не вызывается, а посылается запрос радио-часам с использованием ASCII-последовательности, предусмотренной для этого случая. Когда получен корректный временной код от радио-часов, он преобразуется в формат временной метки peer. устанавливается в зависимости от состояния бита оповещения временного кода, если таковой имеется, или вручную оператором. Значение для peer.peeraddr,
которое становится равно sys.refid, когда вызывается процедура корректировки показаний часов, делается равным ASCII-строке, описывающей часы.
Процедура инициализации вызывается при перезагрузке системы или при повторном запуске демона
Эта процедура является аппаратно-зависимой и служит, среди прочего, для формирования ассоциации. Адреса и режимы работы партнеров определяются в процессе чтения при перезагрузке или в результате обработки команд оператора. В случае привлечения механизма аутентификации только аутентифицированный партнер может стать источником синхронизации.
Процедура receive-instantiation вызывается процедурой приема, когда обнаруживается новый партнер. Она инициализирует переменные партнера и формирует ассоциацию. Если сообщение получено от партнера, работающего в режиме клиента (3), ЭВМ переводится в режим сервера (4); в противном случае, она устанавливается в симметрично пассивный режим (2).
Эта процедура вызывается из процедуры инициализации для того, чтобы установить переменные состояния для первичных часов. Значение peer.precision определяется из спецификации радио-часов и аппаратного интерфейса. Значение peer.rootdispersion номинально равно удесятеренной максимальной ошибке радио-часов, например, 10 мсек для WWVB или радио-часов GOES и 100 мсек для менее точных радио-часов WWV.
В некоторых конфигурациях, включающих в себя атомные часы или приемники LORAN-C, первичный эталон может выдавать только секундные импульсы и не предоставлять полного временного кода (числа секунд и пр.). В этих конфигурациях нумерация секунд может быть получена из других источников, таких, как радио-часы или даже другие
Процедура очистки вызывается, когда произошло событие, которое значительно изменило достижимость или вызвало поломку локальных часов.
Процедура запроса-коррекции (poll-update)
Процедура запроса-коррекции реализуется, когда происходит событие, которое может вызвать изменение периода запросов (рассылки) или таймера партнера. Она проверяет значения периода запросов ЭВМ ( peer. hostpoll ) и партнера ( peer.peerpoll ), а также устанавливает их в заданных пределах.
Если интервал запросов не изменился, а таймер партнера на нуле, то таймер просто сбрасывается в начальное состояние. Если интервал
Процедура расстояния вычисляет расстояние синхронизации на основе переменных партнеров.
Заметим, что, в то время как $$\delta$$ может быть в некоторых случаях отрицательной, $$\varepsilon$$ и $$\lambda$$ всегда положительны.
Конструкция
Если требуется более надежная модель, система может базироваться на списке доступа, в который включаются 32-битовый IP-адрес, 32-битовая маска и 3-битовый код режима работы. Если логическое И адреса эталона ( pkt.peeraddr ) и маски на входе ЭВМ соответствуют определенному адресу и режиму ( pkt.mode ), доступ разрешается, в противном случае отправителю запроса присылается ICMP-сообщение об ошибке. Список управления доступом служит фильтром, определяющим, какой из партнеров может сформировать ассоциацию.
Наиболее важным фактором, влияющим на точность и надежность синхронизации, является набор алгоритмов, используемых для уменьшения статистических ошибок и искажений при сбоях в различных компонентах субсети. Алгоритмы, описанные в этой статье, не являются частью стандарта
Чтобы
где w — весовой коэффициент, который служит для учета влияния расстояния синхронизации на дисперсию. В алгоритмах w выбирается меньше 1/2: w = для дисперсии фильтра (filter w = для дисперсии выбора (select
Существует две процедуры, описанные ниже: процедура "часовой-фильтр" (clock-filter), которая применяется для выбора лучших записей смещения для данных часов, и процедура "выбора часов" (clock-selection), которая применяется, чтобы выбрать наилучшие часы среди иерархического набора часов.
Процедура часовой фильтр исполняется по прибытии сообщения filtered clock offset — peer.offset ), peer.delay ) и дисперсии ( peer. ). Она также корректирует дисперсию хранящихся записей и текущее показание часов ( peer.update ).
Процедура часового фильтра применяет
Дисперсия $$\varepsilon _{i}$$ для всех корректных записей в регистре фильтра должна корректироваться, с тем, чтобы отражать накопление смещения со времени последней коррекции. Эти записи заносятся также во временный список, следуя стандартному формату записей [расстояние, индекс]. Записи в
Смещение партнера $$\theta _{0}$$, задержка $$\delta _{0}$$ и дисперсия $$\varepsilon _{0}$$ выбираются как величины, соответствующие записи с минимальным расстоянием; другими словами, записи, соответствующей первому элементу временного списка (в данной нотации имеет индекс 0).
Переменные peer.offset и peer.delay представляют смещение шкалы часов и peer. характеризует максимальную ошибку из-за неточности измерений, дрейфа и вариации записей. Все три переменные используются при выборе часов для синхронизации.
Процедура выбора часов использует переменные партнера $$\theta , \delta , \varepsilon$$ и $$\tau,$$ она вызывается, когда эти переменные изменились или изменился статус доступности. Процедура включает в себя две составные части: алгоритм пересечения (intersection algorithm) и алгоритм кластеризации (clustering algorithm). Алгоритм пересечения подготавливает список кандидатов партнеров, могущих стать источниками синхронизации и вычисляет доверительный интервал для каждого из них. Алгоритм кластеризации сортирует список кандидатов по кодам слоя и расстояния синхронизации. Системная переменная sys.peer представляет собой указатель на наиболее вероятного кандидата, если таковой имеется, или на нулевую величину в противном случае.
Каждый из партнеров просматривается последовательно и добавляется в конец списка, если он прошел ряд тестов. Для каждого из m кандидатов в список заносятся 3 записи в форме $$[указатель, тип]: [\theta - lambda;, - 1], [\theta , 0]$$ и $$[\theta + \lambda , 1]$$. В результате в списке будет 3m записей, которые будут позднее упорядочены.
Нижеприведенный алгоритм представляет собой адаптированную версию f и занесения нуля в счетчики i и c. Затем, начиная с конца упорядоченного, для каждой записи [указатель, тип] значение типа вычитается из кода счетчика i, который содержит число пересечений. Если код типа равен нулю, инкрементируется значение c, которое регистрирует число ложных кандидатов. Если для некоторых записей i >= m - f, конец записи становится нижней границей пересечения; в противном случае, f увеличивается на 1 и процедура повторяется. Без сброса значений f или c аналогичная процедура используется для нахождения верхней границы, за исключением того, что значение кода тип добавляется к счетчику. Если после того как обе границы определены c <= f,
процедура продолжается для найденных m - f кандидатов, в противном случае, f увеличивается на 1 и вся процедура повторяется.
Заметим, что работа продолжается далее данной точки, только если имеется более m/2 пересечений. Однако возможно, но не слишком вероятно, что в области пересечения окажется менее m/2 кандидатов.
В исходном алгоритме
Последующие шаги служат для того, чтобы отсеять кандидатов со слишком большими дисперсиями. Практика показывает, что число кандидатов может быть достаточно велико. Это может привести к большому числу циклов повторения процедуры отбора, которые не дадут какого-либо улучшения результатов. Длина списка кандидатов ограничивается переменной .
Заметим, что $$\varepsilon _{\xi i}$$ представляет собой дисперсию относительно i-го партнера из списка кандидатов, которая может быть вычислена методом дисперсии фильтра, описанным выше. $$\varepsilon _{j}$$ — дисперсия j-ого партнера из списка, включающая в себя вклады от ошибок измерения, от накопления дрейфа и из-за дисперсии фильтра. Если максимальное значение $$\varepsilon _{\xi i}$$ больше, чем минимальное значение $$\varepsilon _{j}$$, а число кандидатов больше, чем , то i-ый партнер удаляется из списка и процедура повторяется. Если текущий источник синхронизации является одним из членов списка и нет других кандидатов из более низкого слоя, процедура прерывается и никакие другие последующие шаги не предпринимаются. В противном случае в качестве источника синхронизации берется первый кандидат из списка.
Алгоритм сконструирован так, чтобы отдавать предпочтение партнерам из головной части списка, которые размещены в более низком слое, имеют наименьшее расстояние и могут обеспечить наибольшую точность и стабильность. С помощью правильного выбора весового коэффициента v (называемого
Для того, чтобы иметь точные локальные часы, ЭВМ должна быть оборудована аппаратными часами, которые состоят из задающего генератора и интерфейса, обеспечивающего необходимые операции установки и коррекции. Логические часы конструируются, используя эти компоненты и программы, осуществляющие подстройку частоты и абсолютного показания локальных часов. Такая система позволяет достичь точности времени до 15 нс и стабильности частоты на уровне 0.3 мс в день. Предлагаемая модель удобна для применения как компенсируемых, так и некомпенсируемых кварцевых генераторов, пригодна она и для часов, использующих для создания временной шкалы частоту сети переменного тока.
Важно заметить, что конкретная описанная реализация является лишь одной из многих возможных.
Локальные часы "пушистый шарик" представляют собой комбинацию аппаратных и программных регистров, а также алгоритмов, которые осуществляют функционирование часов — работу управляемого задающего генератора, синхронизуемого от внешнего источника. Далее следует описание его компонент и способа работы. Заметим, что все числа представлены в форме дополнений до 2, а все сдвиги являются арифметическими (заполнение знаком при сдвиге вправо и нулем при сдвиге влево).
48-битовый часовой регистр (clock) и 32-битовый предварительный счетчик (x. 32-битовый регистр компенсации дрейфа (y. 16-битовый счетчик оповещения ( z. 32-битовый регистр
настройки (
Все регистры, кроме предварительного счетчика, обычно размещаются в памяти. В типовом интерфейсе часов, таком, как DEC KWV11-C, регистр
Когда наступает момент подстройки, CLOCK.ADJ секунд вычитается из содержимого
Если локальные часы нескорректированы, они продолжают работать со смещением и частотой (при отсутствии дрейфа), установленными при последней коррекции. Корректирующая информация имеет формат 48-битного целого числа со знаком. Это число характеризует целое и дробное число миллисекунд (запятая располагается после 32-го двоичного разряда). Если полученная величина превосходит максимальное значение, заданное CLOCK.MAX, необходима постепенная пошаговая коррекция. В нормальной ситуации величина поправки вычисляется в рамках алгоритма u представляет собой 32-битовый код с битами 0-31, равными разрядам 16-47 корректирующего кода. Если некоторые младшие биты корректирующего кода не используются, они устанавливаются равными биту знака. Такие операции сдвигают положение запятой влево по отношению биту 16,
что уменьшает влияние ошибок округления. Пусть b число начальных нулей в коде регистра c — число начальных нулей в коде счетчика b установится равным:
b = b - 16 + clock.comp
b не должно быть меньше нуля (это логарифм постоянной времени обратной связи). Затем установим c равным:
c = 10 - c
Величина c представляет собой логарифм времени интегрирования с момента последней коррекции. Затем вычисляются новые значения кодов для регистров CLOCK.ADJUST и
x = u >> b, y = y + (u >> (b + b - c)).
В заключение вычисляем экспоненциальное среднее
z = z + (u << (b + clock.mult) - z) >> clock.weight,
где сдвиг влево переносит положения запятой с целью достижения большей точности.
Для каждого периода подстройки определяется корректирующий код из двух составляющих. Первая составляющая (фаза) определяется как
x >> clock.phase,
эта величина затем вычитается из предшествующего значения регистра Clock-Adjust. Результат становится новым значением кода этого регистра. Вторая компонента — (частота) определяется как
y >> clock.freq.
Совокупность фазы и частоты представляет собой окончательный корректирующий код, который затем добавляется к коду регистра (clock). В заключение счетчик
Величина b, вычисленная ранее, может использоваться для изменения величины системной переменной, характеризующей период запросов (коррекций) sys.poll.
sys.poll <- b + NTP.MINPOLL.
При условии, что шум коррекций велик, частота аппаратного задающего генератора может меняться быстро из-за изменений условий окружающей среды. В этом случае период запросов укорачивается. Когда шум незначителен, задающий генератор стабилен и период запросов растет вплоть до секунд.
Когда величина поправки превышает CLOCK.MAX, имеется возможность того, что часы окажутся настолько не синхронизованы, что наилучшим решением будет немедленная замена содержимого регистра часов. Однако, в случаях, когда вариация записи весьма высока, разумно не поверить в возможность скачкообразного изменения, если только со времени последней коррекции не прошло достаточно много времени. Следовательно, если обнаружено скачкообразное изменение, а счетчик CLOCK.MINSTEP, корректирующее сообщение игнорируется.
Если обнаружено ступенчатое изменение, коррекция заносится непосредственно в регистры Clock, а содержимое регистров Clock-Adjust и
Практически значения CLOCK.MAX могут быть превышены временным сервером лишь в условиях чрезмерной перегрузки канала или при сбоях оборудования. Наиболее часто встречаемый случай — это смена сервера при регистрации слишком большого числа ошибок или из-за сильной вариации задержки. Рекомендуется, чтобы реализации программ включали средства формирования значений CLOCK.MAX для особых случаев. Величина, на которую можно превысить CLOCK.MAX, не нарушая требования монотонности, зависит от значения приращения регистра часов (
Базовая модель надежности
Преобразование из формата sys. устанавливается на первичном сервере вручную. Следует иметь в виду, что большинство радио-часов не имеет автоматических или ручных средств добавления/вычитания секунд. Но даже в случае некорректного добавления/вычитания секунды локальные часы будут вновь синхронизованы не позднее чем через число секунд, заданное CLOCK.MINSTEP.
Формат
(рис 7.2) Формат сообщения NTP.Индикатор добавления (
Номер версии (VN) — трехбитовое поле, указывающее на номер версии протокола
Режим (Mode) — трехбитовое поле, определяющее режим, значения кодов режима приведены в таблице 7.2.
включительно.
Период запросов (poll interval) — 8-битовое поле, указывающее на максимальное значение интервала между запросами. Код, записанный в этом поле, интерпретируется как целое число со знаком и характеризует значение периода в секундах как ближайшее к величине степени двух. Коды, которые могут быть записаны в этом поле, должны лежать в интервале между и включительно.
Точность (precision) — 8-битовое поле, обозначающее точность локальных часов в секундах. Код поля интерпретируется как целая степень со знаком числа 2.
Базовая задержка (Root Delay) — 32-битовое поле, характеризующее
Базовая дисперсия (Root
Идентификатор эталонных часов (
В случае слоя 2 и больше (вторичный эталон) — это 4-октетный IP-адрес ЭВМ — первичного эталона.
Эталонная временная метка (Reference Timestamp) — поле локального времени (64-битовый формат временных меток), когда часы корректировались в последний раз.
Исходная временная метка (Originate Timestamp) определяет время, когда запрос направлен серверу (стандартный 64-битовый формат временных меток).
Получаемая временная метка (Receive Timestamp) — время, когда запрос прибыл к серверу (стандартный 64-битовый формат временных меток).
Передаваемая временная метка (Transmit Timestamp) — локальное время, когда послан отклик сервером (стандартный 64-битовый формат временных меток).
Аутентификатор (authenticator) (
В сетевой среде должны быть средства управления программами
Управляющие сообщения
IP-ЭВМ не должны обрабатывать дейтограммы длиннее 576 октетов; однако, некоторые команды или отклики могут содержать данные, не помещающиеся в одну дейтограмму. Для решения этой проблемы все октеты сообщения нумеруются, начиная с нуля. При передаче фрагментов сообщения номер первого октета записывается в поле смещения (offset), а число октетов в поле длины. Бит (M — more) устанавливается во всех фрагментах за исключением последнего.
Большинство контрольных функций включает посылку команды и получение отклика. Отправитель выбирает ненулевой порядковый номер и устанавливает статусное поле и биты R и E равными нулю. Получатель интерпретирует код операции и дополнительную информацию, содержащуюся в поле данных, вносит изменение в поле статуса и устанавливает бит R=1, а также возвращает три 32-битного слова заголовка вместе с другой дополнительной информацией поля данных. В случае неверного формата сообщения или ошибки в поле данных получатель заносит соответствующий код в поле статуса, устанавливает биты R и E равными 1 и
Некоторые команды осуществляют чтение или запись для системных переменных и переменных партнеров для ассоциации, идентифицированной в команде. Другие читают или записывают значения переменных, которые связаны с радио-часами и другими приборами, имеющими непосредственное отношение к эталонам времени. Для определения ассоциации применяется ее 16-битовый идентификатор. Для системных переменных используется идентификатор нуль. Управляющий объект может затребовать текущий список идентификаторов с тем, чтобы их задействовать в дальнейшем. При попытке употребить уже недействительный идентификатор будет прислан соответствующий отклик, после чего необходимо запросить список идентификаторов еще раз.
Некоторые события, такие, как изменение статуса доступа к партнеру, не сопряжены с какими-либо командами и происходят асинхронно. Программа может запоминать информацию о таких событиях и пересылать ее в откликах. Текущий статус и краткая аннотация чрезвычайных событий пересылаются каждым откликом. Биты в статусном поле указывают на то, произошло ли какое-либо событие с момента предыдущего отклика и было ли их больше одного.
Формат заголовков управляющих
(рис 7.3) Формат управляющего сообщения NTPПервые два бита, обозначенные ZZ, должны всегда содержать 0.
Номер версии (VN —
Режим (Mode) — трехбитовое поле, определяющее режим, значение кода режима для управляющих сообщений равно 6.
Бит отклика (R) — равен нулю для команд и 1 для откликов.
Бит ошибки (E) — равен нулю для нормального отклика и 1 в случае ошибки.
Бит продолжения (M — more) — равен нулю для последнего фрагмента и 1 для всех остальных.
Код операции (OP) — 5-битовое поле, определяющее код команды. Значения кодов и их функции представлены в таблице 7.5.
| Код | Функция |
|---|---|
| 0 | Зарезервировано |
| 1 | чтение статуса команда/отклик |
| 2 | чтение переменной команда/отклик |
| 3 | запись переменной команда/отклик |
| 4 | чтение переменных часов команда/отклик |
| 5 | запись переменных часов команда/отклик |
| 6 | установка адреса/порта trap команда/отклик |
| 7 | отклик на Trap |
| 8-31 | Зарезервировано на будущее |
Порядковый номер (Sequence) — 16-битовое поле, определяющее номер запроса или отклика и облегчающее определения их соответствия.
Статус — 16-битовое поле, содержащее код статуса системы, партнера или часов.
Идентификатор ассоциации (Association ID) — 16-битовое поле, несущее в себе идентификатор ассоциации.
Смещение (Offset) — 16-битовое поле, которое определяет положение первого октета поля данных в сообщении, передаваемом в нескольких дейтограммах (позиция задается в октетах).
Длина (Count) — 16-битовое поле, определяющее длину поля данных в октетах.
Данные — это поле содержит информацию сообщения, как для команд, так и для откликов. Максимальное число октетов в поле данных равно 468.
Аутентификатор (
Статусные слова указывают на текущее состояние системы ассоциации и часов. Эти слова интерпретируются программами сетевого мониторинга и имеют 4 разных 16-битовых формата. Статусные слова партнеров и системы соответствуют откликам для всех команд за исключением случая чтения/записи переменных часов и установки адреса/порта для TRAP. Идентификатор ассоциации нуль соответствует системным статусным словам, в то время как ненулевой идентификатор указывает на какую-то конкретную ассоциацию. Статусное слово, присланное в ответ на команду чтения или записи переменной часов, указывает на состояние оборудования и кодирующего программного обеспечения.
Системное статусное слово может присутствовать в статусном поле отклика и имеет следующий формат.
Индикатор добавления (
Источник часов (
| Код | Функция |
|---|---|
| 0 | Не специфицирован или неизвестен |
| 1 | Калиброванные атомные часы (напр., hp 5061) |
| 2 | |
| 3 | ВЧ (диапазон 7) радио (напр., chu, msf, wwv/h) |
| 4 | УВЧ (диапазон 9) спутник (напр., goes, gps) |
| 5 | Локальная сеть (напр., |
| 6 | UDP/ |
| 7 | UDP/time |
| 8 | eyeball-and-wristwatch |
| 9 | Телефонный модем (напр., nist) |
| 10-63 | Зарезервировано на будущее |
Системный счетчик событий — четырехбитовое целое число, которое обозначает число событий, происшедших с момента последнего получения статусного слова системы. Счетчик обнуляется, когда присылается в статусном поле отклика, и остается неизменным после достижения значения 15.
Код системного события — четырехбитовое число, идентифицирующее последнее
| Код | Функция |
|---|---|
| 0 | Не специфицировано |
| 1 | |
| 2 | Системный или аппаратный сбой |
| 3 | Новое статусное слово системы (изменение битов добавления или синхронизации) |
| 4 | Новый источник синхронизации или |
| 5 | Сброс системных часов (корректирующая добавка превысила clock.max) |
| 6 | Некорректное системное время или дата |
| 7 | |
| 8-15 | Зарезервировано на будущее |
Статусное слово партнера возвращается в статусном поле отклика на команду чтения статуса, а также чтения или записи переменных. Это слово появляется в списке идентификаторов ассоциации и статусных слов, присылаемых в ответ на команду чтения статуса с нулевым идентификатором ассоциации. Формат статусного слова партнера содержит следующие поля (рис 7.4)
(рис 7.4) Форматы статусных словСтатус партнера — 5-битный код, характеризующий состояние партнера, определяемого процедурой обмена. Значения этого поля представлены в таблице 7.8.
| Значение кода | Функция |
|---|---|
| 0 | Сконфигурирован (peer.config) |
| 1 | Разрешена аутентификация (peer.authenable) |
| 2 | Аутентификация успешна (peer.authentic) |
| 3 | Партнер доступен (peer.reach) |
| 4 | Зарезервировано на будущее |
Выбор партнера ( Sel ) — 3-битный код, который говорит о состоянии партнера, определенного в результате процедуры выбора часов. Значения кодов представлены в таблице 7.9.
| Значение кода | Функция |
|---|---|
| 0 | Отклонен |
| 1 | Проверка соответствия прошла успешно (тесты 1 - 8) |
| 2 | Прошел проверки корректности (алгоритм пересечения) |
| 3 | Прошел проверки как кандидат |
| 4 | Проверка ресурсов прошла успешно (алгоритм кластеризации) |
| 5 | Текущий источник синхронизации; превышено максимальное расстояние (если используются предельные проверки) |
| 6 | Текущий источник синхронизации; максимальное расстояние в пределах нормы |
| 7 | Зарезервировано на будущее |
Счетчик событий партнера — 4-битовое число событий (exception) партнера, которые произошли со времени последнего получения статусного слова в рамках отклика или сообщения TRAP. Счетчик сбрасывается при занесении кода в поле статуса отклика и перестает изменяться при достижении значения 15.
Код события партнера — 4-битовое целое число, идентифицирующее последнее событие партнера. Новое значение переписывает предыдущее. Значения кодов представлены в таблице 7.10.
| Значение кода | Функция |
|---|---|
| 0 | Не специфицировано |
| 1 | IP-ошибка партнера |
| 2 | Ошибка аутентификации партнера (бит peer.authentic был равен 1, а теперь =0) |
| 3 | Партнер не достижим (peer.reach стал равен нулю) |
| 4 | Партнер достижим (peer.reach стал не равен нулю) |
| 5 | Проблема с часами партнера |
| 6-15 | Зарезервировано на будущее |
Существует два способа подключить эталонные часы к
Состояние часов — 8-битовое число, характеризующее текущее состояние часов. Допустимые значения этого числа и их смысл представлены в таблице 7.11.
| Код | Функция |
|---|---|
| 0 | Работа часов в пределах нормы |
| 1 | Тайм-аут отклика |
| 2 | Плохой формат отклика |
| 3 | Сбой оборудования или программы |
| 4 | Потеря при передаче |
| 5 | Неверный формат или значение даты |
| 6 | Неверный формат или значение времени |
| 7-255 | Зарезервировано на будущее |
Код события для часов — 8-битовый код, идентифицирующий последнее событие для данных часов (exception). Новое значение переписывает предыдущее значение кода. Когда значение кода становится ненулевым для поля статуса радио-часов, этот код копируется в статусное поле кода события и считается, что произошло событие для системных часов или часов партнера.
Статусное слово ошибки присылается в поле статуса отклика, если обнаружена ошибка в формате сообщения или в его содержимом. Его присутствие указывается равенствами E (error) и R (response) битов 1. Коды ошибки и их значения собраны в таблице 7.12.
| Код ошибки | Значение |
|---|---|
| 0 | Не специфицировано |
| 1 | Неудачная аутентификация |
| 2 | Неверный формат или длина сообщения |
| 3 | Неверный код операции |
| 4 | Неизвестный идентификатор ассоциации |
| 5 | Неизвестное имя переменной |
| 6 | Неверное значение переменной |
| 7 | Административно запрещено |
| 8-255 | Зарезервировано на будущее |
Команды состоят из заголовка и опционного поля данных. Если поле данных присутствует, оно включает в себя список идентификаторов и, возможно, их значений.
<identifier>[=<value>],<identifier> =<value> ],...
где <identifier> представляет собой имя переменной системы или партнера в форме ASCII-последовательности, а <value> является десятичным или шестнадцатеричным числом, или строкой, соответствующей синтаксису языка C. Для большей читаемости допускается применение пробелов ([n.n.n.n], где n — десятичное число. Скобки являются
Команды интерпретируются следующим образом.
Чтение статуса (1). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Команда работает по-разному в зависимости от значения идентификатора. Если идентификатор не равен нулю, отклик содержит идентификатор партнера и статусное слово. Если идентификатор ассоциации равен нулю, отклик включает в себя системный идентификатор (0) и статусное слово, в то время как поле данных содержит список пар двоичных кодов:
<идентификатор ассоциации> <статусное слово>,
по одному на каждую определенную в данный момент ассоциацию.
Чтение переменных (2). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Если идентификатор ассоциации не равен нулю, отклик включает в себя идентификатор запрашиваемого партнера и его статусное слово, в то время как в поле данных записывается список переменных партнера и их значения. Если идентификатор ассоциации равен нулю, поле данных содержит список системных переменных и их значения. Если партнер выбран в качестве источника синхронизации, отклик включает в себя идентификатор партнера и его статусное слово.
Запись переменных (3). Поле данных команды содержит список присвоений, описанный выше. Отклик идентичен отклику на команду чтения переменных.
Чтение переменных часов (4). Поле данных команды пусто или содержит список идентификаторов, разделенных запятыми. Идентификатор ассоциации выбирает переменные системных часов или партнера точно так же, как в случае команды чтения переменных. Отклик включает в себя запрошенные идентификатор часов и статусное слово, а поле данных несет в себе список переменных часов и их значений, включая последний временной код, полученный от часов.
Запись переменных часов (5). Поле данных команды содержит список присвоений, как это описано выше. Отклик имеет формат, как в случае команды чтения переменных часов.
Установка адреса/порта Trap (6). Идентификатор ассоциации команды, статус и поле данных игнорируются. Адрес и номер порта для последующих TRAP-сообщений берутся из самого управляющего сообщения. Исходное значение счетчика TRAP для сообщений откликов заимствуется из поля номера по порядку. Идентификатор ассоциации, статус и поле данных в отклике несущественны.
Отклик на TRAP (7). Это сообщение посылается, когда происходит некоторое событие (exception) в системе, у партнера или для данных часов. Код команды равен 7, а бит R=1. Содержимое trap-счетчика увеличивается на 1 для каждого сообщения данного типа. Поле номер по порядку сообщения равно содержимому этого счетчика. При посылке сообщения TRAP используется IP-адрес и номер порта, заданные командой установки адреса и порта TRAP. В случае системного TRAP идентификатор ассоциации устанавливается равным нулю, а поле статус содержит статусное слово системы. В случае TRAP партнера поле идентификатора ассоциации соответствует партнеру, а поле статус несет в себе его статусное слово. В поле данных
Ниже рассматривается соответствие временной шкалы
Для синхронизации необходимо уметь сравнить их частоты и показания. Базовыми источниками временных стандартов традиционно служили периоды движения Земли, Луны и других космических объектов. К сожалению, они не слишком стабильны.
Первичными стандартами частоты являются осцилляторы с высокой стабильностью. Такие стандарты используют межуровневые переходы в атомах водорода, цезия и рубидия. В таблице 7.13 приведены характеристики типичных стандартов времени. Локальные же часы обычно используют некомпенсированные кварцевые генераторы. Такие генераторы не только подвержены дрейфам под действием изменения параметров окружающей среды, но систематически меняют свои свойства со временем (старение).
Даже если кварцевый генератор имеет температурную компенсацию, его частота должна время от времени сравниваться с первичным стандартом для обеспечения высокой точности.
Сеть, в которой все часы фазированы и согласованы по частоте с единым стандартом, называется изохронной. Сети, где разные часы сфазированы с разными стандартами, но все они привязаны к одной базовой частоте, называются плезиохронными. В плезиохронных системах фазы разных осцилляторов могут дрейфовать друг относительно друга, что может приводить к накоплению ошибок.
Обычно часовые осцилляторы классифицируются по трем параметрам: стабильность, разброс и блуждание. Стабильность определяется систематическими вариациями частоты со временем. Синонимом нестабильности является старение и дрейф. Разброс (называемый также временным дрожанием) характеризует кратковременные случайные вариации частоты с составляющими более 10 Гц, в то время как блуждание характеризует медленные вариации частоты с составляющими менее 10 Гц.
| |
Минимальная точность (за день) | Минимальная стабильность (за день) |
|---|---|---|
| 1 | 1 x 10-11 | Не специфицировано |
| 2 | 1.6 x 10-8 | 1 x 10-10 |
| 3 | 4.6 x 10-6 | 3.7 x 10-7 |
| 4 | 3.2 x 10-5 | Не специфицировано |
Конструкция, работа и характеристики осциллятора слоя 1 предполагаются сопоставимыми с национальными стандартами времени и часто базируются на цезиевом стандарте. Часы слоя 4 соответствуют требованиям обычных цифровых каналов и систем PBX. Слои 2-3 могут использоваться для работы с мощными синхронными каналами связи.
Для того, чтобы атомное и обычное время могли быть взаимосвязаны, национальные администрации обеспечивают работу первичных стандартов времени и частоты и совместно координируют их функционирование. Большинство морских держав поддерживают широковещательные радиослужбы времени.
Американский Национальный Институт Стандартов и Технологии (NIST — National Institute of Standards and Technology) поддерживает три радиослужбы для рассылки временной информации. Одна из них использует передачу (ВЧ или CCIR диапазон 7) на частотах 2.5, 5, 10, 15 и 20 Мгц. Сигнал распространяется, отражаясь от верхних слоев атмосферы, что неизбежно приводит к непредсказуемым вариациям задержки на принимающей стороне. С 60-секундным интервалом передается временной код, который транслируется на 100 килогерцной субнесущей со скоростью передачи 1 бит/с. Этот код содержит информацию об
Вторая служба времени NIST использует передачу (НЧ или CCIR диапазон 5) на частоте 60 КГц, она доступна на континентальной части США и вблизи берегов. Сигнал распространяется в нижней части атмосферы и по этой причине слабо подвержен вариациям времени распространения. Временной код передается с периодом в 60 секунд со скоростью 1 бит/с. Достижимая точность составляет 50 миллисекунд [BLA74]. Ряд европейских стран предлагают аналогичные службы времени (Великобритания — MSF; Германия — DCF77). Коды времени здесь включают информацию о текущем годе и предупреждение о добавляемой/вычитаемой секунде. Третья служба NIST использует передачу на частоте 468 МГц (УВЧ или CCIR диапазон 9) с геостационарных спутников GOES, три из которых перекрывают западное полушарие. Временной код перемежается с сообщениями, адресованными удаленным датчикам, и состоит из 600 4-битовых слов, передаваемых с периодом в 30 секунд. Код содержит информацию об
Министерство обороны США разработало глобальную систему определения координат GPS (Global Positioning System). Эта система базируется на 24 спутниках, движущихся по орбитам с периодом 12 часов. Система GPS может обеспечить точность определения времени на уровне нескольких наносекунд [VAN84].
Американская береговая охрана в течение многих лет использует службу радионавигации LORAN-C [FRA82]. Эта служба обеспечивает временную точность менее 1 мксек.
Система радионавигации военно-морского флота США и других стран OMEGA [VAS78] состоит из 8 передатчиков, работающих на частотах от 10.2 до 13.1 КГц (УНЧ или CIR диапазон 4) и перекрывающих весь земной шар 24 часа в сутки. Точность этой системы составляет около 1 мсек. Система OMEGA обеспечивает высокую точность для частоты, но не передает временного кода. По этой причине приемник должен предварительно получить географические координаты с точностью до градуса и время
Заметим, что не все службы времени передают информацию о текущем годе и предупреждения о добавлении/вычитании секунды. Протокол
В течение многих лет наиболее важным применением времени и частоты были всемирная навигация и космическая наука, которые зависят от наблюдений солнца, луны и звезд. За стандартную секунду (в 1957 году) принята 1/31,556,925.9747 периода вращения Земли вокруг Солнца (тропический год). Согласно этой шкале, тропический год длится 365.2421987 дней, а лунный месяц — 29.53059 дней. Однако тропический год может быть определен лишь с точностью около 50 мсек.
С древнейших времен человечеству были известны три осциллятора (процесса задающих временную шкалу) — вращение Земли вокруг своей оси, вращение Луны вокруг Земли и вращение Земли вокруг Солнца. К сожалению, с точки зрения требований современных технологий все эти три осциллятора не обладают достаточной стабильностью. В 1967 году стандартная секунда была переопределена и теперь равняется 9,192,631,770 периодов перехода в атоме цезия-133. С 1972 года стандарты времени и частоты базируются на международном атомном времени TAI (International Atomic Time). Точность таких часов составляет около микросекунды в сутки. Важно то, что новая шкала абсолютно однородна и не подвержена дрейфам.
Международное бюро мер и стандартов IBWM (International Bureau of Weights and Measures) использует астрономические наблюдения, выполненные морской обсерваторией США и другими обсерваториями для определения
Для более точной временной привязки событий после 1972 года необходимо знать, когда вставлялись или удалялись секунды коррекции (удаление пока никогда не производилось). Как определено в докладе 517 CCIR, который воспроизведен в [BLA74], дополнительные секунды вставляются после 23:59:59 в последний день июня или декабря. Неоднородность во временную шкалу (TAI) помимо добавляемых секунд вносят также 100 миллисекундные коррекции UT1, называемые DUT1, которые служат для повышения точности при навигации. Следует признать, что момент добавления секунды является началом новой (однородной) временной шкалы.
Временная шкала
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.