TCP блокує пряму чергу, оскільки це гарантує повну та замовлену доставку, тому, коли пакет втрачається під час транзиту, він повинен чекати повторної передачі відсутнього пакету, тоді як UDP доставляє пакети до програми, коли вони надійдуть. , включаючи дублікати і без жодної гарантії, що пакет прибуває взагалі або в якому порядку вони надходять (це насправді фактично IP з номерами портів та додається (необов'язково) контрольна сума корисного навантаження), але це добре для телефонії, наприклад, там, де зазвичай просто не має значення, коли пропадає кілька мілісекунд аудіо, але затримка дуже дратує, тому ви не турбуєтесь з повторними передачами, ви просто кидаєте будь-які дублікати, сортуєте впорядковані пакети в потрібному порядку за кілька сотень мілісекунд буфера джиттера , і якщо пакети не з’являються вчасно або зовсім, вони просто пропускаються,можливо інтерпольований, коли підтримується кодеком.
Крім того, основна частина TCP - це управління потоком, щоб переконатися, що ви отримаєте якомога більше обчислювачів, але не перевантажуючи мережу (яка начебто зайва, оскільки перевантажена мережа скидає ваші пакети, а значить, вам доведеться це зробити повторна передача, що шкодить пропускній здатності), UDP не має нічого з цього - що має сенс для таких додатків, як телефонія, оскільки телефонія з заданим кодеком потребує певної кількості пропускної здатності, ви не можете "уповільнити її", а додаткова пропускна здатність також не робить дзвінок швидше.
На додаток до додатків у режимі реального часу / низької затримки, UDP має сенс для дійсно невеликих транзакцій, таких як пошук DNS, просто тому, що він не має встановлення TCP-з’єднання та викриття накладних витрат, як з точки зору затримки, так і з точки зору використання пропускної здатності. Якщо ваш запит менший, ніж типовий MTU, і, можливо, також є repsonse, ви можете зробити це за один перехід, без необхідності зберігати будь-який стан на сервері, а також замовляти контроль потоків і все, що, ймовірно, не особливо корисно для таких застосувань.
І тоді, ви можете використовувати UDP, щоб створити власні заміни TCP, але, мабуть, це не гарна ідея без глибокого розуміння мережевої динаміки, сучасні алгоритми TCP досить складні.
Крім того, я думаю, слід зазначити, що існує більше, ніж UDP і TCP, таких як SCTP і DCCP. Єдина проблема в даний час полягає в тому, що Інтернет (IPv4) переповнений NAT-шлюзами, які унеможливлюють використання протоколів, відмінних від UDP та TCP, у додатках для кінцевих користувачів.