Прикладной процесс xmit_packet()
обеспечивает передачу NTPv4-сообщения. Некоторые значения переменных в заголовке нового NTPv4-сообщения копируются из результатов функционирования процедур удалённого сервера, которые содержались в предшествующем сообщении, а другие — из системных переменных. На рис.27 представлены значения переменных, которые отображаются в каждом поле заголовка NTPv4-сообщения.
Переменные заголовка | ⇐ | Переменные |
---|---|---|
x.leap | ⇐ | s.leap |
x.version | ⇐ | s.version |
x.mode | ⇐ | s.mode |
x.stratum | ⇐ | s.stratum |
x.poll | ⇐ | s.poll |
x.precision | ⇐ | s.precision |
x.rootdelay | ⇐ | s.rootdelay |
x.rootdisp | ⇐ | s.rootdisp |
x.refid | ⇐ | s.refid |
x.reftime | ⇐ | s.reftime |
x.org | ⇐ | p.xmt |
x.rec | ⇐ | p.dst |
x.xmt | ⇐ | clock |
x.keyid | ⇐ | p.keyid |
x.digest | ⇐ | md5 digest |
Рис.27. Содержание заголовка передаваемого NTPv4-сообщения "xmit_packet" |
В тех прикладных программных реализациях, в которых для обозначения корневой задержки и корневой дисперсии используется удвоенный тип данных с плавающей точкой, необходимо производить конвертирование этих переменных в укороченный NTP-формат. Все другие поля, либо копируются без изменений с системных переменных и переменных, обрабатываемых в удалённом сервере, либо в них проставляются метки времени с использованием системных часов. Обращение к прикладному процессу poll_update()
происходит после получения корректного NTPv4-сообщения и сразу же после того, как было передано NTPv4-сообщение об опросе. Если флаг IBURST
установлен, то тогда интервал опроса является фиксированным и равным 2 секундам. В противном случае, экспоненциальному значению интервала опроса сервера hpoll
присваивается наименьшее значение среди: ppoll
, изъятого из последнего принятого NTPv4-сообщения, или hpoll
, сформированного прикладным процессом poll()
, но это значение не должно быть меньше значения MINPOLL
и больше значения MAXPOLL
. Таким образом, процедура корректировки времени может быть полностью основана на выборках, но не может быть полностью зависима от них. Этот принцип позволяет сохранить динамическое поведение подсети синхронизации и защитить её от протокольных ошибок.
Экспоненциальное значение интервала опроса преобразуется в обычное значение интервала, которое после прибавления самого последнего значения переменной определяет следующую переменную, то есть время следующего интервала опроса. И в заключении, самое последнее значение переменной записывается в текущем счётчике секунд.