Синхронизация NTP остается без доступа

Синхронизация NTP остается без доступа

Обычно, когда машина полностью теряет соединение, ntpd пропускает пару опросов и помечает все источники как несостоявшиеся. Что кажется вполне логичным. Но я сталкивался с ситуацией, когда сервер оставался помечен как текущий источник времени, в то время как его доступность равнялась 0.

Sever развернут в той же подсети, что и целевая машина, обеспечивая очень низкую задержку, смещение и джиттер. Ситуация была смоделирована путем физического отключения соединения: просто отсоединением кабеля от клиентской машины. Я пытался воссоздать это, но с тех пор та же машина всегда красиво теряет статус синхронизации после 5-6 неудачных опросов.

Настоящий вопрос заключается в следующем: что именно определяет состояние синхронизации при потере соединения?

решение1

В RFC-1305 имеется четкое объяснение по поводу регистра охвата:

Регистр достижимости сдвигается на одну позицию влево, заменяя освобожденный бит нулем. Если все биты этого регистра равны нулю, вызывается процедура очистки для очистки фильтра часов и повторного выбора источника синхронизации, если это необходимо. Если ассоциация не была настроена процедурой инициализации, ассоциация демобилизуется.

Однако RFC-1305 устарел из-за RFC-5905, который не так уж и важен:

Далее 8-битный регистр сдвига p.reach в процессе опроса, описанном в разделе 13, используется для определения доступности сервера и свежести данных. Регистр сдвигается влево на один бит при отправке пакета, а самый правый бит устанавливается в ноль. По мере поступления допустимых пакетов самый правый бит устанавливается в единицу. Если регистр содержит какие-либо ненулевые биты, сервер считается доступным; в противном случае он недостижим.

В разделе 13 не указано никакой четкой процедуры. Но все равно похоже, что недоступный одноранговый узел должен в какой-то момент потерять свой статус синхронизации.

Мне удалось воссоздать синхронизированный статус с ситуацией reach 0, чтобы убедиться, что это редкое и совсем не постоянное явление. Потребовалось отключить "burst" в конфигурации серверов и разорвать соединение сразу после синхронизации.

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.198.10.4     194.190.168.1    2 u   20   64  177   51.137   -2.192  11.049
 192.168.1.1     193.67.79.202    2 u   65   64   77    0.459   -1.818   0.922
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*91.198.10.4     194.190.168.1    2 u   21   64  177   51.137   -2.192  11.049
+192.168.1.1     193.67.79.202    2 u    -   64  177    0.449   -3.192   1.828

Охват составил 177, что в двоичном коде равно 01111111. Таким образом, для установления синхронизации потребовалось 7 опросов.

Синхронизация была потеряна в этой позиции:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+91.198.10.4     194.190.168.1    2 u  574   64    0   63.846   -9.652   0.756
*192.168.1.1     193.67.79.202    2 u  553   64    0    0.449   -3.192   0.505
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.198.10.4     194.190.168.1    2 u  575   64    0   69.871  -10.409   0.002
 192.168.1.1     193.67.79.202    2 u  554   64    0    0.449   -3.192   0.505

Когда числа немного странные, как 64*9 = 576, а не 575, но я предполагаю, что представление может быть неточным на 1 секунду. Учитывая это, потребовалось 9 неудачных опросов, чтобы сломать статус синхронизации.

Таким образом, принимая во внимание как теорию, так и практику, можно сделать вывод, что состояние, при котором источник с нулевой досягаемостью можно считать текущим источником времени, возможно, но также редко и временно.

Связанный контент