Протоколы Internet


Сетевой протокол времени NTP - часть 18


/p>

pkt.rec

pkt.xmt

peer.xmt

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

peer.reach

/* актуализация доступности */

if (peer.reach = 0 and peer.config =0)

begin

ликвидируем ассоциацию;

exit;

endif

Если корректные данные введены в сдвиговый регистр фильтра хотя бы раз за время предыдущих двух периодов рассылки (младший бит peer.reach равен 1), счетчик корректных данных увеличивается на 1. После восьми таких удачных периодов интервал рассылки увеличивается. Процедура выбора часов вызывается, если необходимо заменить источник синхронизации.

if (peer.reach & 6 ? 0)

/* Проверка младших двух бит */

if (peer.valid

/* получены корректные данные */

peer.valid

else peer.hostpoll

else begin

peer.valid

/* ничего не слышно */

peer.hostpoll

call clock-filter(0, 0, ntp.maxdisperse);

call clock-select;

/* выбираем источник синхронизации */

endif

call poll-update;

end transmit procedure;

Процедура получения

Процедура получения выполняется по приходу NTP-сообщения. Она проверяет сообщения, интерпретирует различные режимы и вызывает другие процедуры для фильтрации данных и выбора источника синхронизации. Если номер версии в пакете не соответствует текущей версии, сообщение может быть отброшено. Если получено управляющее сообщение NTP и код режима пакета равен 6 (управление), вызывается процедура управляющего сообщения. IP-адреса отправителя и адресата, а также номера портов устанавливаются соответствующими заданному партнеру. Если соответствия нет, производится новая инсталляция протокольной машины и формируется новая ассоциация.

begin receive procedure

if (pkt.version ? ntp.version>) exit;

#ifdef (control messages implemented)

if (pkt.mode = 6) call control-message;




Начало  Назад  Вперед