---
# System prepended metadata

title: Лабораторна робота 1

---

# Звіт. Лабораторна робота 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.

### Вступ:
Один з ключових параметрів, що впливає на продуктивність додатків, - це час, необхідний для обміну даними між клієнтом і сервером, відомий як час подорожі запиту до сервера та назад (RTT - Round-Trip Time).
Ця лабораторна робота спрямована на розробку системи для тестування часу RTT в різних умовах з використанням клієнт-серверного застосунку на мові JavaScript та протоколу HTTP. 

### Теоретична частина:

**Round-Trip Time (RTT)** - це час, який потрібно для передачі сигналу або пакету даних з одного пристрою до іншого і повернення назад.


**Standard Deviation (стандартне відхилення)** для Round-Trip Time (RTT) вимірює варіацію часу подорожі пакету даних в мережі. Це може вказати на те, наскільки змінюється RTT для певного набору пакетів, які передаються через мережу. Більше значення стандартного відхилення може вказувати на більшу змінливість у часі RTT, що може впливати на продуктивність мережі та дослідження проблем зв'язку.

**Skewness Ratio** - це міра асиметрії розподілу ймовірностей дійсної випадкової величини щодо її середнього значення. Коефіцієнт асиметрії, більший за нуль, вказує на те, що розподіл зміщений вправо (позитивний зсув), тоді як коефіцієнт асиметрії, менший за нуль, вказує на те, що розподіл зміщений вліво (негативний зсув). Нульовий коефіцієнт асиметрії вказує на симетричний розподіл.

### Код програми:

**Код:** https://replit.com/join/mvpzdqfkbb-maksymyakushev

**index.js**
```js=1
// Створення серверу
const server = http.createServer((req, res) => {
    console.log(req.url);
    // Метод GET
    if (req.method === 'GET') {
        if (req.url === '/') {
            res.writeHead(200, {'Content-Type': 'text/html'});
            res.end(contentHTML);
        } 
        else if (req.url === '/styles.css') {
            res.writeHead(200, {'Content-Type': 'text/css'});
            res.end(contentStyles);
        } 
        else if (req.url === '/script.js') {
            res.writeHead(200, {'Content-Type': 'text/javascript'});
            res.end(contentScript);
        }
        else {
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end(req.url);
        }
    } 
    else if (req.url === '/measureRTT') {
        let requestData = '';
        req.on('data', chunk => {requestData += chunk;});
        req.on('end', () => {
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end(requestData);
        });
    }
});
```
Створюємо HTTP-сервер використовуючи 'http'. Він обробляє вхідні запити та відповіді. Реалізує '/measureRTT' для вимірювання RTT, відповідая отриманими даними запита. Сервер відповідає на запити GET даними.

**script.js**
```js=1
// Запит до серверу
function requestToServer(requestSize) {
    const data = generateData(requestSize); // Генерує дані заданого розміру
    console.log("fetching data of length=" + data.length)
    const startTime = Date.now(); // час початку 
     fetch('/measureRTT'+'/' + data) 
        .then(response => {
            const rtt = Date.now() - startTime;  // Обчислення RTT
            return response.text()
                    .then(responseData => {
                        const sizeInBytes = responseData.length;
                         console.log("responseData:"+responseData);
                         console.log('Response size=', sizeInBytes, 'bytes');
                        calculateMetrics(rtt); // Обчислення метрики на основі RTT
                    });
        })
        .catch(error => {
            console.error('Error sending request:', error); 
        });
}
```
Функція `requestToServer(requestSize)` відповідає за GET запит на сервер для обчислення RTT. Генерує дані вказаного розміру за допомогою функції `generateData()`. Ці дані будуть надіслані в тілі запиту GET. Записує поточний час, як час початку перед надсиланням запиту та після обчислює RTT шляхом віднімання часу початку з поточного часу.
```js=1
// Обчислення метрік
function calculateMetrics(rtt) {

    rttValues.push(rtt);

    minRTT = calculateMinimum(rttValues);
    maxRTT = calculateMaximum(rttValues);
    medianRTT = calculateMedian(rttValues);
    avgRTT = calculateAverage(rttValues);
    stdDevRTT = calculateStandardDeviation(rttValues);
    skewnessRatio = calculateSkewnessRatio(rttValues);

    myConsole.innerText =
        "Current frequency: " + frequenciesHz[currentFrequencyIndex] + "\n" +
        "Amount of requests: " + rttValues.length + "\n" +
        "RTT: " + rtt + " ms\n" +
        "Minimum RTT: " + minRTT + " ms\n" +
        "Maximum RTT: " + maxRTT + " ms\n" +
        "Median RTT: " + medianRTT + " ms\n" +
        "Average RTT: " + avgRTT + " ms\n" +
        "Standard Deviation RTT: " + stdDevRTT + " ms\n" +
        "Skewness Ratio: " + skewnessRatio + "\n";

    updateLoadingBar();
}
```

**Помилки, які виникли:**
1. Отримав не зовсім якісні результати при тестуванні в глобальній мережі (WAN). 
2. В файлі **index.js**, при створенні серверу був написаний зайвий код, який вказує на обробку запиту /measureRTT, але це не працюватиме через те, що  запит буде виконаний методом POST, який не використовую.
3. Не було контролю запитів, а саме повинен бути: номер, час і т.д., як мінімум для того, щоб відслідкувати дефекти та не правильну роботу застосунку на ранній та на подальших етапах розробки.
4. Неправльно побудувана функція `requestToServer(requestSize)`, функція також не є асинхронною (це також може впливати на роботу).
5. При вимірюванні викликалась неіснуюча функція та відображалась в консолі, що призводило кожен раз до помилки, на роботу застосунку ніяк не впливало, але використовуючі інші браузери в теорії може призводити до неякісної роботи або просто застосунок може не запускатись.

### Аналіз результатів:

**Тест роботи клієнт-серверного застосунку в персональній мережі (PAN)**

Дані були отримані шляхом проведення по 100 вимірювань для кожного набору параметрів.

**Таблиця результатів:**

| Measurement Frequency (hz) | Request Size (bytes) | Total Requests | Min. RTT (ms) | Max. RTT (ms) | Mean RTT (ms) | AVG. RTT (ms) | Standard Deviation RTT (ms) | Skewness RTT |
| ------------ | --------------------- | -------- | -------- | -------- | -------- | ---------------------- | ------------ |------------ |
|16|	128|	100|	2|	9|	5|	4.80|	1.47|	0.0021|
|8	|128	|100|	3|	7|	6|	5.39|	0.93|	0.0080|
|4	|128	|100|	2|	12|	5.5|	5.37|	1.70|	0.0056|
|2	|128	|100|	3|	10|	5|	5.43|	1.26|	0.0086|
|1	|128	|100|	2|	14|	6|	6.20|	1.48|	0.0120|
|16|	256|	100|	3|	15|	6	|6.43|	1.72|	0.0089|
|8	|256	|100|	3|	13|	6|	5.80|	1.59|	0.0100|
|4	|256	|100|	3|	28|	5|	5.81|	2.62|	0.0669|
|2	|256	|100|	3|	8|	5|	4.88|	1.17|	0.0007|
|1	|256	|100|	2|	19|	6|	5.73|	1.93|	0.0385|
|16|	512|	100|	3|	14|	6	|5.54|	1.26|	0.0273|
|8	|512	|100|	3|	13|	6|	5.70|	1.19|	0.0213|
|4	|512	|100|	2|	14|	6|	5.77|	1.49|	0.0241|
|2	|512	|100|	2|	13|	5|	5.51|	1.21|	0.0273|
|1	|512	|100|	2|	13|	5.5|	5.76|	1.72|	0.0133|
|16| 1024	|100|	2|	13|	5	|5.40|	2.09|	0.0076|
|8	|1024|	100	|2|	9|	6|	5.45|	1.78|	0.0005|
|4	|1024|	100	|2|	29|	5|	5.21|	2.99|	0.0520|
|2	|1024|	100	|2|	16|	5|	4.96|	2.06|	0.0171|
|1	|1024|	100	|2|	17|	5|	5.51|	2.67|	0.0190|
|16|	2048|	100|	2|	20|	5|	5.45|	2.35	|0.0317|
|8	|2048|	100|	2|	12|	6|	6.09|	1.79|	0.0037|
|4	|2048|	100|	2|	11|	6|	6.03|	1.70|	0.0006|
|2	|2048|	100|	2|	22|	6|	6.12|	2.39|	0.0314|
|1	|2048|	100|	3|	6|	4|	3.97|	0.50|	0.0043|


**Тест роботи клієнт-серверного застосунку у всесвітній мережі (WAN)**

Дані були отримані шляхом проведення по 100 вимірювань для кожного набору параметрів.

**Таблиця результатів:**
| Measurement Frequency (hz) | Request Size (bytes) | Total Requests | Min. RTT (ms) | Max. RTT (ms) | Mean RTT (ms) | AVG. RTT (ms) | Standard Deviation RTT (ms) | Skewness RTT |
| ------------ | --------------------- | -------- | -------- | -------- | -------- | ---------------------- | ------------ |------------ |
| 16 | 128 | 100 | 149 | 3463 | 1819.5 | 1811.52 | 969.70 | 0.0004 |
| 8 | 128 | 100 | 3540 | 8824 | 6467 | 6629.32 | 1835.46 | 0.0017 |
| 4 | 128 | 100 | 2648 | 11601 | 9226.5 | 8744.49 | 2570.64 |0.0053 |
| 2 | 128 | 100 | 134 | 2533 | 147 | 333.23 | 550.88 | 0.0273 |
| 1 | 128 | 100 | 135 |	525 | 146 | 160.13 | 63.21 | 0.0531 |
| 16 | 256 | 100 | 136 | 1518 | 154 | 276.17 | 304.49 |	0.0412 |
| 8 | 256 | 100 |	1971 |	5534 |	4588 |	4340.06	| 1005.62 |	0.0115|
| 4 | 256 | 100 |	134 |	6801|	3707|	3169.24|	2926.32|	0.0003|
| 2 | 256 | 100 |	135 |	520|	144.5|	154.65|	52.98|	0.0669|
| 1 | 256 | 100 |	135 |	500|	148|	158.10|	46.68|	0.0537|
| 16 | 512 | 100|	233 |	4090|	2131|	2176.14|	1108.12|	0.0012|
| 8 | 512 | 100 |	4754 |	11507|	9401.5|	9091.79|	2013.82|	0.0056|
| 4 | 512 | 100 |	2172 |	12437|	10905|	9195.81|	3171.91|	0.0043|
| 2 | 512 | 100 |	136 |	2770|	150|	395.26	|661.37|	0.0260|
| 1 | 512 | 100 |	136 |	895|	147|	161.25	|83.65|	0.0786|
| 16 | 1024| 100 | 141 |	3261|	1566|	1522.36	|1041.33|	0.0007|
| 8 | 1024|	100 |	3332 |	7685|	6765|	6203.48	|1379.34|	0.0073|
| 4 | 1024|	100 |	134 |	8349|	6954|	4578.72	|3693.00|	0.0019|
| 2 | 1024|	100 |	137 |	906|	157|	181.46	|113.80|	0.0440|
| 1 | 1024|	100 |	137 |	568|	147|	173.81	|95.69|	0.0377|
| 16 | 2048	| 100 |	1521 |	4210|	3002|	2980.18	|756.36|	0.0053|
| 8 | 2048|	100 |	4285 |	10280|	9150|	8259.77	|1828.87|	0.0059|
| 4 | 2048|	100 |	139 |	7948|	2073.5|	2599.34	|2330.42|	0.0018|
| 2 | 2048|	100 |	138 |	905|	149|	187.41	|133.60|	0.0381|
| 1 | 2048|	100 |	138 |	1750|	150.5|	214.70	|248.84|	0.0500|

### Оцінка відстані до сервера та характеристик отриманих з цих даних

Для аналізу будемо використовувати дані, отримані з вимірів для кожного розміру запиту та частоти вимірювань, які проводилися в мережах PAN та WAN.

**1. Мінімальний, максимальний, медіанний та середній час RTT:**

Можемо спостерігати, що у PAN мережі значення RTT в середньому нижчі порівняно з WAN. Це пов'язано з тим, що PAN мережа зазвичай забезпечує швидке та стабільне з'єднання, оскільки вона обмежена територіально та має меншу кількість вузлів порівняно з WAN, де можливі більші затримки через більшу відстань та кількість проміжних маршрутизаторів.
Медіанний час RTT також може бути корисним показником, оскільки він вказує на середнє значення, яке відображає загальний стан мережі.

**2. Стандартне відхилення RTT та коефіцієнт асиметрії:**

Стандартне відхилення RTT вказує на рівень дисперсії даних. Чим вище відхилення, тим більше різноманіття у вимірах RTT, що може вказувати на нестабільність мережі.
Коефіцієнт асиметрії вказує на те, наскільки далеко виміри розташовані від середнього значення. Це може бути корисним показником для виявлення асиметрії в розподілі даних.

**3. Оцінка відстані до сервера та характеристик каналу:**

Відстань до сервера в PAN мережі буде набагато менше, ніж в WAN мережі. Це може пояснити вищі значення RTT в WAN мережі через більшу фізичну відстань, яка має бути пройдена сигналом.
Характеристики каналу також можна оцінити за допомогою даних про RTT. Низькі значення RTT та стандартного відхилення вказують на стабільний канал з малою затримкою та мінімальними втратами пакетів, тоді як високі значення можуть вказувати на перевантаження каналу або нестабільність мережі.

### Порівння отриманих даних з даними системної мережевої утиліти ping.

Ping для PAN:
```
yakushev_maksym@Air---Maksym ~ % ping -c 10 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.087 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.093 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.093 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.070 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.088 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.095 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.095 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.129 ms

--- 127.0.0.1 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.054/0.088/0.129/0.018 ms
```

Ping для WAN:
```
yakushev_maksym@Air---Maksym ~ % ping -c 10 35.226.206.236
PING 35.226.206.236 (35.226.206.236): 56 data bytes
64 bytes from 35.226.206.236: icmp_seq=0 ttl=103 time=132.064 ms
64 bytes from 35.226.206.236: icmp_seq=1 ttl=103 time=127.861 ms
64 bytes from 35.226.206.236: icmp_seq=2 ttl=103 time=128.053 ms
64 bytes from 35.226.206.236: icmp_seq=3 ttl=103 time=127.989 ms
64 bytes from 35.226.206.236: icmp_seq=4 ttl=103 time=128.231 ms
64 bytes from 35.226.206.236: icmp_seq=5 ttl=103 time=128.605 ms
64 bytes from 35.226.206.236: icmp_seq=6 ttl=103 time=128.625 ms
64 bytes from 35.226.206.236: icmp_seq=7 ttl=103 time=128.010 ms
64 bytes from 35.226.206.236: icmp_seq=8 ttl=103 time=129.016 ms
64 bytes from 35.226.206.236: icmp_seq=9 ttl=103 time=128.419 ms

--- 35.226.206.236 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 127.861/128.687/132.064/1.176 ms
```

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


### Швидкість сигналу

Швидкість сигналу визначається швидкістю світла в середовищі, через яке передається сигнал. Швидкість світла у вакуумі становить приблизно 299,792,458 м/c.
У разі передачі цифрового сигналу по кабелю швидкість сигналу становить приблизно 2/3 швидкості світла в середовищі.

Отримаємо швидкість по кабелю 199 км/мс. Тоді можемо обчислити відстань, яку проходить сигнал до сервера з example.com, отримаємо 199 км/мс · 128 мс = 25472 км.
Тоді, можемо говорити, що сервер знаходиться приблизно в 12736 км від мого місцезнаходження.

### Висновок

- У мережі PAN відзначено більш низькі значення RTT порівняно з мережею WAN. Це пояснюється більшою стабільністю та меншою фізичною відстанню в PAN. 
- Порівняння з результатами ping-тестів також було проведено, підтверджуючи, що час відповіді впливає на умови мережі та відстань до сервера.
- Характеристики мережі значно впливають на час відповіді клієнт-серверного застосунку.



