Відмінність TCP від ​​UDP?


144

Чим відрізняється TCP від ​​UDP?

Я знаю, що TCP використовується у випадку критичних програм, які не мають часу, а UDP використовується для ігор чи програм, які потребують швидкої передачі даних. Я знаю, що TCP використовується для HTTP, HTTP, FTP, SMTP та Telnet. Я знаю, що UDP використовується для DNS та DHCP.

Але чому? Які характеристики TCP та UDP роблять корисними для їх відповідних випадків використання?


13
І це ( skullbox.net/tcpudp.php ) - який був першим хітом Google - було недостатньо зрозумілим? Що в цьому бентежило? Може, це краще? tcpipguide.com/free/…
S.Lott

1
Мені дуже цікаво, чому це питання отримало (під час написання) 3 підсумків. Перше речення навіть не має сенсу, і на цю тему доступно багато матеріалів на цю тему.
Метт

21
@MattH: 1) Це гарне запитання, якщо воно досить широке і дублікат вже добре відповів. 2) Ви мали більш ніж достатньо репутації, щоб виправити друкарську помилку в першому реченні. 3) Не має значення, що інформація про це існує в інших місцях. Переповнення стека має на меті стати сховищем знань і тут канонічно відповідає на питання .
ire_and_curses

2
Цікаво, що майже ніхто не згадує, що DHCP використовує трансляцію, але всі думають, що "відповідь" стосується гарантії доставки та повторної передачі.
Хіт Ханнікутт

1
Щойно для тих, хто читає це в майбутньому, на згаданому вище сайті Skullbox є МАЛУАРІЯ згідно Google (він зупинив мене, коли я натиснув на нього). Я б радив не їхати туди.
Alan006

Відповіді:


119

TCP- це потік, орієнтований на з'єднання через мережу IP. Це гарантує, що всі відправлені пакети доїдуть до пункту призначення у правильному порядку. Це означає використання пакетів підтвердження, відправлених назад відправнику, і автоматичну повторну передачу, що спричиняє додаткові затримки та загальну менш ефективну передачу, ніж UDP.

UDPє протоколом, який не потребує з'єднання. Комунікація орієнтована на дейтаграму . Цілісність гарантується лише на одній дейтаграмі. Даніграми досягають місця призначення і можуть вийти з ладу або взагалі не прибути. Це більш ефективно, ніж TCPчерез те, що він використовує не ACK . Зазвичай використовується для зв'язку в режимі реального часу, де невеликий відсоток швидкості втрати пакету є кращим, ніж накладні витрати TCPзв'язку.

У певних ситуаціях UDPвикористовується, оскільки дозволяє широкомовно передавати пакетну передачу. Це іноді є основоположним у таких випадках, як DHCPпротокол, тому що клієнтська машина ще не отримала IPадресу (це і є DHCPмета протоколу переговорів), і немає ніякого способу встановити TCPпотік без самої IPадреси.


5
Приклад, коли використовується UDP, - це передача відео та аудіо, де втрата декількох пакетів тут і там зазвичай не має великого значення (колір кадру може бути відключений, або крихітна наносекунда аудіо може бути вирізана або змінена - не дуже помітно для людини). Звичайно, якщо ваш зв’язок справді поганий, ви можете втратити стільки пакетів, що відео видається розмитим / нерівним, а звук стає нечітким і сильно скорочується.
Ніко Белік

53

З статті Skullbox:

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

UDP (User Datagram Protocol) - це протокол, який часто використовується в Інтернеті. Однак UDP ніколи не використовується для надсилання важливих даних, таких як веб-сторінки, інформація про бази даних тощо; UDP зазвичай використовується для передачі аудіо та відео. Потокові носії інформації, такі як аудіофайли Windows Media (.WMA), Real Player (.RM) та інші, використовують UDP, оскільки він пропонує швидкість! Причина UDP швидша, ніж TCP, тому що немає форми контролю потоку або виправлення помилок. На дані, що надсилаються через Інтернет, впливають зіткнення, і помилки будуть наявними. Пам'ятайте, що UDP хвилює лише швидкість. Це головна причина того, чому потокове носій не має високої якості.

1) TCP орієнтований на з'єднання і надійний там, де UDP є менш надійним і ненадійним.

2) TCP потребує більшої обробки на рівні мережевого інтерфейсу там, де в UDP це не так.

3) TCP використовує 3-х спосіб рукостискання, контроль заторів, контроль потоку та інший механізм для забезпечення надійної передачі.

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


1
+1 Розумно хороший підсумок. Хоча is the most commonly used protocol on the Internetтвердження є спірним і насправді залежить від того, як ви визначаєте most commonly used, protocolі the Internet. Наприклад, Інтернет-протокол є більш імовірним суперником саме цієї корони.
Матвія

-1: Причина, що UDP використовується для DHCP, не має нічого спільного із затримкою або втратою пакету.
Хіт Ханнікутт

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

UDP використовується для DHCP, оскільки TCP не підтримує трансляцію. DHCP покладається на використання широкомовної програми для отримання IP-адреси для сервера DHCP. Див stackoverflow.com/questions/21266008 / ...
ScottSmudger

41

Подумайте про TCP як про спеціалізований плановий підбір UPS / FedEx / Dropoff пакетів між двома місцями, тоді як UDP - еквівалент закидання листівки у поштову скриньку.

UPS / FedEx зробить найсміливіше, щоб переконатися, що пакет, який ви відправляєте, відправляється туди, і доставить його там вчасно. З листівкою вам пощастить, якщо вона взагалі надійшла, і вона може вийти з ладу чи пізно (скільки разів ви дістали листівку від когось ПІСЛЯ, коли вони повернулися додому з відпустки?)

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


1
Достойна відповідь. Я додам, що в потоці TCP пакети визнаються пунктом призначення, а пошкоджені пакети / відсутні пакети відкидаються відправником. У UDP пакети надсилаються, а адресат отримує їх у будь-якому порядку та не підтверджує отримання.
Ерік Недлоудак

2
Трохи оманливої ​​аналогії, можливо, більше підходить до QoS
Метт

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

22

Причини UDP використовуються для DNS та DHCP:

DNS - TCP вимагає більше ресурсів від сервера (який слухає з'єднання), ніж для клієнта. Зокрема, коли з'єднання TCP закрите, сервер повинен запам'ятати дані про з'єднання (зберігаючи їх у пам'яті) протягом двох хвилин, під час стану, відомого як TIME_WAIT_2. Це функція, яка захищає від помилково повторюваних пакетів з попереднього з'єднання, що інтерпретується як частина поточного з'єднання. Підтримка TIME_WAIT_2 використовує пам'ять ядра на сервері. Запити DNS невеликі і часто надходять від багатьох різних клієнтів. Ця схема використання посилює навантаження на сервер порівняно з клієнтами. Вважалося, що використання UDP, яке не має з'єднань і не підтримує стан ні на клієнті, ні на сервері, покращить цю проблему.

DHCP - DHCP - це розширення BOOTP. BOOTP - це протокол, який клієнтські комп'ютери використовують для отримання інформації про конфігурацію з сервера, а клієнт завантажується. Для того, щоб знайти сервер, передається трансляція із запитом серверів BOOTP (або DHCP). Трансляції можна надіслати лише через протокол без підключення, наприклад UDP. Тому для BOOTP потрібен принаймні один пакет UDP для широкомовної передачі сервера. Крім того, оскільки BOOTP працює, поки клієнт ... завантажується, і це період часу, коли у клієнта може не бути завантажений і запущений весь стек TCP / IP, UDP може бути єдиним протоколом, з яким клієнт готовий працювати. час. Нарешті, деякі клієнти DHCP / BOOTP мають на борту лише UDP. Наприклад, деякі IP-термостати реалізують лише UDP.

Як уже згадували інші, UDP також корисний для потокового передавання медіа, особливо аудіо. Бесіди краще звучать під затримкою мережі, якщо ви просто скинете затримані пакети. Це можна зробити за допомогою UDP, але з TCP все, що ви отримуєте під час затримки, - це пауза, а потім звук, який завжди буде відкладений на стільки, скільки він призупинився. Для двосторонніх телефонних розмов це неприпустимо.


17

Одна з відмінностей полягає в короткому

UDP : Надішліть повідомлення і не огляньтесь, якщо воно дійшло до пункту призначення, Протокол без підключення
TCP : Надіслати повідомлення та гарантувати досягнення пункту призначення, Протокол, орієнтований на з'єднання


9

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

На відміну від UDP, TCP використовує контроль заторів. Він відповідає на навантаження мережі. На відміну від UDP, він сповільнюється, коли неминучий перевантаженість мережі. Отже, такі програми, як мультимедіа, що віддають перевагу постійній пропускній здатності, можуть перейти на UDP.

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

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



2

Короткі та прості відмінності між протоколом Tcp та Udp:

1) Tcp - протокол управління передачею та Udp - протокол дейтаграми користувача.

2) Tcp є надійним протоколом, де як Udp - ненадійний протокол.

3) Tcp - орієнтований на потік, де як Udp - протокол, орієнтований на повідомлення.

4) Tcp повільніше, ніж Udp.


1

Набігайте на цю тему і дозвольте мені спробувати висловити це таким чином.

TCP

3-х сторонне рукостискання

Боб: Ей Емі, я хотів би розповісти вам таємницю
Емі: Гаразд, продовжуй, я готовий
Боб: добре

Спілкування
Боб: "Я", це перший лист
Емі: Перший лист отриманий, будь ласка, надішліть мені другий лист
Боб: '', це другий лист
Емі: Другий лист отриманий, будь ласка, надішліть мені третій лист
Боб: 'L ', це третя літера
Через деякий час
Боб: ' L ', це третя літера
Емі: Третій лист отриманий, будь ласка, надішліть мені четвертий лист
Боб: ' О ', це четвертий лист
Емі: ...
... ...

4-х сторонне рукостискання
Боб: Моя таємниця викрита, тепер ви знаєте моє серце.
Емі: Гаразд. Мені нічого сказати.
Боб: Гаразд.

UDP

Боб: Я люблю U
Емі отримав: OVI LE

TCP є більш надійним, ніж UDP, з рівним замовленням гарантовано, тому UDP є більш легким та ефективним.


0

Просте пояснення за аналогією

TCP такий.

Уявіть, у вас на Марсі є ручка (ми спілкувались письмовими листами ще за добрі дні до Інтернету).

Вам потрібно надіслати рукою сім звичок високоефективних людей. Тож ви вирішили надіслати це у семи окремих листах:

  1. Лист 1 - проявляйте активність
  2. Лист 2 - Почніть з кінця на увазі ...

тощо.

та інше. Письмо 7 - Заточуйте пилу

Вимоги:

Ви хочете переконатися, що ваш ручка отримує всі ваші листи - для того, щоб вони надійшли ідеально . Якщо ваша зарплата за перо отримує лист 7 перед листом 1 - це не добре. якщо ваш товариш пером отримує всі листи, крім букви 3 - це також не є корисним.

Ось як ми гарантуємо виконання наших вимог:

  • Лист-підтвердження. Отже, ваша ручка пересилає лист-підтвердження, в якому сказано: "Я отримав лист 1". Таким чином, ви знаєте, що ваш товариш за ручку отримав це. Якщо лист не надходить або не виходить з ладу, то вам доведеться зупинитися, повернутися і повторно надіслати цей лист та всі наступні листи.
  • Контроль потоку: Приблизно під час Різдва ви знаєте, що ваш ручка буде отримувати багато пошти, тому ви сповільнюєтесь, оскільки не хочете перевантажувати свою ручку. (Ваш товариш по руці надсилає вам постійні оновлення щодо кількості непрочитаних повідомлень, які містяться в поштовій скриньці penpal - якщо ваш товариш ручки говорить, що папка "Вхідні" вибухне тому, що вона настільки повна, то ви сповільнюєте надсилання листів - тому що ваша ручка не зможе їх прочитати.
  • Ідеальний приїзд. Іноді, поки ви відправляєте свій лист поштою, він може зірватися, або равлик може з'їсти половину його. Звідки ти знаєш, що весь твій лист надійшов у ідеальному стані? Добре, що ваша ручка з ручками дасть вам механізм, за допомогою якого ви можете перевірити, чи отримали вони повний лист, і чи саме той лист ви надіслали. (наприклад, через кількість слів тощо). основна аналогія.

0

TLDR;

  • TCP - орієнтований на потік, вимагає з'єднання, надійний, повільний
  • UDP - орієнтований на повідомлення, без зв’язку, ненадійного, швидкого

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

TCP

Він був розроблений як надзвичайно надійний, і він робить свою роботу дуже добре. Це так складно, бо виконує важке завдання: довести надійний транспорт через ненадійний протокол IP.

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

Коли ви надсилаєте дані через TCP, ви записуєте потік байтів у сокет у відправника, де він розбивається на пакети, передається вниз по стеку і надсилається по дроту. На стороні приймача пакети знову збираються у безперервний потік байтів.

Збереження цієї приємної абстракції має вартістю у плані складності та продуктивності. Якщо 1-й пакет з потоку байтів втрачено, приймач затримає обробку наступних пакетів, навіть тих, що вже надійшли.

Крім того, щоб бути надійними, TCP реалізує це:

  • TCP вимагає встановленого з'єднання, для якого потрібні 3 об'їзних ("сумнозвісні" тристоронні рукостискання).
  • TCP має функцію під назвою "повільний старт", коли вона поступово збільшує швидкість передачі після встановлення з'єднання, щоб дозволити одержувачеві йти в ногу з даними.
  • Кожен надісланий пакет повинен бути підтверджений, інакше відправник перестане надсилати більше даних
  • І на, і на, і на ...

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

Використовуючи аналогію пошти, сеанс TCP подібний до того, щоб розповісти історію своєму секретареві, який розбиває її на пошту та надсилає видавцеві поштову послугу. З іншого боку інший секретар збирає пошту в один фрагмент тексту. Деякі листи втрачаються, деякі пошкоджуються, тому для надійної доставки потрібна дуже складна процедура, і ваша історія на 10 сторінок може зайняти багато часу, щоб дістатися до вашого видавця.

UDP

UDP, з іншого боку, орієнтований на повідомлення, тому приймач записує повідомлення (пакет) у сокет, а потім передається на приймач таким, яким він є, без розбиття / складання.

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

Деякі люди пішли цим шляхом і отримали дуже пристойні результати, до того, що HTTP / 3 використовує QUIC - протокол, заснований на UDP. Однак це більше виняток. Поширені програми UDP - це аудіо / відео для потокової та конференц-програми, такі як Skype, Zoom або Google Hangout, де втрата пакетів не настільки важлива порівняно із затримкою, запровадженою TCP.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.