RFC: 5905
Оригинал: Network Time Protocol Version 4: Protocol and Algorithms Specification
Предыдущие версии: RFC 958, RFC 1059, RFC 1119, RFC 1305, RFC 1361, RFC 1769, RFC 2030, RFC 4330
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Мельников Дмитрий Анатольевич

Очень важно, чтобы двоичные арифметические действия не отличались между собой при обработке знаковых и беззнаковых величин (несмотря на то, что их можно сравнивать по знаку в записи), в противном случае необходимо ввести указания по условному обозначению. Таким образом, даже на наличие различий между знаковыми датами и беззнаковыми метками времени, они обрабатываются одинаково. Существует опасность, связанная с вычислением 64-битовых меток времени перекрывающих границы эпох, например, в 2036 году, которая может привести к обнулению всех битов метки времени. Фактически, если клиент синхронизировался от сервера времени за 68 лет до начала действия протокола, то тогда всё равно будут иметь место корректные значения, даже не взирая на то, что клиент и сервер функционируют в граничащих эпохах.

Некоторые значения времени представлены в экспоненциальном формате, это относится к точности значений времени, временным константам и интервалам опроса. Для этого используется 8-битовый знаковый целочисленный формат, в котором секунды выражаются как двоичный логарифм (log2). Для обработки значений в этом формате допускается только две арифметических операции: увеличение или уменьшение. Например, если интервал опроса составляет 1024 секунды, то в экспоненциальной форме этот интервал будет равен 10.

Для преобразования системного времени в любой NTP-формат даты и метки времени необходимо, чтобы знать число секунд s от точки отсчёта первичной эпохи до значения системного времени. Для заданного s определяем:

era = s / 232 и timestamp = s - era × 232

которые имеют место и при положительных и отрицательных значениях даты. Для заданных значений эпохи (era) и метки времени (timestamp) определяем:

 s = era × 232 + timestamp

Преобразование NTP-времени и системное время и наоборот может быть с незначительными ошибками, но это не является проблемой данного стандарта.

Замечание. Число дней в нулевой эре (№0) на один больше, чем число дней в большинстве других эпох, и это не произойдет до тех пор, пока не наступит 2400 год эры №3.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.