Комментарии 14
Вот бы ещё понять, почему время в пути пакета в одну сторону равно времени в пути пакета в обратную сторону? Как учитывается время на обработку самого пакета?
В любом случае было интересно почитать, с нетерпением ждем разбор более современного протокола PTP (IEEE 1588).
В любом случае было интересно почитать, с нетерпением ждем разбор более современного протокола PTP (IEEE 1588).
0
Формула нахождения времени пакета в пути — ((Arrive – Originate) — (Transmit – Receive)) / 2.
(Transmit — Receive) — как раз время обработки пакета на сервере.
(Transmit — Receive) — как раз время обработки пакета на сервере.
0
более современного протокола PTPУ PTP иное предназначение и время там используется другое (международное атомное).
0
Просто и понятно, спасибо.
0
Ещё интересный вопрос — насколько корректно использовать битовую арифметику, учитывая, что интерпретатор python может быть запущен на множестве разных платформ с различным порядком байтов и различным размером типов переменных.
0
Вполне корректно: модуль struct позволяет явно задавать порядок байт, в данном случае использован модификатор ! в дескрипторе _FORMAT.
Размеры полей указаны там же (в _FORMAT).
The form '!' is available for those poor souls who claim they can’t remember whether network byte order is big-endian or little-endian.
Размеры полей указаны там же (в _FORMAT).
0
get_fraction не забыли? :)
0
Действительно, забыл. Сейчас добавлю.
0
К чему такие сложности:
И зачем вообще так мучаться, ведь можно то же самое сделать проще и надёжней:
Разбивая октет на два 32-разрядных, вы вручную задаёте порядок их следования — это прямая дорожка в ад )
def get_fraction(number, precision):
return int(number % 1. * 2. ** precision)
И зачем вообще так мучаться, ведь можно то же самое сделать проще и надёжней:
f = 12345.6789
bb = struct.pack('!II', int(f), get_fraction(f, 32))
g = struct.unpack('!Q', bb)[0] / 2 ** 32
print(g)
Разбивая октет на два 32-разрядных, вы вручную задаёте порядок их следования — это прямая дорожка в ад )
+1
А разве в результате обработки пакета надо менять системное время? Всегда думал, что надо корректировать ход системных часов…
+1
Прошу прощения за некропостинг, статью нашёл в гугле, когда столкнулся с ntp.
Найденные мной материалы (например) говорят о том, что клиент проставляет originate (когда отправляет пакет-запрос), сервер проставляет receive и transmit (когда принимает запрос и отправляет ответ). А у вас в статье наоборот. Но почему?..
Найденные мной материалы (например) говорят о том, что клиент проставляет originate (когда отправляет пакет-запрос), сервер проставляет receive и transmit (когда принимает запрос и отправляет ответ). А у вас в статье наоборот. Но почему?..
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем простой NTP-клиент