Протоколы Internet


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


/p>

peer.reach

if (valid data) call clock-update;

endif

else if (peer.config = 0) begin

peer.hostpoll

/* послать немедленно отклик */

call poll-update;

call transmit;

ликвидировать ассоциацию;

endif

endcase

end receive procedure;

Пакетная процедура

Пакетная процедура проверяет корректность сообщения, вычисляет задержку/смещение и вызывает другие процедуры для отбора данных и выбора источника синхронизации. Тест 1 требует, чтобы переданная временная метка отличалась от последней, полученной от того же партнера. Тест 2 требует, чтобы исходная временная метка соответствовала последней метке, посланной тому же партнеру. В случае широковещательного режима (5) rtt=0 и полная точность операции передачи времени будет недостижимой. Однако, полученная точность может быть вполне приемлемой для многих целей. Процедура вызова коррекции времени использует в качестве параметра peer.hostpoll (peer.peerpoll может быть изменено).

begin packet procedure

peer.rec

/* забрать полученную временную метку */

if (pkt.mode ? 5) begin

test1

/* Тест 1 */

test2

/* Тест 2 */

endif

else begin

pkt.org

/* потеря временной метки из-за ошибки */

pkt.rec

test1;

/* ложные тесты */

test2;

endif

peer.org

/* актуализация исходной временной метки */

peer.peerpoll

/* скорректировать период рассылки */

call poll-update(peer.hostpoll);

Тест 3 требует, чтобы исходная и полученная временные метки не были равны нулю. Если любая из них равна нулю, ассоциация не синхронизирована или потеряла доступ в одном или обоих направлениях.

test3

rtt и временное смещение по отношению партнера вычисляется следующим образом. Пусть i четное целое число.

Тогда ti-3, ti-2, ti-1 и ti - содержимое переменных pkt.org, pkt.rec, pkt.xmt и peer.rec, соответственно. Смещение часов j, rtt=d и дисперсия e ЭВМ по отношению к партнеру равны:

d = (ti - ti-3) - (ti-1 - ti - 2),

j = ((ti - 2 - ti-3) + ( ti-1 - ti))/2,

e = (1 j (ti - ti-3),

где, как и прежде, j = ntp.maxskew/ntp.maxage. e представляет собой максимальную ошибку или дисперсию, связанную с ошибкой измерения на стороне ЭВМ, а также накопление ошибок из-за дрейфа локальных часов за время после посылки последнего сообщения, посланного партнером. Дисперсия корректируется процедурой фильтра часов (clock-filter).




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



Книжный магазин