Pull to refresh

Comments 14

Вот бы ещё понять, почему время в пути пакета в одну сторону равно времени в пути пакета в обратную сторону? Как учитывается время на обработку самого пакета?

В любом случае было интересно почитать, с нетерпением ждем разбор более современного протокола PTP (IEEE 1588).
Формула нахождения времени пакета в пути — ((Arrive – Originate) — (Transmit – Receive)) / 2.
(Transmit — Receive) — как раз время обработки пакета на сервере.

Я думаю, что речь о том, что в общем случае, если сервер и клиент не в одной сети, то гарантировать идентичность времени "туда" и "обратно" в принципе невозможно

более современного протокола PTP
У PTP иное предназначение и время там используется другое (международное атомное).

Ещё интересный вопрос — насколько корректно использовать битовую арифметику, учитывая, что интерпретатор python может быть запущен на множестве разных платформ с различным порядком байтов и различным размером типов переменных.

Вполне корректно: модуль struct позволяет явно задавать порядок байт, в данном случае использован модификатор ! в дескрипторе _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).
К чему такие сложности:
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-разрядных, вы вручную задаёте порядок их следования — это прямая дорожка в ад )
А разве в результате обработки пакета надо менять системное время? Всегда думал, что надо корректировать ход системных часов…
Прошу прощения за некропостинг, статью нашёл в гугле, когда столкнулся с ntp.
Найденные мной материалы (например) говорят о том, что клиент проставляет originate (когда отправляет пакет-запрос), сервер проставляет receive и transmit (когда принимает запрос и отправляет ответ). А у вас в статье наоборот. Но почему?..
Я писал, что клиент отправляет значение Originate, но в другом поле — Transmit, и уже сервер копирует значение в Originate. По вашей ссылке возвращается 404, если отправите снова — посмотрю.
Sign up to leave a comment.

Articles