@ Карта сайта News Автора!

Bog BOS: Network Time Protocol

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2023.06.30
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: Network Time Protocol

Рекомендуется предварительное знакомство с системами отсчета времени.

В статье описывается высокоточный протокол синхронизации времени NTP (Network Time Protocol), его реализация в Unix (Linux) и Cisco, приводятся ссылки на списки публичных NTP серверов, которые можно использовать для синхронизации.

Базовые сведения о протоколе NTP

Назначение протокола состоит в синхронизации клиента или сервера с сервером или источником точного времени (радио, атомные часы или еще что). Синхронизируется не только текущее значение времени, но и частота отсчета таймера. Обеспечивает точность до милисекунды в пределах LAN и десятков милисекунд посредством WAN. Предусмотрена криптографическая защита (шифрование контрольной суммы), одновременное подключение к нескольким серверам на случай аварии, алгоритмы усреднения и т.д. Поддерживает самонастраиваемую иерархическую архитектуру сети синхронизации (симметричный механизм обмена пакетами). Главные сервера (напрямую присоединенные к источнику точного времени) образуют первый слой (stratum), присоединенные непосредственно к ним - второй слой, и т.д. Для обмена информацией между используется протокол UDP (порт 123). Используется довольно сложные алгоритмы фильтрации, селекции и комбинации пакетов на принципах максимальной вероятности. Протокол обеспечивает поддержку множества резервных серверов и путей передачи (выбор лучшего на основе алгоритма взвешенного голосования). Достигаемая точность первичного сервера - милисекунды. Типичный интервал опроса - от 1 минуты (в начале работы) до 17 минут (если все хорошо). Сервер непрерывно корректирует ход локальных часов, используя вычисленную информацию об отклонениях их частоты от истинной. Это позволяет уменьшить частоту опроса и удерживать отклонения показаний часов от истинных при временных сбоях сети. Подстройка частоты обеспечивает приличную точность часов даже при модемном соединении с Интернет. При больших отклонениях (более 128 мс) местного времени от времени выбранного сервера коррекция производится скачком, иначе путем подстройки частоты местных часов.

В качестве значения времени используется беззнаковое 64-битовое число с фиксированной точкой, число секунд в UTC. Первые 32 бита - число секунд, вторые 32 бита - дробная часть. Точность 232 пикосекунды. Старший бит взведен где-то в 1968 году, переполнение наступит в 2036 году. 0 означает неопределенное время.

Возможные классы обслуживания:

Типичная конфигурация в небольшой организации включает 3 местных сервера, каждый из которых подключен к трем внешним серверам (9 различных внешних серверов!), местные сервера соединены между собой. Не рекомендуется соединять между собой более 10 серверов. Клиенты подключены к каждому из трех местных серверов.

При описании алгоритма используются следующие термины

стабильность
способность удерживать постоянную частоту
точность (аккуратность?)
совпадение с национальным стандартом
разрешение
точность измерения
смещение часов
разница во времени между ними
skew (расхождение?)
разница в частоте между ними
надежность
доля времени, в которое часы доступны
синхронизация часов
синхронизация частоты и времени
первичный (primary) источник
синхронизированный с национальным стандартом (провод, радио, атомные часы)

Формат NTP-пакета:

Хотя для обмена информацией используется протокол UDP (connectionless), сервера хранят информацию о соседях в переменных состояния:

Для защиты от помех и ошибок передачи (UDP!) используются следующие методы:

Версия 4 обеспечивает большую точность за счет учета дрожания (jitter) источника и скорости работы сети, улучшенных алгоритмов обработки и подстройки локальных часов, более быстрой "сходимости" при запуске (минуты вместо дней). Это позволяет уменьшить частоту опроса клиентом серверов. Добавлены возможности наносекундного разрешения локальных часов (Linux?), управления с помощью SNMP и автоматической конфигурации клиентов (multicast) с обеспечением безопасности методами криптографии. В дополнение к алгоритмам симметричного шифрования (к DES CBC добавлен MD5) используется алгоритм с открытым ключом (autokey, работы не завершены).

Реализация серверов и клиентов NTP

chrony

chrony (chronyd как клиент и сервер) - реализация клиента и сервера протокола NTP. Основным преимуществом перед ntpd декларируется возможность синхронизации времени клиентом при непостоянном доступе к сети или непостоянной работе (виртуальные машины, гибернация), большая точность (миллисекунды в Интернет, десятки микросекунд в локальной сети, меньше микросекунды пи использовании PTP).

Сравнение chronyd, ntpd:

Изменения

Ключи запуска chronyd:

Файл настроек (по умолчанию /etc/chrony.conf) имеет строчный формат, каждая директива на отдельной строке. Директивы могут быть указаны в командной строке. Комментарии начинаются с символов "#", "%", ";" или "!". Основные директивы:

Утилита chronyc позволяет управлять сервером chronyd в режиме командной строки локально (сокет /var/run/chrony/chronyd.sock, /var/run/chrony имеет права доступа 750 для chrony:chrony) или по сети, по умолчанию - только локально и от 127.0.0.1. По сети в новых версиях доступны только команды мониторинга: activity, manual list, rtcdata, smoothing, sources, sourcestats, tracking, waitsync. Изменения конфигурации, внесённые утилитой chronyc, будут утеряны при перезапуске chronyd. Ключи chronyc:

Основные команды chronyc:

Имеется служба chronyd.service для запуска NTP сервера chrony в systemctl (/usr/lib/systemd/system/chronyd.service), ключи chronyd можно задать в /etc/sysconfig/chronyd (по умолчанию пусто). Отсутствует reload.

Служба chrony-wait.service (/usr/lib/systemd/system/chrony-wait.service) позволяет организовать ожидание завершения синхронизации (600 секунд).

Имеется скрипт /etc/dhcp/dhclient.d/chrony.sh для обработки запросов DHCP (вызывает скрипт /usr/libexec/chrony-helper с параметром update_daemon). Информация о серверах NTP от DHCP хранится в /var/lib/dhclient/chrony.servers.ИмяИнтерфейса. Скрипт /usr/libexec/chrony-helper также умеет обрабатывать SRV записи DNS типа _ntp._udp. Использует chronyc. как его отключить? Цепляет сам себя. Пришлось править настройки DHCP. Для ntpd работало размещение "PEERNTP=no" в /etc/sysconfig/network

Скрипт /etc/NetworkManager/dispatcher.d/20-chrony вызывается при поднятии и опускании сетевых интерфейсов и вызывает chronyc для редактирования списка NTP серверов по ответам DHCP.

/var/lib/chrony/rtc

Скрипт для архивации журналов - /etc/logrotate.d/chrony.

Для псевдоизолированной сети настраивал следующим образом (схема из времён, когда ещё не было режима orphan):

Аналог ntpdate: "chronyd -q 'pool pool.ntp.org iburst'".

ничего про chrony не знает.

Публичные NTP-сервера

В любом случае для надежной работы рекомендуется организовать от 3 до 5 локальных серверов NTP, объединенных "соседскими" связями и каждый из которых синхронизуется не менее чем с 3 внешними серверами желательно с использованием различных маршрутов доступа. Крайне нежелательно использовать несимметричные маршруты (туда по модему, обратно по спутниковому каналу).

RFC

Ссылки

@ Карта сайта News Автора!

Bog BOS: Network Time Protocol

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru