Разница между TCP и UDP?

144

В чем разница между TCP и UDP?

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

Но почему? Какие характеристики TCP и UDP делают его полезным для их соответствующих случаев использования?

user749414
источник
13
И этого ( skullbox.net/tcpudp.php ) - который был первым попаданием Google - было недостаточно ясно? Что смущало в этом? Может это лучше? tcpipguide.com/free/...
С. Лотт
1
Мне действительно любопытно, почему этот вопрос получил (на момент написания) 3 голосов. Первое предложение даже не имеет смысла, и по этой теме доступно много материала, если поискать.
MattH
21
@MattH: 1) Это хороший вопрос, хотя и достаточно широкий, и на него уже есть хороший ответ. 2) У вас более чем достаточно репутации, чтобы исправить опечатку в первом предложении. 3) Не имеет значения, что информация об этом существует в другом месте. Переполнение стека стремится стать хранилищем знаний и дает ответы на вопросы здесь .
ire_and_curses
2
Интересно, что почти никто не упоминает, что DHCP использует широковещательную рассылку, но все думают, что «ответ» касается гарантии доставки и повторной передачи.
Хит Ханникутт
1
Просто для любого, кто еще прочтет это в будущем, на упомянутом выше сайте Skullbox есть MALWARE по словам 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 в основном используется в случаях, когда задержка пакета более серьезна, чем потеря пакета.

p27
источник
1
+1 Достаточно хорошее резюме. Хотя is the most commonly used protocol on the Internetутверждение спорно и действительно зависит от того, как вы определяете most commonly used, protocolи the Internet. Например, интернет-протокол является более вероятным претендентом на эту конкретную корону.
MattH
-1: причина, по которой UDP используется для DHCP, не имеет никакого отношения к задержке или потере пакета.
Хит Ханникутт
2
При отправке большого количества данных по свободному каналу TCP часто работает быстрее, чем UDP. Причиной использования UDP для таких вещей, как потоковая передача аудио или видео, является то, что при пропаже TCP-пакета принимающее приложение больше ничего не увидит, пока отсутствующие данные не будут повторно переданы и успешно приняты. Во многих потоковых приложениях данные, которые поступают с опозданием, будут бесполезны, поэтому нет смысла задерживать все в ожидании повторной передачи, которая в любом случае будет бесполезной.
суперкат
UDP используется для DHCP, потому что TCP не поддерживает широковещательные рассылки. DHCP полагается на использование широковещательной передачи для получения IP-адреса для сервера DHCP. См stackoverflow.com/questions/21266008/...
ScottSmudger
41

Думайте о TCP как о выделенном запланированном получении / отправке пакетов UPS / FedEx между двумя местоположениями, тогда как UDP является эквивалентом выброса открытки в почтовый ящик.

UPS / FedEx сделает все возможное, чтобы убедиться, что посылка, которую вы отправляете, будет доставлена ​​туда и доставлена ​​вовремя. С открыткой вам повезет, если она вообще появится, и она может прийти не в порядке или поздно (сколько раз вы получили открытку от кого-то ПОСЛЕ того, как они вернулись домой из отпуска?)

TCP максимально приближен к гарантированному протоколу доставки, в то время как UDP - всего лишь «наилучшее усилие».

Марк Б
источник
1
Достойный ответ. Я бы добавил, что в потоке TCP пакеты подтверждаются адресатом, а поврежденные пакеты / отсутствующие пакеты повторно отправляются отправителем. В UDP пакеты отправляются, и получатель получает их в любом порядке и не подтверждает получение.
Эрик Недулайк
2
Немного вводящей в заблуждение аналогии, возможно, более подходящей для QoS
MattH
11
Мне очень нравится аналогия, но одна вещь, которую этот ответ слегка искажает, - это скорость. Звучит так, будто TCP работает быстрее, тогда как на самом деле UDP - потому что меньше накладных расходов.
иликетокод
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 : отправьте сообщение и гарантируйте, что оно достигло места назначения, протокол с установлением соединения

caltuntas
источник
9

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

В отличие от UDP, TCP использует контроль перегрузки. Это отвечает на загрузку сети. В отличие от UDP, он замедляется, когда перегрузка сети неизбежна. Таким образом, такие приложения, как мультимедиа, предпочитающие постоянную пропускную способность, могут использовать UDP.

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

Кроме того, в современном Интернете UDP не так радушен, как TCP, из-за средних ящиков. Некоторые приложения, такие как Skype, переключаются на TCP, когда предполагается, что UDP-соединение заблокировано.

Тимир
источник
2

Короткие и простые различия между протоколами Tcp и Udp:

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

2) Tcp - надежный протокол, где Udp - ненадежный протокол.

3) Tcp ориентирован на поток, а Udp - протокол, ориентированный на сообщения.

4) Tcp медленнее, чем Udp.

ЦКМ
источник
1

Запустите эту ветку и позвольте мне попытаться выразить это таким образом.

TCP

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

Боб: Эй, Эми, я бы хотел рассказать тебе секрет.
Эми: Хорошо, давай, я готова.
Боб: Хорошо.

Связь
Боб: «Я», это первое письмо
Эми: Первое письмо получено, пожалуйста, пришлите мне второе письмо
Боб: «», Это второе письмо
Эми: Второе письмо получено, пожалуйста, пришлите мне третье письмо
Боб: «L ', это третье письмо.
Через некоторое время
Боб: ' L ', это третье письмо
Эми: Третье письмо получено, пожалуйста, пришлите мне четвертое письмо
Боб: ' O ', это четвертое письмо
Эми: ...
... ...

Рукопожатие в 4 направлениях
Боб: Мой секрет раскрыт, теперь вы знаете мое сердце.
Эми: ОК. Мне нечего сказать.
Боб: ОК.

UDP

Боб: Я люблю тебя,
Эми получила: ОВИ ЛЕ

TCP более надежен, чем UDP, с гарантированным ровным порядком сообщений, поэтому нет сомнений, почему UDP более легкий и эффективный.

Евгений
источник
0

Простое объяснение по аналогии

TCP это так.

Представьте, что у вас есть друг по переписке на Марсе (мы общались с письменными письмами в добрые старые времена перед Интернетом).

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

  1. Письмо 1 - Будьте активны
  2. Письмо 2 - Начните с конца ...

и т.п.

и т. д. Письмо 7 - Заточка пилы

Требования:

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

Вот как мы обеспечиваем выполнение наших требований:

  • Письмо с подтверждением: Ваш друг по переписке отправляет письмо с подтверждением «Я получил письмо 1». Таким образом, вы знаете, что ваш друг по переписке получил его. Если письмо не приходит или приходит не по порядку, то вам нужно остановиться и вернуться назад и повторно отправить это письмо и все последующие письма.
  • Управление потоком: во время Рождества вы знаете, что ваш друг по переписке будет получать много почты, поэтому вы замедляетесь, потому что не хотите перегружать своего друга по переписке. (Ваш друг по переписке отправляет вам постоянные обновления о количестве непрочитанных сообщений, которые есть в почтовом ящике друзей по переписке - если ваш друг по переписке говорит, что почтовый ящик собирается взорваться из-за его переполненности, то вы замедляете отправку писем - потому что ваш друг по переписке не смогу их прочитать.
  • Идеальное прибытие. Иногда, когда вы отправляете ваше письмо по почте, оно может порваться, или улитка может съесть половину его. Откуда вы знаете, что все ваше письмо прибыл в идеальном состоянии? Ну, ваш друг по переписке даст вам механизм, с помощью которого вы сможете проверить, получили ли они полное письмо, и что именно это письмо вы отправили. (например, с помощью подсчета слов и т. д.). базовая аналогия.
BKSpurgeon
источник
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.

raiks
источник