TCP проти UDP: розвінчуємо міфи про надійність та ефективність

Сьогодні ми почнемо з розгляду TCP. Раніше в розділі про шари ми згадали важливий момент. На мережевому рівні та нижче йдеться більше про з'єднання між хостами, що означає, що ваш комп'ютер повинен знати, де знаходиться інший комп'ютер, щоб підключитися до нього. Однак, зв'язок у мережі часто є міжпроцесним, а не міжмашинним. Тому протокол TCP вводить поняття порту. Порт може бути зайнятий лише одним процесом, що забезпечує прямий зв'язок між процесами програм, що працюють на різних хостах.

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

TCP розшифровується як Transmission Control Protocol (Протокол керування передачею) і відомий як протокол, орієнтований на з'єднання. Це означає, що перш ніж одна програма зможе почати надсилати дані іншій, два процеси повинні виконати рукостискання. Рукостискання – це логічно пов'язаний процес, який забезпечує надійну передачу та впорядкований прийом даних. Під час рукостискання встановлюється з'єднання між хостами джерела та призначення шляхом обміну серією керуючих пакетів та узгодження деяких параметрів і правил для забезпечення успішної передачі даних.

Що таке TCP? (Mylinking'sМережевий відвідний каналіМережевий пакетний брокерможе обробляти як TCP, так і UDP-пакети)
TCP (Протокол керування передачею) — це надійний протокол зв'язку транспортного рівня на основі потоку байтів, орієнтований на з'єднання.

Орієнтований на з'єднанняОрієнтація на з'єднання означає, що TCP-зв'язок є один-до-одного, тобто зв'язком типу "точка-точка" від кінця до кінця, на відміну від UDP, який може надсилати повідомлення кільком хостам одночасно, тому зв'язок "один-до-багатьох" не може бути досягнутий.
НадійнийНадійність TCP гарантує, що пакети надійно доставляються одержувачу незалежно від змін у мережевому з'єднанні, що робить формат пакетів протоколу TCP складнішим, ніж у UDP.
На основі байтового потокуБайт-потокова природа TCP дозволяє передавати повідомлення будь-якого розміру та гарантує порядок повідомлень: навіть якщо попереднє повідомлення не було повністю отримано, і навіть якщо наступні байти були отримані, TCP не передасть їх на прикладний рівень для обробки та автоматично відкине дублікати пакетів.
Після встановлення з'єднання між хостами A та B, застосунку потрібно використовувати лише віртуальну лінію зв'язку для надсилання та отримання даних, забезпечуючи таким чином передачу даних. Протокол TCP відповідає за керування такими завданнями, як встановлення, розрив та утримання з'єднання. Слід зазначити, що тут ми кажемо, що віртуальна лінія означає лише встановлення з'єднання, а з'єднання за протоколом TCP лише вказує на те, що обидві сторони можуть розпочати передачу даних та забезпечити надійність даних. Вузли маршрутизації та транспортування обробляються мережевими пристроями; сам протокол TCP не займається цими деталями.

TCP-з'єднання — це повнодуплексний сервіс, що означає, що хост A та хост B можуть передавати дані в обох напрямках через TCP-з'єднання. Тобто дані можуть передаватися між хостами A та B у двонаправленому потоці.

TCP тимчасово зберігає дані в буфері відправлення з'єднання. Цей буфер відправлення є одним із кешів, налаштованих під час тристороннього рукостискання. Згодом TCP надсилатиме дані з кешу відправлення до кешу отримання хоста призначення у відповідний час. На практиці кожен вузол матиме кеш відправлення та кеш отримання, як показано тут:

TCP-UDP

Буфер надсилання — це область пам'яті, що підтримується реалізацією TCP на стороні відправника, яка використовується для тимчасового зберігання даних, що надсилаються. Коли виконується тристороннє рукостискання для встановлення з'єднання, кеш надсилання налаштовується та використовується для зберігання даних. Буфер надсилання динамічно коригується відповідно до перевантаження мережі та зворотного зв'язку від одержувача.

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

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

У комп'ютерних мережах передача даних між хостами здійснюється за допомогою сегментів. Отже, що таке сегмент пакета?

TCP створює сегмент TCP, або сегмент пакета, шляхом розділення вхідного потоку на фрагменти та додавання TCP-заголовків до кожного фрагмента. Кожен сегмент може передаватися лише протягом обмеженого часу та не може перевищувати максимальний розмір сегмента (MSS). На шляху вниз сегмент пакета проходить через канальний рівень. Канальний рівень має максимальний розмір одиниці передачі (MTU), який є максимальним розміром пакета, що може пройти через канальний рівень. Максимальний розмір одиниці передачі зазвичай пов'язаний з інтерфейсом зв'язку.

Отже, яка різниця між MSS та MTU?

У комп'ютерних мережах ієрархічна архітектура дуже важлива, оскільки вона враховує відмінності між різними рівнями. Кожен рівень має різну назву; на транспортному рівні дані називаються сегментом, а на мережевому рівні дані називаються IP-пакетом. Таким чином, максимальну одиницю передачі (MTU) можна розглядати як максимальний розмір IP-пакета, який може бути переданий мережевим рівнем, тоді як максимальний розмір сегмента (MSS) – це концепція транспортного рівня, яка стосується максимальної кількості даних, які можуть бути передані TCP-пакетом одночасно.

Зверніть увагу, що коли максимальний розмір сегмента (MSS) перевищує максимальний розмір одиниці передачі (MTU), фрагментація IP-адрес буде виконуватися на мережевому рівні, і TCP не розділить більші дані на сегменти, що відповідають розміру MTU. На мережевому рівні буде розділ, призначений для IP-рівня.

Структура сегмента TCP-пакета
Давайте розглянемо формат та вміст TCP-заголовків.

Сегмент TCP

Порядковий номер: Випадкове число, що генерується комп'ютером під час встановлення з'єднання як його початкове значення під час встановлення TCP-з'єднання, а порядковий номер надсилається одержувачу через SYN-пакет. Під час передачі даних відправник збільшує порядковий номер відповідно до обсягу надісланих даних. Одержувач оцінює порядок даних відповідно до отриманого порядкового номера. Якщо виявляється, що дані не в порядку, одержувач перевпорядкує дані, щоб забезпечити правильний порядок.

Номер підтвердження: Це порядковий номер, який використовується в TCP для підтвердження отримання даних. Він вказує порядковий номер наступних даних, які відправник очікує отримати. У TCP-з'єднанні одержувач визначає, які дані були успішно отримані, на основі порядкового номера отриманого сегмента пакета даних. Коли одержувач успішно отримує дані, він надсилає відправнику пакет ACK, який містить номер підтвердження. Після отримання пакета ACK відправник може підтвердити, що дані перед підтвердженням номера відповіді були успішно отримані.

Керуючі біти сегмента TCP включають наступне:

Біт підтвердженняКоли цей біт дорівнює 1, це означає, що поле підтвердження відповіді є дійсним. TCP вказує, що цей біт має бути встановлений на 1, за винятком SYN-пакетів, коли з'єднання встановлюється спочатку.
RST-бітКоли цей біт дорівнює 1, це вказує на те, що в TCP-з'єднанні виник виняток, і з'єднання потрібно примусово розірвати.
SYN-бітКоли цей біт встановлено на 1, це означає, що з'єднання має бути встановлено, і початкове значення порядкового номера встановлюється в полі порядкового номера.
FIN-бітКоли цей біт дорівнює 1, це означає, що в майбутньому дані більше не надсилатимуться, і з'єднання бажане.
Різні функції та характеристики TCP втілені в структурі сегментів TCP-пакетів.

Що таке UDP? (Mylinking)Мережевий відвідний каналіМережевий пакетний брокерможе обробляти як TCP, так і UDP-пакети)
Протокол користувацьких дейтаграм (UDP) – це протокол зв'язку без встановлення з'єднання. Порівняно з TCP, UDP не надає складних механізмів керування. Протокол UDP дозволяє програмам безпосередньо надсилати інкапсульовані IP-пакети без встановлення з'єднання. Коли розробник вирішує використовувати UDP замість TCP, програма взаємодіє безпосередньо з IP-адресою.

Повна назва протоколу UDP — User Datagram Protocol (Протокол користувацьких дейтаграм), а його заголовок містить лише вісім байтів (64 біти), що дуже лаконічно. Формат заголовка UDP такий:

Сегмент UDP

Порти призначення та відправленняЇхнє головне призначення — вказати, якому процесу UDP має надсилати пакети.
Розмір пакетаПоле розміру пакета містить розмір заголовка UDP плюс розмір даних.
Контрольна сумаРозроблено для забезпечення надійної доставки заголовків і даних UDP. Роль контрольної суми полягає у виявленні помилки або пошкодження під час передачі UDP-пакета, щоб гарантувати цілісність даних.

Різниця між TCP та UDP у MylinkingМережевий відвідний каналіМережевий пакетний брокерможе обробляти як TCP, так і UDP-пакети
TCP та UDP відрізняються в наступних аспектах:

TCP проти UDP

З'єднанняTCP — це транспортний протокол, орієнтований на з’єднання, який вимагає встановлення з’єднання перед передачею даних. UDP, з іншого боку, не потребує з’єднання та може передавати дані негайно.

Об'єкт службиTCP — це двоточкова служба «один до одного», тобто з’єднання має лише дві кінцеві точки для зв’язку одна з одною. Однак UDP підтримує інтерактивний зв’язок «один до одного», «один до багатьох» та «багато до багатьох», що дозволяє одночасно взаємодіяти з кількома хостами.

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

Контроль заторів, контроль потокуTCP має механізми контролю перевантаження та керування потоком, які можуть регулювати швидкість передачі даних відповідно до мережевих умов, щоб забезпечити безпеку та стабільність передачі даних. UDP не має механізмів контролю перевантаження та керування потоком, навіть якщо мережа дуже перевантажена, він не вноситиме корективи у швидкість надсилання UDP.

Заголовок накладних витратTCP має довгий заголовок, зазвичай 20 байт, який збільшується при використанні полів опцій. UDP, з іншого боку, має фіксований заголовок лише 8 байт, тому UDP має менші накладні витрати на заголовок.

TCP проти UDP

Сценарії застосування TCP та UDP:
TCP та UDP – це два різні протоколи транспортного рівня, і вони мають деякі відмінності в різних сценаріях застосування.

Оскільки TCP є протоколом, орієнтованим на з'єднання, він переважно використовується в сценаріях, де потрібна надійна доставка даних. Деякі поширені випадки використання включають:

Передача файлів по FTPTCP може гарантувати, що файли не будуть втрачені та пошкоджені під час передачі.
HTTP/HTTPSTCP забезпечує цілісність та правильність веб-контенту.
Оскільки UDP є протоколом без встановлення з'єднання, він не гарантує надійності, але має характеристики ефективності та роботи в режимі реального часу. UDP підходить для таких сценаріїв:

Низькопакетний трафік, такий як DNS (система доменних імен)DNS-запити зазвичай є короткими пакетами, і UDP може обробляти їх швидше.
Мультимедійний зв'язок, такий як відео та аудіоДля передачі мультимедіа з високими вимогами до реального часу UDP може забезпечити меншу затримку, щоб гарантувати своєчасну передачу даних.
Широкомовне спілкуванняUDP підтримує зв'язок «один до багатьох» та «багато до багатьох» і може використовуватися для передачі широкомовних повідомлень.

Короткий зміст
Сьогодні ми вивчали TCP. TCP — це надійний протокол транспортного рівня, орієнтований на встановлення з'єднання, заснований на потоці байтів. Він забезпечує надійну передачу та впорядкований прийом даних шляхом встановлення з'єднання, встановлення рукостискання та підтвердження. Протокол TCP використовує порти для реалізації зв'язку між процесами та надає прямі комунікаційні послуги для процесів додатків, що працюють на різних хостах. З'єднання TCP є повнодуплексними, що дозволяє одночасну двонаправлену передачу даних. На відміну від цього, UDP — це протокол зв'язку, орієнтований на безз'єднання, який не забезпечує гарантій надійності та підходить для деяких сценаріїв з високими вимогами до реального часу. TCP та UDP відрізняються режимом з'єднання, об'єктом обслуговування, надійністю, контролем перевантаження, контролем потоку та іншими аспектами, а також різними є їхні сценарії застосування.


Час публікації: 03 грудня 2024 р.