Администрирование ОС Solaris

       

Алгоритм работы xntpd


Для синхронизации времени в сети был разработан специальный протокол NTP (Network Time Protocol), в настоящее время обычно используется версия 4 этого протокола, но серверы NTP обладают полной обратной совместимостью. Протокол предполагает существование нескольких "слоев" эталонных источников времени.

Как известно, в мире есть так называемые эталонные источники времени - цезиевые часы и радиосигналы точного времени со спутников. Такие эталонные источники, говоря языком протокола NTP, входят в слой 0 (stratum 0) и являются максимально точными из всех доступных эталонов времени.

К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd - в других системах UNIX) распространяют точное время дальше, к серверам слоя 2 (stratum 2). Именно к серверам слоя 2 обращаются обычные серверы точного времени из локальных сетей самых разных организаций.

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

Каждый NTP-сервер использует один или несколько источников точного времени, полностью полагаясь на них. Эти источники указываются в файле /etc/inet/ntp.conf. При старте xntpd отправляет им запрос, уточняя текущее время.

Каждый из серверов времени, которым мы доверяем, опрашивается несколько раз для получения достоверной статистики задержки передачи пакета. Если указано несколько серверов, время с каждого из них запрашивается многократно. Как правило, 5 минут уходит на опрос каждого сервера для получения показаний времени, которые следует расценивать как достаточно точные.

Запрос к серверу времени выполняется так:

  • клиент (например, наш xntpd) указывает в отправляемом серверу пакете свое текущее системное время и отправляет этот пакет;
  • сервер времени получает пакет, вкладывает в него время передачи пакета, вычисленное как разность между временем отправки и временем получения пакета сервером.
    Затем он вкладывает в этот же пакет свое текущее системное время и отправляет пакет обратно;
  • клиент получает пакет и запоминает свое локальное время получения пакета.


  • Теперь клиент имеет возможность рассчитать задержку передачи пакета как половину от "времени передачи туда и обратно минус время обработки пакета сервером".

    Если разница между эталонным и текущим системным временем не превышает 128 миллисекунд, то xntpd подстраивает частоту системных часов так, чтобы они догнали или затормозились до эталонного времени. Подстройка происходит довольно медленно и плавно.

    Если разница превышает 1000 секунд, xntpd полагает, что имеет место фатальный сбой времени на локальной машине и завершается с предсмертным воплем, который запишется в /var/adm/messages.

    Если разница находится в пределах между 128 миллисекундами и 1000 секундами, то xntpd по умолчанию выставляет время сразу же, просто вызывая функцию settimeofday().

    Таким образом, коррекция времени может быть постепенной и резкой. При резкой коррекции системное время изменяется быстрым скачком, одномоментно. Можно запретить такое изменение демону xntpd, указав при запуске ключ -x. Особенно не рекомендуется изменять время резко, если часы спешат, поскольку ряд приложений, зависимых от времени (например, СУБД), могут в результате сохранить неверные данные. Впрочем, при постоянной работе сервера xntpd, как и при регулярном опросе такого сервера с помощью ntpdate, сильное расхождение времени нашего сервера и эталона исключено. Не следует использовать в качестве сервера времени компьютеры со сбоями аппаратуры или разряженной (неисправной) батарейкой CMOS (x86). Кроме того, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: иначе он не сможет обеспечить быстрый ответ и корректную обработку запроса.

    Для общения между собой серверы времени используют UDP порт 123.


    Содержание раздела