# [2024: Комп'ютерні системи та мережі. Екзаменаційний лист 4.]()
[TOC]
---
## [Прізвище Ім'я та по Батькові. Дата народження.]()
Філіпенко Микита Володимирович, 27.09.2002
---

# [1. Екзаменаційні запитання (5 балів)]()
- [ ] *1.1 Для якого класу алгоритмів контролю перевантаження канала при одночаснiй роботі з каналом декількох з'єднань відбувається адаптивна збіжність до рівного використання ресурсів каналу? Чому це відбувається? (2 бали)*
### [Відповідь]()
:::info
1. При одночасній роботі з каналом декількох зʼєднань відбувається адаптивна збіжність до рівного використання ресурсів каналу для алгоритмів **класу адитивно-мультипликативного керування вікном**.
2. Це відбувається через те, що алгоритми класу адитивно-мультипликативного керування вікном розв'язують задачі розподілу ресурсів адаптивно, залежно від поточних умов мережі. Основна мета таких алгоритмів - ефективне використання ресурсів каналу з мінімальними затримками та перепадами пропускної здатності.
:::
- [ ] *1.2 Чому інші схеми: мультиплікативне зростання/мультиплікативне зменшення (MIMD) та адитивне зростання/адитивне зменшення (AIAD) - не сходяться до стабільного і справедливого спільного поділу ресурсів каналу?*
### [Відповідь]()
:::info
1. **Неадаптивність до змін умов мережі**: У випадку MIMD та AIAD схем, розподіл ресурсів здійснюється за фіксованими правилами, які не змінюються в залежності від поточних умов мережі. Це може призводити до несправедливого розподілу ресурсів або неефективного використання каналу.
2. **Велика затримка у адаптації**: В схемах MIMD та AIAD алгоритмам потрібно багато часу для адаптації до змін у мережі. Це може призводити до збоїв у розподілі ресурсів, особливо в умовах динамічного навантаження.
3. **Вразливість до перенавантажень та витрат ресурсів**: Схеми MIMD та AIAD можуть бути вразливі до перенавантажень або витрати ресурсів, коли потрібно змінювати розмір вікна або параметри алгоритмів для підтримки стабільного розподілу ресурсів.
:::
# [2. Розрахункові екзаменаційні завдання (20 балів)]()
## [2.1 Час передачі даних (10 балів)]()
Обчисліть час передачі даних для протоколу зупинки та очікування, якщо Вам відомі: обсяг даних 5Мбайт, максимальний розмір пакету передачи 10000 байт, дистанція між клієнтом та сервером 5000 км, смуга пропускання каналу 50 Кбіт/c, та тип каналу -- радіорелейний.
### [Розв'язання]()
:::info
**Дано**:
- Обсяг даних = 5 Мбайт = 40 Мбіт = 40 000 000 біт
- Дистанція = 5 000 км = 5 000 000 м
- Смуга пропускання = 50 Кбіт/c = 50 000 біт/с
- Максимальний розмір пакету = 10 000 байт = 80 000 біт
- Швидкість світла в радіорелейному каналі = $2$ * $10^8$ м/с
**Розвʼязання**:
1. Спочатку обчислимо кількість пакетів: 40 000 000 біт / 80 000 біт = 500
2. Далі обчислимо час передачі одного пакету: 80 000 біт / 50 000 біт/c = 1.6 с
3. Знайдемо затримку сигналу: 5 000 000 м / (2 * $10^8$ м/с) = 0,025 c
4. Час підтвердження важливий для протоколу зупинки та очікування через його особливості. У цьому протоколі відправник очікує підтвердження від отримувача перед тим як надіслати наступний пакет даних. Це робиться для того, щоб уникнути втрати пакетів і для забезпечення правильного порядку доставки.
Тому для протоколу зупинки та очікування, також слід враховувати час підтвердження.
Остаточня формула:
Час передачі даних = (час передачі пакета + час затримки сигналу + час підтвердження) * кількість пакетів = (1.6 с + 0.025 с + 0.025 с) * 500 = 825 c
:::
## [2.2 Відносна затримка (10 балів)]()
Обчисліть відносну затримку для умов пункта 2.1. Порівняйте її з відносною затримкою для більш ефективного протоколу. Яка назва у цього ефективного протоколу і на якому рівні стеку OSI він працює?
### [Розв'язання]()
:::info
1. Для того, щоб обчислити відносну затримку для протоколу зупинки та очікування, потрібно знайти відношення часу затримки сигналу до часу передачі даних одного пакету : 0.025 с / 1.6 с = 0.015625
2. Оберемо у приклад більш ефективний протокол Sliding Window. Він є ефективнішим через відправку водночас кількох кадрів. Він ефективно використовує пропускну здатність каналу, а також зменшує час очікування передачі даних. Можна припустити, що відносна затримка для цього протоколу матиме значення 0.010 с
3. Назва протоколу - Sliding Window, він працює на рівні зʼєднання (Data Link Layer).
:::
# [3. Екзаменаційне завдання на реалізацію (25 балів)]()
## [3.1 Час передачі даних для протоколу зупинки та очікування]()
Використовуючи бібліотеку Socket.io, побудувати клієнт-серверний додаток для сервера на хостінгу replit.com, що виконує емпіричну оцінку **часу передачі даних** для протоколу зупинки та очікування.
**Обсяг даних** для передачі: 5Мбайт.
Гарантуйте у коді **максимальний розмір кадру** даних 10000 байт.
Обчисліть приблизну **затримку поширення** між клієнтом та сервером.
Отримайте емпіричну оцінку **затримки передавання** кадру даних.
Отримайте емпіричну оцінку **смуги пропускання** каналу.
### [Опис розв'язання]()
:::info
* Програма складається з серверної та клієнтської частини, які використовують Express та Socket.IO для обміну даними. Вона моделює передачу даних з клієнта на сервер у фрагментах та обчислює час передачі, пропускну здатність та середню затримку.
## 1. Серверна частина (index.js):
* Створення Express додатку та HTTP сервера.
* Встановлення обробника для головної сторінки "/".
* Створення Socket.IO сервера та обробник для підключення клієнтів.
* Обробка події "start" від клієнта, початок відправки даних у фрагментах.
* Обробка події "data" від клієнта, підрахунок загального часу передачі та пропускної здатності.
* Запуск сервера на порту 3000.
## 2. Клієнтська частина (client.js):
* Підключення до сервера Socket.IO.
* Отримання посилань на HTML-елементи для виведення даних.
* Генерація випадкових даних для відправки на сервер.
* Відправлення повідомлення "start" на сервер з розміром файлу.
* Обробка події "start" від сервера, відправлення фрагментів даних з певною періодичністю.
* Обчислення середньої затримки та часу передачі фреймів.
* Виведення результатів на сторінку клієнта.
* Ця програма демонструє базовий механізм передачі даних між клієнтом та сервером через WebSocket з використанням Socket.IO.
:::
## Результат роботи

## [3.3 Посилання на розв'язання](*)
:::success
https://replit.com/join/touzjxkkmx-nikitafilipenko
:::
# [4. Питання (приклад)]()
:::danger
*Ваша програма не синхронізує клієнта із сервером. У ній немає тестування асиметрії каналу. Додайте код у реалізацію, який якось вирішує ці проблеми!*
:::
---
:::info
Відповідь....
:::