Определение метки времени назначения пакета (S) NTP? - PullRequest
3 голосов
/ 06 октября 2011

Я пытаюсь создать простой клиент SNTP в C, используя API сокетов Berkeley, но у меня возникают проблемы с вычислением скорректированного времени из ответного сообщения. Я получил это от RFC2030 .

Когда ответ сервера получен, клиент определяет пункт назначения Переменная метки времени как время прибытия в соответствии с его часами в Формат отметки времени NTP. В следующей таблице приведены четыре метки времени.

  • Исходная временная метка (T1): запрос времени, отправленный клиентом
  • Отметка времени получения (T2): запрос времени получен сервером
  • Метка времени передачи (T3): время, отправленное сервером
  • Метка времени назначения (T4): время, полученное клиентом

Насколько я могу судить, я могу рассчитать скорректированное текущее время, взяв время клиента и добавив к нему смещение времени t , со смещением времени, определенным как

t = ((T2 - T1) + (T3 - T4)) / 2

Мне нужно знать T4 , чтобы сделать этот расчет, но это не часть сообщения пакета. Как я могу получить эту метку времени?

1 Ответ

0 голосов
/ 06 октября 2011

Именно из этого бита, который вы опубликовали, я полагаю, что вы сможете получить Т4 таким же образом, через который вы получили Т1 (иначе говоря, они оба являются временем в соответствии с локальной машиной, когда она обрабатывает определенную стадию запрос).

Исходная временная метка (T1): запрос времени, отправленный клиентом
Метка времени назначения (T4): время ответа клиента

Упс, мое плохое предположение.

Было бы достаточно использовать что-то вроде функции C gettimeofday , чтобы создать свою собственную метку времени сразу после получения пакета ответа?

...