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
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Мельников Дмитрий Анатольевич

11.2. Процедуры системного процесса

На рис.21 представлена структурная блок-схема прикладного процесса clock_select(), который реализует ряд процедур системного NTPv4-процесса. Процедура (алгоритм) селекции определяет большую группу предполагаемых корректных кандидатов (корректных источников синхронизации) на основе принципов обоюдного согласия. Процедура (алгоритм) кластеризации удаляет «менее достойных кандидатов» с целью формирования подгруппы наиболее точных претендентов на роль синхроисточников. Процедура (алгоритм) суммирования определяет наилучшее и заключительное значение сдвига, которое будет использоваться в процедуре (алгоритме) корректировки времени. Если процедура (алгоритм) селекции не смогла определить достаточно большую группу предполагаемых источников синхронизации, или не смогла определить, по крайней мере, число претендентов, равное значению константы CMIN, то тогда системный процесс завершается без настройки системных часов. Если же указанные выше процедуры прошли успешно, то тогда процедура (алгоритм) кластеризации выбирает наилучшего, с точки зрения статистических результатов, кандидата в качестве системного сервера времени, а значения его переменных используются как системные переменные.

11.2.1. Процедура (алгоритм) селекции

Процедура (алгоритм) селекции предназначена для поиска интервала перекрытия, содержащего максимальное число корректных часов, на основе принципов византийского соглашения, определённых Марцулло[?], но сама процедура была изменена с целью повышения точности.

Во-первых, выявляются те серверы времени, которые не пригодны в соответствии с правилами процедурной характеристики NTPv4-протокола, и за тем к ним блокируется доступ, с помощью прикладного процесса accept(). Далее, для оставшихся претендентов формируется набор переменных (p, type, edge). В данном наборе p — идентификатор виртуального соединения, type идентифицирует конечные точки интервала корректности (upper (верхняя) +1, middle (средняя) 0 и lower (нижняя) -1), который центрирован относительно значения переменной θ, для конкретного кандидата. С учётом этого имеем три набора: нижняя точка (p, -1, θ - λ), средняя точка (p, 0, θ) и верхняя точка (p, +1, θ + λ), где λ — корневое расстояние синхронизации, вычисляемое при каждом его применении с помощью прикладного процесса rootdist(). При реализации процедуры (алгоритма) селекции выделяют следующие итерации:

                          +-----------------+
                          | clock_select()  |
                          +-----------------+
...................................|.............
.                                  V            .
.       Да +---------+ +----------------------+ .
.       +--|Приемлем?| |      Отобранные      | .
.       |  +---------+ |      кандидаты       | .
.       V       Нет |  |                      | .
.  +---------+      |  |                      | .
.  | Добавить|      |  |                      | .
.  |кандидата|      |  |                      | .
.  +----------      |  |                      | .
.       |           V  |                      | .
.       +---------->-->|                      | .
.                      |                      | .
.  Алгоритм селекции   +----------------------+ .
...................................|.............
                                   V
                   Нет +------------------------+
         +-------------|      Претендент?       |
         |             +------------------------+
         |                         | Да
         |                         V
         |             +------------------------+
         |             | Алгоритм кластеризации |
         |             +------------------------+
         |                         |
         |                         V
         V          Да +------------------------+
         |<------------|       n < CMIN?        |
         |             +------------------------+
         V                         |
  +-----------------+              V Нет
  |   s.p = NULL    |  +------------------------+
  +-----------------+  |      s.p = v0.p       |
         |             +------------------------+
         V                         |
+-------------------+              V
|     В начало      |  +------------------------+
|(без синхронизации)|  |        В начало        |
+-------------------+  | (наличие синхронизации)|
                       +------------------------+

Рис.21. Прикладной процесс "clock_select()"
2007 - 2017 © Русские переводы RFC, IETF, ISOC.