# [2024: Комп'ютерні системи та мережі. Екзаменаційний лист 4.]() [TOC] --- ## [Прізвище Ім'я та по Батькові. Дата народження.]() Філіпенко Микита Володимирович, 27.09.2002 --- ![2024-05-14 15.22.57](https://hackmd.io/_uploads/SJtnP0lmA.jpg) # [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. ::: ## Результат роботи ![Снимок экрана 2024-05-14 в 14.46.43](https://hackmd.io/_uploads/HkirkCxQA.png) ## [3.3 Посилання на розв'язання](*) :::success https://replit.com/join/touzjxkkmx-nikitafilipenko ::: # [4. Питання (приклад)]() :::danger *Ваша програма не синхронізує клієнта із сервером. У ній немає тестування асиметрії каналу. Додайте код у реалізацію, який якось вирішує ці проблеми!* ::: --- :::info Відповідь.... :::