Skip to content
This repository has been archived by the owner on Sep 9, 2021. It is now read-only.

Zaretskaya Lisa, lab2s, /70203 #129

Closed
wants to merge 6 commits into from

Conversation

Zaretskaya
Copy link

Запуск сервера:
python ntp_server 127.0.0.1 123

NTP (англ. Network Time Protocol — протокол сетевого времени) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью.

Суть работы:

  • Клиент имеет собственное локальное время и формирует NTP-пакет, в котором указывает Vesion_number (1-4), Mode (client=3) и Transmit. В поле Transmit клиент кладёт своё локальное время при отправке.

  • Сервер получает запрос и формирует ответный NTP-пакет. В поле Originate сервер копирует время, записанное клиентом в Transmit, в поле Receive записывает время получения им пакета, в поле Transmit - время отправки ответного пакета клиенту.

  • В итоге, у клиента оказывается 4 времени: время отправки им запроса (Originate), время получения запроса сервером (Receive), время отправки ответа сервером (Transmit) и время получения ответа клиентом (Arrive), которое смотрится в момент прихода ответа от сервера.

Корректировка времени на клиенте происходит следующим образом:

  • Находится время пакета в пути:

(Arrive − Originate) − (Transmit − Receive), где (Transmit − Receive) - время на обработку пакета на сервере, (Arrive − Originate) - время, прошедшее с момента отправки пакета клиентом до момента получения им ответа от сервера.
Но пакет шёл сначала от клиента к серверу, а затем обратно, поэтому для нахождения времени в пути в одну сторону,
полученное значение делится на два. Итоговое время пакета в пути в одну сторону:
((Arrive − Originate) − (Transmit − Receive))/2

  • Находится разница между временем клиента и сервера:

Receive − Originate - время пакета в пути от клиента к серверу =
= Receive − Originate − ((Arrive − Originate) − (Transmit − Receive))/2=
= (Receive − Originate − Arrive − Transmit)/2

  • К локальному времени на клиенте прибавляется полученная разница и выводится скорректированное время

Формат NTP-пакета:
image

LI - Leap Indicator - информация о секунде коррекции
VN - Version Number - номер версии NTP (1-4)
Mode - режим работы отправителя пакета (3 - клиент, 4 - сервер)
Stratum - Количестве слоёв между сервером и эталонными часами (1 - сервер берёт информацию прямо с эталонных часов)
Poll - интервал, с которым предполагается взаимодействие. Клиент вписывает, с каким интервалом он будет опрашивать сервер, сервер - интервал, с которым он предполагает, что его будут опрашивать, log2(сек)
Precision - точность системных часов, log2(сек)
Root delay - время, за которое показания часов доходят до NTP-сервера (число секунд с плавающей точкой)
Root dispersion - разброс показаний часов NTP-сервера (число секунд с плавающей точкой)
Reference Identifier - id источника времени сервера. Если сервер берёт информацию напрямую с эталонных часов, то здесь содержится код этих часов, иначе - адрес сервера, с которого берётся время.
Reference Timestamp - последнее время на сервере
Originate Timestamp - время отправки запроса на сервер
Receive Timestamp - время получения запроса сервером
Transmit Timestamp - время отправки ответа с сервера

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Вторая лабораторная Реальные UDP протоколы Зачтено
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants