# Звіт до лабораторної роботи №1 [TOC] ## Завдання 1. Зробити клієнт-серверний додаток на мові javascript, використовуючи протокол HTTP, що тестує повний час подорожі запиту до сервера та назад (RTT) з обчисленням мінімального, максимального, медіанного та середнього часу RTT, середнього квадратичного відхилення та коефіцієнта асимметрії для частот запитів с клієнта до сервера 16Гц, 8Гц, 4Гц, 2Гц, 1Гц, а також для розмірів клієнтських запитів 128, 256, 512, 1024, 2048 байт. 2. Протестувати роботу Вашого клієнт-серверного додатку в персональній мережі (PAN) та у всесвітній мережі (WAN на хостінгу replit.com). 3. Дати оцінку відстані до сервера та тих характеристик каналу клієнт-сервер, що можно отримати з ціх даних 4. Порівняти отримані дані с даними системної мережевої утіліти ping. ## Опис коду Посилання на replit з кодом [тут](https://replit.com/join/hmgislscxs-dariienko). * У файлі index.js міститься функція getRTT разом з відповідними підфункціями, які виконують вимірювання та зберігання статистики серії запитів з заданими параметрами. * Функції requestSeries та request є різними рівнями абстракції, які допомагають у виконанні запитів, збиранні даних та їх передачі до функції getRTT для обчислення всієї необхідної статистики. * У функції main всі результати збираються та виводяться у формі таблиці markdown для зручності. * У файлі local_server.js описаний HTTP сервер, який буде використовуватись для тестування PAN. ## Аналіз результатів ### Результати у WAN на хостінгу replit.com Для тестів у WAN використаємо домен example.com. | Частота запитів | Розмір запиту | Мін. RTT | Макс. RTT | Медіанне RTT | Середнє RTT | Сер. квадр. відхилення RTT | Коефіціент асиметрії RTT | | --------------- | ------------- | -------- | --------- | ------------ | ----------- | -------------------------- | ------------------------ | | 16 | 256 | 63 | 579 | 68 | 76.91 | 52.02635774297486 | 9.01579249408251 | | 8 | 256 | 63 | 121 | 66 | 67.83 | 7.647293638928742 | 4.783305796835036 | | 4 | 256 | 64 | 113 | 67 | 68.64 | 6.934724219462516 | 4.034452353697489 | | 2 | 256 | 63 | 157 | 66 | 69.75 | 12.650988103701623 | 4.594433789343855 | | 16 | 512 | 63 | 88 | 66 | 67.37 | 4.0389478828031455 | 2.672299135845592 | | 8 | 512 | 63 | 102 | 67 | 67.94 | 5.02358437771279 | 3.988594389745737 | | 4 | 512 | 63 | 79 | 65 | 65.88 | 2.259557478799775 | 2.7287328025820243 | | 2 | 512 | 63 | 98 | 65 | 66.78 | 5.017130654069117 | 3.828069867723416 | | 16 | 1024 | 62 | 5114 | 64 | 117.59 | 502.26495189292274 | 9.842992802658824 | | 8 | 1024 | 62 | 69 | 64 | 64.06 | 1.2792185114357906 | 1.23499533392311 | | 4 | 1024 | 62 | 87 | 64 | 64.53 | 2.840616130349189 | 5.995810008247076 | | 2 | 1024 | 62 | 111 | 64 | 64.5 | 4.838388161361178 | 8.885050014462147 | | 16 | 2048 | 62 | 78 | 64 | 64.05 | 2.0994046775217012 | 3.6494423156043876 | | 8 | 2048 | 62 | 111 | 63 | 64.71 | 5.798784355362769 | 6.517940434032582 | | 4 | 2048 | 62 | 80 | 64 | 64.13 | 1.9882404281172832 | 5.194349052198937 | | 2 | 2048 | 62 | 118 | 63 | 64.82 | 7.45570922179775 | 6.493945525452625 | * Цей експеримент показує, що продуктивність WAN є непостійною і залежить від різноманітних факторів. Також можна помітити, що збільшення розміру запиту не має значного впливу на швидкість виконання запиту, оскільки на неї більше впливає відстань між серверами та обсяг супутніх даних (наприклад, HTTP-заголовки тощо). * Давайте спробуємо оцінити відстань між серверами на основі кращого результату, оскільки якщо ми досягли цього часу, це означає, що сигнал може пройти цю відстань за такий час. Найкращий результат становить 62 мс. Оскільки швидкість світла дорівнює 299792458 м/с, а за 1 мс вона пройде 299792.458 метрів, то за 62 мс вона пройде 18587132.396 метрів, що дорівнює 18587 кілометрам. Розділимо це значення на два, оскільки RTT враховує час, який потрібно сигналу, щоб дійти до сервера та повернутися назад, і отримаємо 9293.5 кілометрів. * Отже, можемо припустити, що відстань між серверами не перевищує 9293.5 кілометрів. Це не більше, оскільки в цей час також враховується час передачі даних, час роботи TCP-протоколу та час обробки цих запитів всіма серверами. ### Результати у PAN (один пристрій) Для перевірки я використовував єдиний пристрій, бо зараз немає можливості провести повноцінний експеримент у домашній мережі с декількома пристроями. Для цього я запустив обидва файли на своєму пристрої та змінив адресу з example.com на свою IP адресу з зазначеним у local_server.js файлі відкритим портом, та отримав наступне: | Частота запитів | Розмір запиту | Мін. RTT | Макс. RTT | Медіанне RTT | Середнє RTT | Сер. квадр. відхилення RTT | Коефіціент асиметрії RTT | | --------------- | ------------- | -------- | --------- | ------------ | ----------- | -------------------------- | ------------------------ | | 16 | 256 | 1 | 35 | 2 | 2.46 | 3.380591664191344 | 8.916103723754206 | | 8 | 256 | 1 | 5 | 2 | 2.03 | 0.670149237110661 | 0.9620884174263564 | | 4 | 256 | 1 | 4 | 2 | 1.98 | 0.6477653896280652 | 0.2398213194412565 | | 2 | 256 | 1 | 9 | 2 | 2.01 | 0.9433451118228152 | 4.054046061627726 | | 16 | 512 | 1 | 3 | 2 | 1.82 | 0.6063002556489642 | 0.10919077353110938 | | 8 | 512 | 1 | 7 | 2 | 1.99 | 0.9746281342132493 | 2.2234819992983423 | | 4 | 512 | 1 | 4 | 2 | 1.81 | 0.6587108622149788 | 0.6444106501773613 | | 2 | 512 | 1 | 4 | 2 | 1.78 | 0.609590026165127 | 0.42337300508710046 0.609590026165127 | 0.42337300508710046 | | 16 | 1024 | 1 | 4 | 2 | 1.82 | 0.6838128398911498 | 0.8079289627673095 | | 8 | 1024 | 1 | 10 | 2 | 1.8 | 1.0198039027185568 | 5.15936293978915 | | 4 | 1024 | 1 | 3 | 2 | 1.81 | 0.6433506042586737 | 0.19821782333061544 | | 2 | 1024 | 1 | 5 | 2 | 2.02 | 0.836420946653059 | 0.7827191301634251 | | 16 | 2048 | 1 | 4 | 2 | 1.95 | 0.6837397165588677 | 0.6264697451613166 | | 8 | 2048 | 1 | 3 | 2 | 1.8 | 0.6928203230275506 | 0.28867513459481153 | | 4 | 2048 | 1 | 5 | 2 | 2.04 | 0.7735631842325487 | 0.9680877019639391 | | 2 | 2048 | 1 | 5 | 2 | 1.81 | 0.6884039511798291 | 1.0022908896282186 | Ми спостерігаємо, що PAN демонструє значно кращі показники. Це зумовлено меншою відстанню між клієнтом і сервером, а також значно меншою кількістю елементів між ними. ### Результат системної мережевої утіліти ping Запуск утіліти відбувається не на replit.com, за неможливістю цього зробити, тому ще раз перевіримо WAN, але вже на власному пристрої. | Частота запитів | Розмір запиту | Мін. RTT | Макс. RTT | Медіанне RTT | Середнє RTT | Сер. квадр. відхилення RTT | Коефіціент асиметрії RTT | | --------------- | ------------- | -------- | --------- | ------------ | ----------- | -------------------------- | ------------------------ | | 16 | 256 | 374 | 5422 | 387 | 490.2 | 704.421407965431 | 6.85432619181045 | | 8 | 256 | 374 | 5421 | 389 | 722.31 | 1197.6415464987845 | 3.590918952827861 | | 4 | 256 | 375 | 5425 | 387 | 709.99 | 1196.3906844756023 | 3.6304211689148964 | | 2 | 256 | 373 | 5416 | 387 | 591.47 | 983.6062978143236 | 4.693647031452077 | Використовуємо утіліту ping: ping example.com Обмен пакетами с example.com [93.184.216.34] с 32 байтами данных: Ответ от 93.184.216.34: число байт=32 время=178мс TTL=49 Ответ от 93.184.216.34: число байт=32 время=178мс TTL=49 Ответ от 93.184.216.34: число байт=32 время=179мс TTL=49 Ответ от 93.184.216.34: число байт=32 время=179мс TTL=49 Статистика Ping для 93.184.216.34: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 178мсек, Максимальное = 179 мсек, Среднее = 178 мсек ## Висновки * Для виміру RTT краще обрати утиліту ping * Мережа PAN володіє вищою швидкістю та більшою стабільністю, ніж мережа WAN.