---
# System prepended metadata

title: Іспит

---

# [2024: Комп'ютерні системи та мережі. Екзаменаційний лист 3.]()
[TOC]



---
##  [Прізвище Ім'я та по Батькові. Дата народження.]()

   Якушев Максим Дмитрович, 22.10.2002
---


<img src="https://hackmd.io/_uploads/HJ7JHjx7R.jpg" width="300" height="400">

# [1. Екзаменаційні запитання (5 балів)]()

- [ ] *1.1 Для якого класу алгоритмів контролю перевантаження канала при одночаснiй роботі з каналом декількох з'єднань відбувається адаптивна збіжність до рівного використання ресурсів каналу?  Чому це відбувається? (2 бали)*
### [Відповідь]()

:::info
Алгоритми адитивно-мультиплікативного керування вікном (AIMD) забезпечують адаптивну збіжність до рівного використання ресурсів каналу при одночасній роботі декількох з'єднань.  Це відбувається завдяки їхнім властивостям лінійного зростання і мультиплікативного зменшення вікна контролю:

Лінійне зростання: Після кожного успішного отримання ACK-сигналу без втрат, розмір вікна збільшується на фіксовану величину (адитивно). Це забезпечує поступове і контрольоване збільшення використання каналу, що допомагає уникати різких змін у завантаженні мережі.

Мультиплікативне зменшення: При виявленні перевантаження (наприклад, через втрату пакета), розмір вікна зменшується в кілька разів (мультиплікативно). Це дозволяє швидко знижувати навантаження на канал, що сприяє швидшому відновленню мережі після перевантаження.

Такий механізм дозволяє з'єднанням, що використовують один і той же канал, адаптуватися до поточних умов мережі і поступово збільшувати свої обсяги трафіку, поки не буде досягнута межа, після чого вони зменшують свої вікна і починають процес знову. Завдяки цьому відбувається рівномірний розподіл ресурсів між всіма активними з'єднаннями.
:::

- [ ]  *1.2 Чому інші схеми: мультиплікативне зростання/мультиплікативне зменшення (MIMD) та адитивне зростання/адитивне зменшення (AIAD) - не сходяться до стабільного і справедливого спільного поділу ресурсів каналу?*
### [Відповідь]()

:::info
Через свої властивості MIMD та AIAD не можуть ефективно і справедливо розподіляти ресурси каналу. MIMD схильний до нестабільності через експоненційні зміни вікна, тоді як AIAD повільний у адаптації до змін у мережі, що може призводити до несправедливого розподілу ресурсів. AIMD, з іншого боку, поєднує лінійне зростання і мультиплікативне зменшення, що дозволяє досягати стабільного і справедливого розподілу ресурсів серед з'єднань.
:::


# [2. Розрахункові екзаменаційні завдання (20 балів)]()

## [2.1 Час передачі даних (10 балів)]()

Обчисліть час передачі даних для протоколу зупинки та очікування, якщо Вам відомі: обсяг даних 3Мбайт, максимальний розмір пакету передачи 3000 байт, дистанція між клієнтом та сервером 10000 км, смуга пропускання каналу 200 Кбіт/c, та тип каналу -- радіорелейний.

### [Розв'язання]()

:::info
Параметри:
Обсяг даних: 3Мбайт =  3 * 1024 * 1024 байт = 3145728 байт
Розмір пакету передачи: 3000 байт
Відстань: 10000 км
Cмуга пропускання каналу: 200 Кбіт/c = 200000 біт/c
Тип каналу: радіорелейний, швидкість поширення сигналу: 300000 км/с

1.Розрахунок затримки розповсюдження:

$\delta=\frac{l}{s}$, де $l$ - відстань, а $s$ - швидкость поширення сигналу.
$\delta=\frac{10000}{300000}\approx 0.0333 \approx \frac{1}{30}сек.$

2.Розрахунок затримки передавання:

$\tau = \frac{D}{B}$, де $D$ - розмір фрейму даних, а $B$ - смуга пропускання каналу.
Розмір пакету в бітах: $3000 байт \times 8 біт/байт =24000 біт$
$\tau = \frac{24000}{200000}=0.12сек.$

$0.12 \times 2= 0.24 сек.$ 

3.Загальний час передачі пакету:

$T_\Sigma=\tau + 2\delta=0.12+2\times0.0333=0.24+0.0666=0.3066 сек.$

4.Ефективна пропускна здатність:

$B_e=\frac{D}{T_\Sigma}=\frac{3145728}{3000}=1048.5=1049 пакети$

5.Загальний час передачі всіх пакетів:

$1049 \times 0.3066=321.62 сек.$

Відповідь: 321.62 сек.
:::

## [2.2 Відносна затримка (10 балів)]()

Обчисліть відносну затримку для умов пункта 2.1.  Порівняйте її з відносною затримкою для більш ефективного протоколу. Яка назва у цього ефективного протоколу і на якому рівні стеку OSI він працює?

### [Розв'язання]()

:::info
Відносна затримка:

$r=\frac{\delta}{\tau}=\frac{0.0333}{0.12}=0.2775 сек.$

Порівняння з відносною затримкою для більш ефективного протоколу:

Назва: Sliding window protocol
Рівень стеку: OSI layer 2

Відносна затримка для протоколу вікна згортання дозволяє відправляти кілька пакетів підряд до отримання підтвердження. Це дозволяє каналу зв'язку бути більш завантаженим, оскільки він використовується більш ефективно. Протокол може динамічно змінювати розмір вікна в залежності від умов мережі. Це дозволяє оптимізувати використання ресурсів мережі та підтримувати високу пропускну здатність.
:::


# [3. Екзаменаційне завдання на реалізацію (25 балів)]()

## [3.1 Час передачі даних для протоколу зупинки та очікування]()
Використовуючи чистий протокол WebSocket, побудувати клієнт-серверний додаток для сервера на хостінгу replit.com, що виконує емпіричну оцінку **часу передачі даних** для протоколу зупинки та очікування.
**Обсяг даних** для передачі: 3Мбайт.
Гарантуйте у коді **максимальний розмір кадру** даних 3000 байт.
Обчислите приблизну **затримку поширення** між клієнтом та сервером.
Отримайте емпіричну оцінку **затримки передавання** кадру даних.
Отримайте емпіричну оцінку **смуги пропускання** каналу.

### [Опис розв'язання (заменіть своїм)]()

:::info
...............
Робота зроблена відповідно до алгоритму описаного в .....


Код відображає на веб-сторінці час передачі даних для протоколу зупинки та очікування. Для синхронізації використовується бібліотека superlib

1. Підключення бібліотеки superlib:

```html=1
<script src="/superlib/superlib.js"></script>
```

2. Створення HTML-структури сторінки:
```html=1
<body onload="start()">
  <pre id=MyClocks>...</pre>
  <hr>
  <pre id=TimeConsole></pre>
  <hr>
</body>

```
Тут використовуються два pre-елементи: MyClocks та TimeConsole.
MyClocks буде відображати час сервера та браузера, а TimeConsole буде відображати час передачі даних для протоколу зупинки та очікування.

Функція start ініціалізує процес обчислення часу та обробку змін часу:
Створюється об'єкт, який буде зв'язуватися з сервером кожну секунду (1000 мілісекунд).

---

Обробка змін зміщення часу:

```js=1
super.on('change', function (offset) {
  numSamples++;
   let alpha = 1 / (numSamples + 1);

    smoothed = alpha * offset + (1 - alpha) * smoothed;
     let s = '\n Clocks (with small errors): ' + smoothed.toFixed(3) + ' ms<br>' + TimeConsole.innerHTML;
      TimeConsole.innerHTML = s;
});


```


---

У цьому блоку коду, кожен раз при виявленні зміни зміщення часу, відбувається оновлення альфа-коефіцієнта та обчислення  зміщення часу. Значення  часу потім додається до елемента TimeConsole.


Взагалі код виконує такі кроки:

 - Відправлення клієнтським додатком запиту на сервер для .....
 - Обчислення різниці між ...
 - Повторення процесу декілька разів та сумування обчислених різниць з врахуванням коефіцієнта згладжування.
  - _Якщо потрібно перевірити швидкість мережи_ : використання додаткового серверного файлу для виконання тесту швидкості мережі та отримання даних про швидкість завантаження, швидкість відправлення та пінг.


:::





## [3.3 Посилання на розв'язання](*)

:::success
https://replit.com/xxxxx
:::


# [4. Питання (приклад)]()



:::danger
*Ваша програма не синхронізує клієнта із сервером. У ній немає тестування асиметрії каналу. Додайте  у реалізацію код, який якось вирішує ці проблеми!*
:::

---

:::info
Відповідь....
:::




