В чем разница между TCP и UDP?
Я знаю, что TCP используется в случае не критичных ко времени приложений, а UDP используется для игр или приложений, требующих быстрой передачи данных. Я знаю, что TCP используется для HTTP, HTTP, FTP, SMTP и Telnet. Я знаю, что UDP используется для DNS и DHCP.
Но почему? Какие характеристики TCP и UDP делают его полезным для их соответствующих случаев использования?
tcp
network-programming
udp
protocols
user749414
источник
источник
Ответы:
TCP
ориентированный на соединение поток через IP-сеть Это гарантирует, что все отправленные пакеты достигнут пункта назначения в правильном порядке. Это подразумевает использование пакетов подтверждения, отправленных обратно отправителю, и автоматическую повторную передачу, что вызывает дополнительные задержки и в целом менее эффективную передачу, чемUDP
.UDP
протокол без установления соединения Связь ориентирована на дейтаграммы . Целостность гарантируется только на одной дейтаграмме. Датаграммы достигают пункта назначения и могут прибыть из строя или не прибыть вообще. Это более эффективно, чемTCP
потому, что оно использует не ACK . Обычно он используется для связи в реальном времени, где небольшой процент потери пакетов предпочтительнее, чем издержкиTCP
соединения.В определенных ситуациях
UDP
используется, потому что это позволяет передачу широковещательного пакета. Иногда это имеет основополагающее значение в таких случаях, какDHCP
протокол, потому что клиентский компьютер еще не получилIP
адрес (этоDHCP
цель протокола согласования), и не будет никакого способа установитьTCP
поток без самогоIP
адреса.источник
Из статьи Skullbox:
1) TCP ориентирован на соединение и надежен, тогда как UDP - соединение менее и ненадежно.2) TCP нуждается в большей обработке на уровне сетевого интерфейса, где, как в UDP, это не так.
3) TCP использует 3-х стороннее рукопожатие, контроль перегрузки, управление потоком и другие механизмы для обеспечения надежной передачи.
4) UDP в основном используется в случаях, когда задержка пакета более серьезна, чем потеря пакета.
источник
is the most commonly used protocol on the Internet
утверждение спорно и действительно зависит от того, как вы определяетеmost commonly used
,protocol
иthe Internet
. Например, интернет-протокол является более вероятным претендентом на эту конкретную корону.Думайте о TCP как о выделенном запланированном получении / отправке пакетов UPS / FedEx между двумя местоположениями, тогда как UDP является эквивалентом выброса открытки в почтовый ящик.
UPS / FedEx сделает все возможное, чтобы убедиться, что посылка, которую вы отправляете, будет доставлена туда и доставлена вовремя. С открыткой вам повезет, если она вообще появится, и она может прийти не в порядке или поздно (сколько раз вы получили открытку от кого-то ПОСЛЕ того, как они вернулись домой из отпуска?)
TCP максимально приближен к гарантированному протоколу доставки, в то время как UDP - всего лишь «наилучшее усилие».
источник
Причины 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 все, что вы получаете во время задержки - это пауза, за которой следует аудио, которое всегда будет задерживаться на столько, сколько оно уже приостановило. Для двусторонних телефонных разговоров это недопустимо.
источник
Одним из отличий является короче
UDP : отправьте сообщение и не оглядывайтесь назад, если оно достигло места назначения, протокол без установления соединения
TCP : отправьте сообщение и гарантируйте, что оно достигло места назначения, протокол с установлением соединения
источник
TCP устанавливает соединение до фактической передачи данных, а UDP - нет. Таким образом, UDP может обеспечить более быструю доставку. Такие приложения, как DNS, доступ к серверу времени, следовательно, используют UDP.
В отличие от UDP, TCP использует контроль перегрузки. Это отвечает на загрузку сети. В отличие от UDP, он замедляется, когда перегрузка сети неизбежна. Таким образом, такие приложения, как мультимедиа, предпочитающие постоянную пропускную способность, могут использовать UDP.
Кроме того, UDP ненадежен, он не реагирует на потери пакетов. Поэтому чувствительные к потерям приложения, такие как мультимедийная передача, предпочитают UDP. Тем не менее, TCP является надежным протоколом, поэтому приложения, которые требуют надежности, такие как веб-передача, электронная почта, загрузка файлов, предпочитают TCP.
Кроме того, в современном Интернете UDP не так радушен, как TCP, из-за средних ящиков. Некоторые приложения, такие как Skype, переключаются на TCP, когда предполагается, что UDP-соединение заблокировано.
источник
Закон утечек абстракций Джоэл Спольски
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
источник
Короткие и простые различия между протоколами Tcp и Udp:
1) Tcp - протокол управления передачей и Udp - протокол дейтаграмм пользователя.
2) Tcp - надежный протокол, где Udp - ненадежный протокол.
3) Tcp ориентирован на поток, а Udp - протокол, ориентированный на сообщения.
4) Tcp медленнее, чем Udp.
источник
Запустите эту ветку и позвольте мне попытаться выразить это таким образом.
TCP
3-х стороннее рукопожатие
Боб: Эй, Эми, я бы хотел рассказать тебе секрет.
Эми: Хорошо, давай, я готова.
Боб: Хорошо.
Связь
Боб: «Я», это первое письмо
Эми: Первое письмо получено, пожалуйста, пришлите мне второе письмо
Боб: «», Это второе письмо
Эми: Второе письмо получено, пожалуйста, пришлите мне третье письмо
Боб: «L ', это третье письмо.
Через некоторое время
Боб: ' L ', это третье письмо
Эми: Третье письмо получено, пожалуйста, пришлите мне четвертое письмо
Боб: ' O ', это четвертое письмо
Эми: ...
... ...
Рукопожатие в 4 направлениях
Боб: Мой секрет раскрыт, теперь вы знаете мое сердце.
Эми: ОК. Мне нечего сказать.
Боб: ОК.
UDP
Боб: Я люблю тебя,
Эми получила: ОВИ ЛЕ
TCP более надежен, чем UDP, с гарантированным ровным порядком сообщений, поэтому нет сомнений, почему UDP более легкий и эффективный.
источник
Простое объяснение по аналогии
TCP это так.
Представьте, что у вас есть друг по переписке на Марсе (мы общались с письменными письмами в добрые старые времена перед Интернетом).
Вы должны отправить своему другу по переписке семь привычек высокоэффективных людей. Таким образом, вы решили отправить его в семи отдельных письмах:
и т.п.
и т. д. Письмо 7 - Заточка пилы
Требования:
Вы хотите убедиться, что ваш друг по переписке получает все ваши письма - в порядке и чтобы они приходили идеально . Если ваша ручка за перо получает букву 7 перед буквой 1 - это не хорошо. если ваш друг по переписке получает все буквы, кроме буквы 3 - это тоже не хорошо.
Вот как мы обеспечиваем выполнение наших требований:
источник
TLDR;
Прежде чем мы начнем, помните, что все недостатки чего-либо являются продолжением его преимуществ . Там только правильный инструмент для работы, без панацеи. TCP / UDP сосуществуют на протяжении десятилетий, и не без причины.
TCP
Это было разработано, чтобы быть чрезвычайно надежным, и это делает свою работу очень хорошо. Это так сложно, потому что выполняет сложную задачу: обеспечение надежного транспорта по ненадежному протоколу IP.
Поскольку вся сложная логика TCP инкапсулирована в сетевой стек, вы свободны от множества трудоемких, подверженных ошибкам низкоуровневых вещей на уровне приложений.
Когда вы отправляете данные по TCP, вы записываете поток байтов в сокет у отправителя, где они разбиваются на пакеты, передаются по стеку и отправляются по проводам. На стороне получателя пакеты снова собираются в непрерывный поток байтов.
Поддержание этой хорошей абстракции имеет стоимость с точки зрения сложности и производительности. Если 1-й пакет из потока байтов потерян, получатель задержит обработку последующих пакетов, даже если они уже получены.
Кроме того, чтобы быть надежным, TCP реализует это:
Все это усугубляется в медленных ненадежных беспроводных сетях, в то время как TCP был разработан для проводных сетей, где задержки предсказуемы, а потеря пакетов встречается не так часто. Кроме того, как уже упоминалось, для некоторых вещей TCP просто не работает вообще (DHCP). Однако, где это уместно, TCP по-прежнему работает исключительно хорошо.
Используя почтовую аналогию, сеанс TCP подобен рассказу истории вашему секретарю, который разбивает ее на почту и отправляет через дерьмовую почтовую службу издателю. С другой стороны, другой секретарь собирает письма в один фрагмент текста. Некоторые письма теряются, другие - испорчены, поэтому для надежной доставки требуется очень сложная процедура, и ваша 10-страничная история может занять много времени, чтобы добраться до вашего издателя.
UDP
UDP, с другой стороны, ориентирован на сообщения, поэтому получатель записывает сообщение (пакет) в сокет, а затем передает его получателю как есть, без разделения / сборки.
По сравнению с TCP его спецификация очень проста. По сути, все, что он делает для вас - это добавляет контрольную сумму к пакету, чтобы получатель мог обнаружить ее повреждение. Все остальное должно быть реализовано вами, разработчиком программного обеспечения. Теперь прочитайте обширную спецификацию TCP и попробуйте подумать о повторной реализации некоторых ее частей.
Некоторые пошли по этому пути и получили очень приличные результаты, вплоть до того, что HTTP / 3 использует QUIC - протокол, основанный на UDP. Тем не менее, это скорее исключение. Обычными приложениями UDP являются приложения для потоковой передачи аудио и видео, такие как Skype, Zoom или Google Hangout, где потеря пакетов не так важна по сравнению с задержкой, введенной TCP.
источник