Skip to content
This repository was archived by the owner on Sep 9, 2021. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 90 additions & 80 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,91 +1,101 @@
# Лабораторные работы за осенний семестр 2020
## Лабораторная работа 2 – NTP-клиент

В `master` ветке данного репозитория присутствуют актуальные задания, включая
распределение протоколов по студентам.
### Инструкция по запуску
Запускается из командной строки с необязательными параметрами:
`python3 ntp_client.py -s <server> -t <timeout>`
Значения по умолчанию:
* сервер: [pool.ntp.org](https://www.ntppool.org/ru/)
* порт: 123
* время ожидания ответа от сервера: 10 сек

# Прогресс

Легенда:
### Тестирование работы
Пример работы клиента:
```
$ python3 ntp_client.py
Server: pool.ntp.org
--------------------------------------
Server time: 2021-01-10 22:57:41.563910
Local time: 2021-01-10 22:57:41.369149
Round trip time: 92 ms
Offset: 149 ms
```

| Символ | Значение |
| -- | -- |
| | Работа не сдана или находится на рассмотрении |
| + | Работа принята |
| ! | Работа рассмотрена, требуется демо |
| ? | Работа рассмотрена, но требует доработки |
| - | Работу сдавать не требуется |
| -------- | -------- |
| SSH ключ | [Отправить SSH ключ преподавателю](https://insysnw.github.io/labs/900-ssh-keygen/) |
| Л.1a | [TCP чат](https://insysnw.github.io/labs/01-tcp-chat/) |
| Л.1б | [TCP чат](https://insysnw.github.io/labs/01-tcp-chat/) (неблокирующие сокеты) |
| Л.2c | [UDP сервер существующего протокола](https://insysnw.github.io/labs/02-udp-real-protocol/) |
| Л.2к | [UDP клиент существующего протокола](https://insysnw.github.io/labs/02-udp-real-protocol/) |
| Л.3 | Задание из методички |
Превышено время запроса:
```
$ python3 ntp_client.py -s ntp.nict.jp
Server: ntp.nict.jp
--------------------------------------
Timeout! Try to connect to the server again
```

## Группа 201
### Описание протокола
**NTP (Network Time Protocol)** — протокол, который работает поверх UDP и используется для синхронизации локальных часов с часами на сервере точного времени. Актуальная версия – 4, она же используется в лабораторной работе.

| ФИО | SSH ключ | Л.1a | Л.1б | Л.2c | Л.2к | Л.3 |
| -- | -- | -- | -- | -- | -- | -- |
| Антропова А.А. | + | | | | | |
| Белов Е.А. | + | | | tftp | dhcp | |
| Буй К.Д. | + | | | tftp | dns | |
| Гладкова Е.Д. | + | | | | | |
| Голзицкий Н.С. | + | | | | | |
| Гуляев Д.В. | | | | | | |
| Данилов А.И. | + | | | dhcp | ntp | |
| Казанджи М.А. | + | | | ntp | snmp | |
| Киселев Н.Д. | + | | | dns | tftp | |
| Лялин А.С. | + | | | | | |
| Натура А.А. | + | | | snmp | dns | |
| Никитин И.Н. | + | | | | | |
| Романов А.Л. | + | | | dns | dhcp | |
| Свечников Р.А. | + | | | dhcp | dns | |
| Сибагатулин А.Ф. | | | | | | |
| Товпеко К.А. | + | [?](https://github.com/insysnw/2020h2/pull/2) | [?](https://github.com/insysnw/2020h2/pull/2) | dns | ntp | |
| Черноног С.А. | + | | | | | |
| Шаляпин Г.А. | + | | | | | |
#### Формат пакетов

## Группа 203
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI | VN |Mode | Stratum | Poll | Precision |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Delay |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Root Dispersion |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reference ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Reference Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Origin Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Receive Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Transmit Timestamp (64) +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Extension Field 1 (variable) .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Extension Field 2 (variable) .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| dgst (128) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| ФИО | Ssh ключ | Л.1a | Л.1б | Л.2с | Л.2к | Л.3 |
| -- | -- | -- | -- | -- | -- | -- |
| Ворошилов А.А. | + | | | | | |
| Гусев Н.С. | | | | | | |
| Зарецкая Е.С. | | | | | | |
| Иванов И.Д. | + | | | | | |
| Калашников Р.А. | | | | dns | snmp | |
| Костарев В.И. | + | | | dhcp | snmp | |
| Любченкова А.А. | + | | | tftp | dns | |
| Меньшов П.А. | + | | | dns | tftp | |
| Морозов Е.С. | + | | | dns | dhcp | |
| Никитина Д.С. | + | | | | | |
| Овсянников Е.А. | + | | | | | |
| Орлова П.А. | + | | | tftp | dns | |
| Пентегов А.О. | + | | | | | |
| Семёнов Д.С. | + | | | dhcp | dns | |
| Середин К.В. | + | | | dhcp | ntp | |
| Трушин И.А. | + | | | tftp | dhcp | |
| Черникова А.С. | + | | | tftp | ntp | |
| Шелепов В.А. | + | | | dhcp | tftp | |
* **Leap indicator (LI), 2 бита** — число, предупреждающее о секунде координации. Может быть от 0 до 3, где 0 — нет коррекции, 1 — последняя минута дня содержит 61 с, 2 — последняя минута дня содержит 59 с, 3 — неисправность сервера. При значении 3 полученным данным доверять не следует. Вместо этого нужно обратиться к другому серверу. Наш псевдосервер будет всегда возвращать 0.
* **Version number (VN), 3 бита** — номер версии протокола NTP (1–4). Мы поставим туда 3.
* **Mode, 3 бита** — режим работы отправителя пакета. Значение от 0 до 7, где 3 — клиент, а 4 — сервер.
* **Stratum, 1 байт** — сколько посредников между клиентом и эталонными часами (включая сам NTP-сервер). 1 — сервер берет данные непосредственно с атомных (или других точных) часов, то есть между клиентом и часами только один посредник (сам сервер); 2 — сервер берет данные с сервера со значением Stratum 1 и так далее.
* **Poll, 1 байт** — целое число, задающее интервал в секундах между последовательными обращениями. Клиент может указать здесь интервал, с которым он хочет отправлять запросы на сервер, а сервер — интервал, с которым он разрешает, чтобы его опрашивали.
* **Precision (точность), 1 байт** — число, которое сообщает точность локальных системных часов. Значение равно двоичному логарифму секунд.
* **Root delay (задержка сервера), 4 байта** — время, за которое показания эталонных часов доходят до сервера NTP. Задается как число секунд с фиксированной запятой.
* **Root dispersion, 4 байта** — разброс показаний сервера.
* **RefID, 4 байта** (идентификатор источника) — ID часов. Если поле Stratum равно единице, то RefID — имя атомных часов (четыре символа ASCII). Если текущий сервер NTP использует показания другого сервера, то в RefID записан IP-адрес этого сервера.
* **Reference, 8 байт** — последние показания часов сервера.
* **Originate, 8 байт** — время, когда пакет был отправлен, по версии сервера.
* **Receive, 8 байт** — время получения запроса сервером.
* **Transmit, 8 байт** — время отправки ответа сервера клиенту, которое заполняет клиент.

# Требования к отчету:
Со стороны клиента заполняются только поля LI (unknown), VN (4), Mode (3) и Transmit.

* Инструкция по использованию;
* Инструкция по сборке/установке;
* Описание используемого протокола;
* Своего для первой и третьей лабораторной;
* Используемого подмножества для второй;
* ???
* PROFIT

Отчет можно писать как в сообщении к PR-у, так и присылать в иных
форматах (`.pdf`, `.docx`, `.txt` и т.п.).

# Порядок сдачи

* Fork от данного репозитория
* Push каждой лабораторной в отдельную ветку
* Создание отдельного PR на каждую лабораторную
* Ставите label по сдаваемой лабе (`First lab`, `Second lab`, `Third lab`)

При создании PR, в качестве напоминалки, сделан шаблон.
#### Процесс передачи данных
Клиент посылает запрос на сервер, запоминая, когда этот запрос был отправлен. Сервер принимает пакет, запоминает и записывает в пакет время приема, заполняет время отправки и отвечает клиенту. Клиент запоминает, когда он получил ответ, и получает нечто вроде RTT (Round-Trip Time) до сервера. Дальше он определяет, сколько времени понадобилось пакету, чтобы дойти от сервера обратно ему (время между запросом и ответом клиента минус время обработки пакета на сервере, деленное на два).
Loading