6. Типы данных (логическая харктеристика)
Все значения NTP-времени представляются в бинарном формате (twos-complement format), в котором биты нумеруются, начиная с нуля, слева на право (причём крайний левый бит — бит высшего порядка или старший). В настоящее время существуют три формата NTP-времени:
32-битовый укороченный формат (рис.4,1)
Этот формат используется в полях заголовка NTP-сообщения, содержащих значения задержки и дисперсии, когда использование значений с высокой точностью или в более широком диапазоне не приемлемо. Он включает 16-битовое поле целых секунд и 16-битовое поле долей секунды.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Секунды | Доли секунды | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Рис.4,1. 32-битовый укороченный формат NTP-времени
64-битовый формат метки времени (рис.4,2)
Этот формат используется в заголовках NTP-сообщений или в других полях с ограниченной длиной. Он включает 32-битовое поле целых секунд (136 лет) и 32-битовое поле долей секунды (точность 232 пикосекунды).
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Секунды | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Доли секунды | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Рис.4,2. 64-битовый формат метки времени
128-битовый формат даты (рис.4,3)
Этот формат используется только тогда, когда существует возможность хранения с достаточным объёмом памяти. Он включает 64-битовое поле целых секунд (584 млрд. лет) и 64-битовое поле долей секунды (0,05 аттосекунды или 0,5е-18 ). С целью согласования отображений между форматами поле целых секунд разделено на два субполя: 32-битовое поле номера эпохи и 32-битовое поле сдвига эпохи. Эпохи не могут напрямую формироваться NTP-протоколом, и в этом просто нет необходимости. Если это будет необходимо, то тогда номер эпохи может быть получен из внешних источников, например, из файловой системы или специализированного аппаратного устройства.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Номер эпохи | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Сдвиг относительно точки отсчёта эпохи | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Доли секунды | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Рис.4,3. 128-битовый формат даты
В форматах даты и метки времени точкой отсчёта первичной эпохи, или основной датой нулевой эры (№0), является 0000 часов 1 января 1900 года по UTC-шкале времени, когда все биты нулевые. Необходимо заметить, что строго говоря, UTC-времени не существовало до 1 января 1972 года, но существует договорённость о том, что оно существовало все вечность, и даже в случае, когда вся информация о применении вставочных секунд могла быть потеряна. Все даты определяются относительно первичной эпохи. Если значение даты больше чем нулевой, то она представляется временем после точки отсчёта первичной эпохи, если же — меньше, то она представляется временем до точки отсчёта первичной эпохи.
Замечание. Поле «Сдвиг эпохи» в формате даты и поле «Секунды» в формате метки времени интерпретируются одинаково.