Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

ЛАБОРАТОРНА РОБОТА № 8

Тема: Транспортні протоколи – TCP та UDP.

Мета: Вивчити роботу протоколу TCP, зокрема, механізм з’єднання та


структуру заголовку. Вивчити протокол UDP.

Час виконання: 2 год.

ХІД РОБОТИ
У цій лабораторній роботі ми дослідимо поведінку протоколу TCP. Ми
робитимемо це через аналіз TCP-пакетів при передачі файлу розміром
приблизно 150 KB з вашого комп’ютера на віддалений сервер. Ми вивчимо
використання в TCP порядкових номерів та номерів підтвердження з метою
забезпечення надійності передавання даних; побачимо алгоритм контролю
швидкості передачі TCP пакетів в дії. Також коротко розглянемо налаштування
з'єднання TCP і дослідимо продуктивність (пропускну спроможність і час
прийому-передачі) з'єднання TCP між вашим комп'ютером і сервером.

Дослідження протоколу TCP

1. Перехоплення TCP пакетів, переданих від вашого комп’ютера на


віддалений сервер

Перш ніж почати наше дослідження TCP, нам потрібно за допомогою


Wireshark отримати TCP-пакети, що пересилаються внаслідок передачі файлу з
вашого комп’ютера на віддалений сервер. Це можна зробити, зайшовши на Web
сторінку, що дозволить вам ввести ім’я локального файлу, а потім передати
файл на Web сервер, використовуючи HTTP POST метод. В цьому випадку ми
використовуємо POST метод, а не GET, через те, що нам потрібно передати
велику кількість даних з локального комп’ютера на віддалений. Звичайно, ми
будемо використовувати Wireshark під час передачі файлу для перехоплення
TCP пакетів, що направлені до вашого хосту та від нього.
Зробіть наступне:
1. Запустіть web-браузер. Зайдіть на http://elct.lnu.edu.ua/kin/alice.txt та
завантажте файл «Alice in Wonderland» у ASCII кодуванні кудись на ваш
комп’ютер.
2. Далі зайдіть на http://elct.lnu.edu.ua/kin/submit.html.
3. В полі вводу вкажіть повний шлях до щойно завантаженого локального
файлу, але поки що не натискайте кнопку “Upload file”.
4. Тепер запустіть Wireshark та розпочніть перехоплення пакетів (Capture →
Options), та натисніть кнопку OK у вікні налаштувань Wireshark Packet
Capture (змінювати там якісь налаштування не потрібно)
5. Поверніться до браузера та натисніть кнопку “Upload file” для
завантаження файлу на сервер elct.lnu.edu.ua. Тільки-но файл буде
завантажено, у вашому браузері відобразиться невелике привітальне
повідомлення.
6. Зупиніть перехоплення пакетів. Вікно Wireshark має виглядати подібно
до наведеного на рисунку.

2. Перший погляд на перехоплені пакети

Перш, ніж аналізувати поведінку TCP з'єднання в деталях, поглянемо на


пакети загалом:

7. Спершу відфільтруйте пакети, що відображаються у вікні Wireshark,


набравши “tcp” у полі фільтру, що знаходиться на верхній панелі.

Ви маєте побачити серії TCP та HTTP повідомлень, переданих між вашим


комп’ютером та elct.lnu.edu.ua. Ви маєте побачити початкову процедуру
рукостискання – пакети, які містять SYN повідомлення. Далі – повідомлення
HTTP POST та серію повідомлень “HTTP Continuation”, що відправлені від
вашого комп’ютера до сервера. Нагадаємо, що насправді немає такого
повідомлення, як HTTP Continuation. В такий спосіб Wireshark демонструє, що
для передачі HTTP повідомлення використовувалося декілька TCP пакетів.
Також ви маєте побачити TCP ACK пакети, направлені від сервера
elct.lnu.edu.ua до вашого хосту.
Оскільки ця лабораторна робота присвячена TCP, а не HTTP, змінімо
список відображених пакетів у Wireshark так, щоб він показував TCP сегменти,
що використовуються для передачі HTTP-повідомлень. Щоб зробити це,
виберіть пункт меню Analyze → Enabled Protocols. Там у вікні зніміть пташку з
HTTP та натисніть OK. Тепер вікно Wireshark має виглядати приблизно так, як
наведено на рисунку нижче.
Це саме те, що нам потрібно – серія TCP-пакетів пересланих між вашим
комп’ютером та сервером elct.lnu.edu.ua. Ми будемо використовувати
отриманий список перехоплених пакетів для подальшого вивчення поведінки
TCP-пакетів.

3. Основи TCP

Коли відповідаєте на наведені питання, бажано мати роздруківку


перехоплених пакетів. Для друку пакетів натисніть File → Print в головному
меню, виберіть пункти Selected packet only та Packet summary line, а також
виберіть ту мінімальну кількість інформації для друку, що потрібна для
відповідей на питання.

1. Яка IP-адреса та номер TCP порту використовується вашим комп’ютером


(джерелом) для відправки файлу на elct.lnu.edu.ua? Для відповіді на
питання, мабуть, найлегше вибрати це HTTP повідомлення та дослідити
детально TCP пакет, використовуючи вікно детального перегляду
обраного пакету.
2. Яка IP-адреса у elct.lnu.edu.ua? Який номер порту використовується для
прийому/відправлення TCP пакетів?
3. Який порядковий номер (sequence number) TCP SYN пакета, який
використовується для ініціювання TCP з'єднання між комп'ютером
клієнта і elct.lnu.edu.ua? Що в цьому TCP пакеті вказує, що він є SYN
пакетом?
4. Який порядковий номер SYN ACK пакета, відісланого elct.lnu.edu.ua
клієнту у відповідь на його SYN пакет? Яке значення поля
«ACKnowledgement» у SYN ACK пакеті? Звідки сервер elct.lnu.edu.ua
взяв це значення? Що в TCP пакеті вказує, що він є SYN ACK пакетом?
5. Який порядковий номер TCP сегмента, що містить HTTP POST команду?
Для знаходження команди POST вам потрібно детальніше глянути на
вміст пакету у вікні детального перегляду та знайти у полі даних
фрагмент з командою “POST”.
6. Розгляньте перший TCP пакет, що містить команду HTTP POST. Які
порядкові номери перших шести TCP пакетів, що використовувалися для
передачі файлу (починаючи з пакету, що містить HTTP POST команду)?
Який час відправлення кожного такого пакету? Коли приходив пакет-
підтвердження (ACK) для кожного відправленого пакету? Підрахувавши
різницю між часом відправки TCP сегмента та часом отримання пакету
підтвердження про доставку, вкажіть RTT час (Round-Trip Time – час
обороту повідомлення) для кожного з шести сегментів.
7. Яка довжина кожного з шести TCP сегментів?
8. Який мінімальний розмір буфера був у сервера під час передавання
файлу? Чи призупинялася передача даних через нестачу буфера на
сервері?
9. Чи були повторені якісь TCP сегменти? Що ви перевіряли (в
перехоплених пакетах) для відповіді на це запитання?
10. Яка пропускна спроможність (кількість передавання байтів за одиницю
часу) для TCP з’єднання? Поясніть, як ви підрахували цю величину.

4. Керування перенавантаженням TCP

Тепер дослідимо кількість даних, переданих клієнтом до сервера за


одиницю часу. Замість нудного підраховування цієї величини з пакетів у вікні
Wireshark, ми скористаємося графічною утилітою з Wireshark (TCP – Time-
Sequence-Graph (Stevens)) з метою відображення даних.
8. Виберіть пункт меню: Statistics → TCP Stream Graph → Time-Sequence →
Graph (Stevens). Ви маєте побачити графік, подібний до приведеного на
рисунку.

Тут кожна точка представляє відправлений TCP-сегмент, відображаючи


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

11. Отримайте збережений файл перехоплених пакетів


(http://elct.lnu.edu.ua/kin/tcp-ethereal-trace-1). Використайте утиліту Time-
Sequence-Graph (Stevens) для малювання графіку передачі TCP-пакетів.
Ви можете вказати, де починаються фази передавання TCP пакетів та де
вони закінчуються і де працює механізм уникнення TCP заторів?

12. Дайте відповідь на попереднє питання, використовуючи результат вашого


експерименту з передаванням файлу на сервер elct.lnu.edu.ua.

Дослідження протоколу UDP


Через те, що транспортний протокол UDP доволі простий, то в цій
лабораторній роботі ми зробимо лише його короткий огляд. Оскільки ваші
знання Wireshark вже мають бути достатніми, ми не будемо так детально
описувати всі кроки, як у попередніх роботах, а також не надаватимемо
прикладів знімків екрану з проміжними результатами.
Завдання

Розпочніть перехоплення пакетів за допомогою Wireshark, а потім зробіть


що-небудь для того, щоб ваш хост почав приймати та передавати UDP пакети
(один з можливих варіантів – це скористатися командою nslookup). Після
зупинки перехоплення пакетів налаштуйте фільтр відображення пакетів так,
щоб Wireshark відображав лише UDP пакети. Виберіть один з UDP пакетів, та
розгорніть його дані у вікні детального перегляду.
Відповідаючи на питання, бажано мати роздруківку пакетів, які вам
знадобляться. Відмітьте ваші відповіді на роздруківці. Для друку пакетів
виберіть File → Print в головному меню програми, далі оберіть пункти Selected
packet only та Packet summary line, а також вкажіть мінімальну кількість
інформації для друку, що вам потрібна.

1. Виберіть один пакет. Визначте, скільки полів міститься в заголовку


обраного UDP пакета. Перерахуйте ці поля.
2. Визначте довжину кожного поля в UDP заголовку .
3. Значення в полі Length (розмір) – це розмір чого? Покажіть це на
прикладі перехопленого вами UDP пакету.
4. Яку максимальну кількість байтів може переносити UDP пакет?
5. Який максимальний номер порту джерела повідомлення?
6. Який номер протоколу відповідає UDP? Дайте відповідь у десятковому та
шістнадцятирічному представленнях (для відповіді вам знадобиться
заглянути в заголовки IP протоколу).
7. Пошукайте “UDP” в пошуковій системі Google, та скажіть по яких полях
UDP рахує контрольну суму (checksum).
8. Дослідіть пару UDP пакетів, з яких перший пакет був відправлений
вашим комп’ютером, а другий – відповідь на нього. Опишіть
взаємозв’язок між номерами портів в цих двох пакетів.

Додаткове завдання:

9. Перехопіть маленький UDP пакет. Вручну підрахуйте контрольну суму


пакету. Покажіть всю послідовність дій та прокоментуйте кожен крок.
ДОДАТОК

TCP – Transmission Control Protocol

Обмін даними, орієнтований на з'єднання, може використовувати


надійний зв'язок, для забезпечення якого протокол транспортного рівня посилає
підтвердження про отримання даних і запитує повторну передачу, якщо дані не
отримані або перекручені. Протокол TCP використовує саме такий надійний
зв'язок. TCP використовується в таких прикладних протоколах, як HTTP, FTP,
SMTP і Telnet.
Протокол TCP вимагає, щоб перед відправкою повідомлення було
відкрито з'єднання. Серверний додаток має виконати так зване пасивне
відкриття (passive open), щоб створити з'єднання з відомим номером порту, і,
замість того щоб відправляти виклик у мережу, сервер переходить в режим
очікування надходження вхідних запитів. Клієнтський додаток повинен
виконати активне відкриття (active open), відправивши серверному додатку
синхронізаційний порядковий номер (SYN), що ідентифікує з'єднання.
Клієнтський додаток може використовувати динамічний номер порту в якості
локального порту.
Сервер повинен відправити клієнту підтвердження (ACK –
ACKnowledgement) разом з порядковим номером (SYN) сервера. У свою чергу
клієнт відповідає ACK, і з'єднання встановлюється.
Після цього може початися процес відправки та отримання повідомлень.
При отриманні повідомлення у відповідь завжди відправляється повідомлення
ACK. Якщо до того, як відправник отримав ACK, закінчується тайм-аут,
повідомлення поміщається в чергу на повторну передачу.
Поля заголовка TCP перераховані в наступній таблиці:

Поле Довжина Опис


Порт джерела 2 байти Номер порту джерела
Порт
2 байти Номер порту призначення
призначення
Послідовний номер генерує джерело і
Послідовний використовує призначення, щоб змінити порядок
4 байти
номер пакетів для відтворення вихідного повідомлення і
відправлення підтвердження джерелові.
Якщо встановлено біт ACK поля "Керування", в
Номер
4 байти цьому полі міститься наступний очікуваний
підтвердження
послідовний номер.
Зміщення даних 4 біти Інформація про початок пакету даних.
Резерв 6 бітів Зарезервовано для майбутнього використання.
Біти керування містять прапори, що вказують, чи
правильні поля підтвердження (ACK), покажчика
Керування 6 бітів терміновості (URG), чи слід скидати з'єднання
(RST), чи послано синхронізаційний послідовний
номер (SYN) і т. д.
Розмір вікна 2 байти У цьому полі вказано розмір приймального
буфера. Використовуючи повідомлення-
підтвердження, одержувач може інформувати
відправника про максимальний розмір даних, які
той може відправити.
Контрольна Контрольна сума заголовку і даних; за нею
2 байти
сума визначають, чи було спотворено пакет.
Вказівник В цьому полі цільовий пристрій отримує
2 байти
терміновості інформацію про терміновість даних.
Необов’язкові значення, котрі вказують за
Опції змінна
необхідності.
В полі доповнення додають стільки нулів, щоб
Доповнення змінна
заголовок закінчувався на 32-бітній межі.

TCP – це складний протокол, який вимагає великих витрат часу, що


пояснюється його механізмом встановлення з'єднання, але він бере на себе
турботу про гарантовану поставку пакетів, позбавляючи нас від необхідності
включати цю функціональну можливість в прикладний протокол.
Протокол TCP має вбудовану можливість надійної доставки. Якщо
повідомлення не відправлено коректно, ми отримаємо повідомлення про
помилку. Протокол TCP визначений в RFC 793.

UDP – User Datagram Protocol

На відміну від TCP UDP – дуже швидкий протокол, оскільки в ньому


визначено наймінімальніший механізм, необхідний для передачі даних.
Звичайно, він має деякі недоліки. Повідомлення надходять в будь-якому
порядку, і то, яке відправлено першим, може бути отримано останнім. Доставка
повідомлень UDP зовсім не гарантована, повідомлення може загубитися, і
можуть бути отримані дві копії того самого повідомлення. Останній випадок
виникає, якщо для відправки повідомлень на одну адресу використовувати два
різні маршрути.
UDP не вимагає відкривати з'єднання, і дані можуть бути відправлені
відразу ж, як тільки вони підготовлені. UDP не надсилає повідомлення
підтвердження, тому дані може бути отримано або втрачено. Якщо при
використанні UDP потрібна надійна передача даних, її слід реалізувати в
протоколі вищого рівня.
Так в чому ж переваги UDP, навіщо потрібен цей ненадійний протокол?
Щоб зрозуміти причину використання UDP, потрібно розрізняти
односпрямовану передачу, широкомовну передачу і групову розсилку.
Односпрямоване (unicast) повідомлення відправляється з одного вузла
тільки на один інший вузол. Це також називається зв'язком "точка-точка".
Протокол TCP підтримує лише односпрямований зв'язок. Якщо серверу
потрібно за допомогою TCP взаємодіяти з декількома клієнтами, кожен клієнт
повинен встановити з'єднання, оскільки повідомлення можуть бути відправлені
тільки окремим вузлам.
Широкомовна передача (broadcast) означає, що повідомлення
відправляється до усіх вузлів мережі. Групова розсилка (multicast) – це
проміжний механізм: повідомлення відправляються обраним групам вузлів.
UDP може використовуватися для односпрямованого зв'язку, якщо
потрібна швидка передача, наприклад для доставки мультимедійних даних, але
головні переваги UDP стосуються широкомовної передачі і групової розсилки.
Зазвичай, коли ми відправляємо широкомовні або групові повідомлення,
не потрібно отримувати підтвердження з кожного вузла, оскільки тоді сервер
буде затоплений ними, а завантаження мережі зросте занадто сильно.
Прикладом широкомовної передачі є служба часу. Сервер часу відправляє
широкомовне повідомлення, що містить поточний час, і будь-який хост, якщо
побажає, може синхронізувати свій час з часом з широкомовного повідомлення.
Заголовок UDP набагато коротший і простіший від заголовку TCP:

Поле Довжина Опис


Вказання порту джерела для UDP необов’язкове.
Порт джерела 2 байти Якщо це поле використано, то отримувач може
відправити відповідь цьому порту.
Порт
2 байти Номер порту призначення
призначення
Довжина повідомлення, включно з заголовком і
Довжина 2 байти
даними.
Контрольна
2 байти Контрольна сума заголовку і даних для перевірки
сума

UDP – це швидкий протокол, що не гарантує доставки. Якщо потрібна


підтримка порядку повідомлень і надійна доставка, потрібно використовувати
TCP. UDP головним чином призначений для широкомовної і групової передачі.
Протокол UDP визначено в RFC 786.

Контрольна сума UDP-сегмента

Контрольна сума UDP-сегмента призначена для виявлення помилок,


тобто визначення, чи були які-небудь біти сегмента спотворені в процесі
передачі (наприклад, внаслідок перешкод на лінії зв'язку або проміжного
зберігання в маршрутизаторі). Протокол UDP на передавальній стороні
обчислює доповнення до 1 суми всіх 16-розрядних слів сегмента, ігноруючи
переповнення, що відбуваються при підсумовуванні. Результат обчислення
заноситься в поле контрольної суми сегмента. Матеріали про ефективне
обчисленні контрольної суми можна знайти в RFC 1071, а для ознайомлення зі
способами практичної реалізації обчислень рекомендуємо звернутися до
додаткових джерел інформації. Як приклад розглянемо три 16-розрядних слова:
0110011001100110
0101010101010101
0000111100001111

Сума перших двох слів рівна:

0110011001100110
0101010101010101
1011101110111011

Додавання отриманої суми з третім словом дає результат:

1011101110111011
0000111100001111
1100101011001010

Доповнення до 1 обчислюється заміною всіх нулів суми одиницями і


навпаки. Доповненням до 1 слова 1100101011001010 є слово
0011010100110101, яке і буде записано в поле контрольної суми. На
приймальній стороні проводиться підсумовування всіх слів сегмента, включно з
полем контрольної суми.
Якщо під час передачі не відбулося спотворення жодного з бітів,
результатом підсумовування є 1111111111111111. Наявність хоча б одного
нульового біта в сумі свідчить про помилки в даних.
Можливо, викликає подив, що протокол UDP в першу чергу здійснює
перевірку даних на наявність помилок, оскільки відомо, що цю функцію
зазвичай здійснюють протоколи канального рівня (наприклад, популярний
протокол Ethernet). Причина полягає в тому, що насправді не всі протоколи
фізичного рівня виконують таку перевірку, і, отже, існує ймовірність, що у
процесі передачі спотворення даних не буде виявлено. Оскільки протокол IP
може працювати в поєднанні практично з будь-яким протоколом канального
рівня, функція виявлення помилок на транспортному рівні необхідна для
підвищення надійності передачі. Зауважимо, що протокол UDP здатний лише
виявляти помилки, однак не має засобів для їх виправлення. Деякі реалізації
UDP видаляють спотворений сегмент, а деякі передають його прикладному
рівню з відповідним попередженням.

You might also like