owned this note
owned this note
Published
Linked with GitHub
# 2024_: Комп'ютерні системи і мережі. Контрольна робота. [Прізвище, ім'я та по батькові]().
[TOC]
# [Тема. Синхронізація часу](https://hackmd.io/-JThi2LTTLGPRElx4eQQew#mjx-eqn%3A%CE%BE_a.2:~:text=%D0%BD%D0%B0%20%D1%86%D1%8C%D0%BE%D0%BC%D1%83%20%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%96%3F-,%D0%A3%D0%B7%D0%B3%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F%20%D1%87%D0%B0%D1%81%D1%83,Edit%20from%20here,-2%20%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%8F%20%D1%87%D0%B0%D1%81%D1%83)
:::info
Для виконання контрольної роботи Ви повинні скопіювати текст завдання (у форматі md ) та створити, використовуючи цей текст, на хостингу hack.md лист контрольної роботи із зазначенням Вашого прізвища, імені та по батькові.
Відразу після закінчення контрольної роботи ви маєте надіслати посилання на опублікований лист з розв'язаннями. Лист повинен бути опублікований з правами читання та правки **signed-in users**.
Остаточну оцінку буде поставлено після співбесіди у вибраних питаннях на знання записаних на Вашому листі контрольної роботи відповідей.
:::
## [Афінні моделі комп'ютерних годинників та неузгодженості](https://hackmd.io/-JThi2LTTLGPRElx4eQQew#mjx-eqn%3A%CE%BE_a.2:~:text=%D0%B2%D0%B0%D1%80%D1%82%D1%96%D1%81%D1%82%D1%8C%20%D0%B0%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B3%D0%BE%D0%B4%D0%B8%D0%BD%D0%BD%D0%B8%D0%BA%D0%B0%3F-,2.2%20%D0%90%D1%84%D1%96%D0%BD%D0%BD%D1%96%20%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%96%20%D0%BA%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B8%D1%85%20%D0%B3%D0%BE%D0%B4%D0%B8%D0%BD%D0%BD%D0%B8%D0%BA%D1%96%D0%B2%20%D1%82%D0%B0%20%D0%BD%D0%B5%D1%83%D0%B7%D0%B3%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BE%D1%81%D1%82%D1%96,Edit%20from%20here,-2.2.1%20%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%B0%20%D0%B0%D1%84%D1%96%D0%BD%D0%BD%D0%B0)
$$
\tau(t) = \theta_0 + \sigma\cdot t = \theta_0 + (1+\epsilon)\cdot t \tag{𝜏|1}
$$
де
$\theta_0$ - розузгодження комп'ютерного годинника з ідеальним годинником у початковий момент,
$\sigma \approx 1$ - швидкість ходу комп'ютерного годинника щодо ідеального годинника, починаючи з початкового моменту,
$|\epsilon| \ll 1$- дрейф (відхилення швидкості) комп'ютерного годинника щодо ідеального годинника, починаючи з початкового моменту.
$$
\begin{align}
\tau_1(t) = \theta_1 + \sigma_1\cdot t = \theta_1 + (1+\epsilon_1)\cdot t ,\\
\tau_2(t) = \theta_2 + \sigma_2\cdot t = \theta_2 + (1+\epsilon_2)\cdot t
\end{align} \tag{$𝜏_1,𝜏_2$|2}
$$
$$
\begin{align}
\theta_{1,2}(t) = \tau_1(t) - \tau_2(t)
= (\theta_1 - \theta_2) + (\sigma_1-\sigma_2)t =\\
=(\theta_1 - \theta_2) + (\epsilon_1-\epsilon_2)t
=\theta_0 + \varepsilon t
\end{align} \tag{$θ_{12}$|3}
$$
де $\theta_0$ -початкова відносна неузгодженість, а $\varepsilon$ - дрейф другого годинника відносно до першого ($|\varepsilon|\ll 1$).
- [ ] *Чи є функції $\tau(t)$ і $\theta_{1,2}(t)$ монотонно зростаючими? Доведіть.*
---
---
---
---
- [ ] *Чи є показання реальних кварцових годинників та неузгодженість пари реальних кварцових годинників монотонними функціями? Обґрунтуйте.*
---
---
---
---
- [ ] *Якщо ми знаємо $\tau_1(t)$, $\tau_2(t)$, $\theta$, $\varepsilon$, як дізнатися час атомного годинника?*
---
---
---
---
- [ ] *Якщо ми знаємо $\theta_1$, $\epsilon_1$, $\theta_2$, $\epsilon_2$, за якою формулою можна обчислювати залежність показань часу другого годинника від першого: $\tau_2(\tau_1)$?*
---
---
---
---
- [ ] *Запропонуйте процедуру (метод) визначення $\varepsilon$-дрейфу другого годинника відносно до першого*
---
---
---
---
## [Простий протокол синхронізації годинника](https://hackmd.io/-JThi2LTTLGPRElx4eQQew#mjx-eqn%3A%CE%BE_a.2:~:text=%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%20%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%97%20%D0%B3%D0%BE%D0%B4%D0%B8%D0%BD%D0%BD%D0%B8%D0%BA%D0%B0-,%D0%A3%20%D0%B4%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%B8%D1%85%20%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D1%96%D1%8F%D1%85%20%D1%83%D0%B7%D0%B3%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F%20%D1%87%D0%B0%D1%81%D1%83%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%B0%20%D0%B7%D0%BD%D0%B5%D1%85%D1%82%D1%83%D0%B2%D0%B0%D1%82%D0%B8,%D0%B3%D0%BE%D0%B4%D0%B8%D0%BD%D0%BD%D0%B8%D0%BA%D1%96%D0%B2%20.,-Comment)
У досить простих сценаріях узгодження часу можна знехтувати $\varepsilon$-дрейфом пар годинників і оцінювати тільки початкову відносну неузгодженість $\theta_0$ годинників .
- [ ] *Опишіть Ваші варіанти таких сценаріїв.*
---
---
---
---
## [Початкова оцінка поточної неузгодженості](#Початкова-оцінка-поточної-неузгодженості)
Початкова оцінка $\tilde\theta_0 = T_0 - \tau_0$ поточної неузгодженості між часовими помітками клієнта та сервера:
$$
\tilde\theta_0= \frac{(T_1-\tau_0)+(T_2-\tau_3)}{2} \tag{$\tildeθ_0$|1}
$$
де
$\tau_0$ — часова помітка клієнта про передачу пакета запиту,
$T_1$ — часова помітка сервера прийому пакета запиту,
$T_2$ — часова помітка сервера передачі пакету у відповідь,
$\tau_3$ — часова помітка клієнта про прийом пакету у відповідь.
- [ ] *Що означають показання $T_0$, $\tau_1$, $\tau_2$, $T_3$ годинників ?*
---
---
---
---
$$
\left\{
\begin{array}
\, \tau_0 +\tilde\theta_0 + \frac{1}{2}\Delta=T_1 \\
\, \tau_3 +\tilde\theta_0 - \frac{1}{2}\Delta=T_2 \tag{$\tildeθ_0$|3}
\end{array}
\right.
$$
- [ ] *Поясніть побудову системи лінійних рівнянь* ($\tildeθ_0$|3)
---
---
---
---
Для [каналів з асиметричними затримками](#огляд-асиметрії) можна переписати систему рівнянь ($\tildeθ_0$|3) як системи з обмеженням (θ,p|4):
$$
\left\{
\begin{array}
. \tau_0 +\theta_0+p\cdot\Delta=T_1 \\
\;\;\;\tau_3 +\theta_0-(1-p)\cdot\Delta=T_2 \\ \tag{θ,p|4}
0 < p < 1,
\end{array}
\right.
$$
де $p$ - параметр асиметрії (для симетричних затримок $p=1/2$)
- [ ] *Чому не можна розв'язати систему (θ,p|4) безпосередньо вiдносно до $\theta_0$ та $p$?*
---
---
---
---
### [Коефіцієнт асиметрії](#Коефіцієнт-асиметрії)
Якщо нам відомі пряма (*forward*) $\delta_f$ і зворотна (*backward*) $\delta_b$ затримки ($\Delta=\delta_f+\delta_b$), то коефіцієнт асиметрії $\xi_a$ визначається як
$$
\xi_a = { \delta_f \over \delta_b } \tag{$ξ_a$|5}
$$
Для симетричних затримок $\xi_a=1$.
- [ ] *В якому діапазоні може бути величина $\xi_a$?*
---
---
---
---
Маючи параметр $p$, коефіцієнт асиметрії затримок $\xi_a$ можна визначити як $$
\xi_a = { p \over 1-p } \tag{$ξ_a$|6}
$$
- [ ] *Як було отримано формулу $(ξ_a|6)$?*
---
---
---
---
Уточнення величини асиметрії - це важке завдання, навіть із використанням односторонніх протоколів, таких, як [UDP](https://en.wikipedia.org/wiki/UserDatagramProtocol) і протоколів, заснованих на них, наприклад, [WebRTC](https://ru.wikipedia.org/wiki/WebRTC), якщо відсутні заздалегідь синхронізовані пари атомних годинників
- [ ] *Обґрунтувати цю тезу*
---
---
---
---
- [ ] *Доведіть, що помилка $|\partial\theta|=|\tilde\theta_0-\theta|$ визначення поточної неузгодженості за формулою ($\tildeθ_0$|1), якщо припущення про симетричність затримок виявилося хибним, не перевищує ${1 \over 2}\left|{\xi_a-1\over \xi_a +1}\right|\Delta$*
---
---
---
---
- [ ] *Якою може бути мінімальна помилка $|\partial\theta|$ визначення поточної неузгодженості $\tilde\theta_0$ за формулою ($\tildeθ_0$|1), якщо припущення про симетричність затримок виявилося хибним, але нам відомий коефіцієнт асиметрії $\xi_a$? Доведіть!*
---
---
---
---
- [ ] *За якою формулою можна розрахувати помилку $|\partial\theta|=|\tilde\theta_0-\theta|$ визначення поточної неузгодженості $\theta_0$ годинників, якщо нам відомий параметр асиметрії $p$?*
---
---
---
---
- [ ] *За якою формулою можна розрахувати початкове неузгодження $\theta_0$
годинників, якщо нам відомий параметр асиметрії $p$ ?*
---
---
---
---
- [ ] *За якою формулою можна розрахувати початкове неузгодження $\theta_0$
годинників, якщо нам відомий коефіцієнт асиметрії $\xi_a$?*
---
---
---
---
## [Практичне завдання](replit.com)
Розглянемо мережну програму, в якій два клієнти (js програми всередині браузерів), що знаходяться, можливо, дуже далеко один від одного і від сервера, обмінюються своїм поточним часом, використовуючи тільки HTTP GET fetch() на боці браузерів.
- [ ] Варіант 1. *Опишіть механізм і напишіть фрагменти коду на клієнтах і сервері, відповідальних за якомога більш своєчасну передачу свого часу першим клієнтом, що підключився, - другому за запитом другого клієнта. Які основні проблеми, пов'язані з використаним протоколом, Вам необхідно вирішити для виконання завдання?*
---
---
---
---
- [ ] Варіант 2. *Опишіть механізм і напишіть фрагменти коду на клієнтах і сервері, що відповідають якомога більш своєчасну передачу свого часу другим клієнтом, що підключився, - першому. Які основні проблеми, пов'язані з використаним протоколом, Вам необхідно вирішити для виконання завдання?*
---
---
---
---
* server.js
```js=
var express = require('express');
...
...
...
```
* client1 HTML
```htmlembedded=
<div id=Info></div>
....
....
....
```
* client1 javascript
```json=
...
...
// get time
setInterval(function () {
....
....
}, 100);
...
```
* client2 HTML
```htmlembedded=
<div id=Info></div>
....
....
....
```
* client2 javascript
```json=
...
...
// req time
...
...
```
### [Вибір варіанта практичного завдання]()
Вибрати варіант за формулою
$$v = 1 + (d\mod 2),$$
де d – ваш день народження.
Якщо ви встигли запрограмувати Ваше рішення, треба надати посилання на invite Вашого проекту
# [Інформаційні матеріали]()
[2024: Комп'ютерні системи і мережі. 3. Узгодження стану. Синхронізація часу](https://hackmd.io/@ArthMax/CSNTimeSync)