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

46

Мой маршрутизатор имеет два протокола (и вариант «оба»), которые я могу выбрать при настройке переадресации портов: UDP и TCP. В чем разница между этими двумя протоколами и когда вы выбираете один из них при переадресации портов?

парень
источник

Ответы:

51

TCP поддерживается квитанций и повторных попыток , чтобы убедиться, получает данные , где это происходит. UDP без установления соединения и «запустить и забыть». UDP в основном используется для приложений потокового типа, где, если вы потеряете некоторые данные, вам не нужно пытаться отправить их снова.

Какой вы используете, зависит от приложения. Например, веб-сервер использует TCP.


источник
3
Это имеет смысл - поэтому, если вы смотрите потоковое видео, нет смысла повторно отправлять пропущенный кадр позже, потому что вы уже прошли этот этап. Спасибо
Парень
15
+1. Просто добавлю, что всем, кто ищет более глубокого понимания, следует прочесть одну из замечательных книг В. Ричарда Стивенса по этому вопросу. «TCP / IP Illustrated, v1» и «Сетевое программирование UNIX» служат отличными учебными пособиями и справочными материалами.
Murali Suriar
73

Вы можете найти хорошее резюме здесь:

В чем разница между протоколами UDP и TCP?

Как TCP, так и UDP работают на модели TCP / IP транспортного уровня, но имеют очень разное использование.

Наиболее важные отличия:

  • Надежность :
    TCP: ориентированный на
    соединение UDP: без установления соединения
  • Заказано :
    TCP: порядок получения сообщений гарантирован.
    UDP: порядок не гарантирован.
  • Вес протокола :
    TCP: тяжелый, из-за издержек соединения / заказа
    UDP: легкий, очень мало служебных данных
  • Пакеты :
    TCP: потоковая передача, данные читаются как «поток», и ничто не определяет, где заканчивается один пакет, а начинается другой. Может быть несколько пакетов на один вызов чтения.
    UDP: датаграммы, один пакет на один вызов чтения.

Рамная конструкция

Когда данные отправляются по сети, их необходимо инкапсулировать в так называемые «кадры». Существуют различные методы инкапсуляции в зависимости от используемого протокола и топологии. На следующих изображениях показано, как различаются структуры фреймов TCP и UDP.

Это структура фрейма TCP:

TCP кадр

Эта структура фрейма UDP намного проще:

Кадр UDP

Типичными протоколами, которые используют TCP, являются HTTP, FTP и SMTP. Примерами протоколов, использующих UDP, являются DNS и DHCP.

splattne
источник
@splattne - порядок получения сообщений является гарантией, а не передачей
Alnitak
@Alnitak: конечно, ты прав. Я имел ввиду, что квитанция гарантирована в порядке передачи. Я обновлю, чтобы прояснить это.
splattne
43

И объяснение уровня генерального директора:

UDP - это когда вы бросаете свою бумагу в общем направлении корзины.

TCP - когда он пропускает, вы снова и снова выбрасываете точные копии одной и той же бумаги, пока она не упадет в корзину. Это может привести к потере бумаги, даже повторные TCP-пакеты приводят к потере сетевых или системных ресурсов.

PGS
источник
1
Это очень хорошее объяснение "уровня генерального директора" - мне это нравится!
Кейтиус
Я не генеральный директор, но почему никто не сказал мне это раньше! : p
Николас Дориер
Это великолепно!
Shylent
7

TCP и UDP - оба протокола, которые работают поверх IP. TCP имеет гарантированную доставку, а UDP - нет. Вы бы выбрали один или другой для переадресации портов в зависимости от того, какую службу вы пытаетесь переадресовать. HTTP, например, TCP. Если вы не знаете, к какому протоколу относится служба, которую вы пытаетесь переадресовать, это почти наверняка TCP.

Брайан
источник
3

Чтобы ответить на другую часть вашего вопроса, вы должны переслать то, что использует ваше приложение. Для пересылки HTTP-трафика выберите TCP. Для пересылки трафика TFTP выберите UDP. Программы p2p в основном используют как tcp, так и udp, поэтому перешлите их обоих.

Все зависит от протокола и программы, которую вы используете.

hayalci
источник
ты не совсем прав. dns использует также tcp / 53, не так часто, но все же [например. для передачи зоны.
PQD
да. Также вполне допустимо отправлять регулярные DNS-запросы по TCP. Я изменил пример на TFTP, который использует исключительно UDP.
Хаялчи
2

Помимо упомянутых выше различий, TCP также обеспечивает

управление потоком. Используя оконный механизм, получатель ограничивает количество октетов (байтов), которое он хочет получить от отправителя, прежде чем отправитель должен дождаться разрешения на отправку дополнительных данных. Размер окна может быть изменен получателем по мере продолжения разговора. Это позволяет получателю «регулировать» скорость данных, поступающих от отправителя: UDP не позволяет этого, и все, что может сделать получатель, это выбросить данные, которые он не может буферизовать или обработать по прибытии.

некоторые более технические средства, такие как несмежное подтверждение (использует выборочные подтверждения, позволяющие отправителю повторно передавать только пропущенный кадр, а не пропущенный кадр, и последующие, которые получатель уже имеет, но не может подтвердить обычным способом), обработку перегрузки и адаптивная повторная передача (настройка таймера, который решает, как быстро повторно отправить переданный кадр, когда подтверждение не получено). Они не относятся к UDP, но помогают TCP предоставлять дополнительные услуги по UDP без значительного увеличения нагрузки на сеть для того же объема полезной нагрузки.

Рождество
источник
2

TCP делает все возможное, чтобы данные были переданы получателю; UDP не имеет.

Дж. Полфер
источник
Неправильно. Протокол IP не является надежным и может произойти потеря данных. TCP прилагает усилия к тому, чтобы отправленные данные (которые разбиты на мелкие части и отправлены через IP-пакеты) доставили их получателю (в конечном итоге, при необходимости повторно отправив небольшие части).
Аноним
@ Аноним - Вы в основном повторили то, что я сказал выше. Как я не прав?
Дж. Полфер
Я думаю, вы оба обнаружите, что IP является базовой структурой (стеком) и базовым протоколом связи, который используют как UDP, так и TCP. На самом деле вы не можете передавать полезные данные через Интернет, используя только IP, насколько я знаю - даже базовые эхо-запросы и т. Д. Используют протокол поверх IP (другой основной - ICMP).
Ли Б
1

Не берите в голову все ответы, объясняющие одно против другого. В целях настройки переадресации порта правила довольно просты: вам нужно выбрать TCP, если только документы для протокола / приложения, которое вы используете, скажем, для использования UDP. Обычно те, которые используют UDP, связаны с потоковой передачей или очень простыми вещами, которые предпочитают облегченные протоколы / скорость над надежностью (особенно DNS и NTP). Обратите внимание, что помимо TCP и UDP есть и другие протоколы - ICMP, туннельные протоколы и т. Д.

Ли Б
источник
1

Чем более известен протокол, тем больше маршрутизаторов на пути вмешиваются в протокол. Отправьте tcp пакеты, и есть большая вероятность, что полученные пакеты сильно искажены. UDP, как правило, не так искажен, а остальные 254 протокола IP-выплат обычно не затрагиваются.


источник
0

Протокол пользовательских дейтаграмм (UDP)

Он является частью базовых протоколов Internet Protocol Suite. Программы на сетевых компьютерах могут отправлять короткие сообщения, иногда называемые датаграммами. UDP не гарантирует никакой надежности (бывает, что датаграмма может прийти не в порядке, дублироваться или отсутствовать без уведомления). Тот факт, что проверка того, доставлены ли все пакеты, не производится, UDP оказывается более быстрым и более эффективным для приложений, которые не нуждаются в гарантированной доставке. UDP находит свое применение в таких ситуациях:

Чувствительные ко времени приложения. Проблемы из-за задержанных пакетов исключены

Это также полезно для серверов, которые отвечают на небольшие запросы от огромного количества клиентов. UDP поддерживает пакетную трансляцию (передает всем по локальной сети) и многоадресную передачу (передает всем абонентам).

Протокол управления передачей (TCP)

Это часто упоминается как TCP / IP из-за важности этого протокола в Internet Protocol Suite. TCP работает на более высоком уровне, касаясь только двух конечных систем (например, между веб-браузером и веб-сервером). TCP обеспечивает надежную последовательную доставку потока данных из одной программы на одном компьютере в другую программу на другом компьютере. Распространенное использование поддержки перегруппировки электронной почты TCP и передачи файлов и веб-приложений. Среди задач управления TCP контролирует размер сообщений, скорость обмена сообщениями и перегрузку сетевого трафика. Что касается IP, он обрабатывает низкоуровневые передачи с компьютера на компьютер как сообщение, передаваемое через Интернет.


источник
0

Ну, оба являются сетевыми протоколами, построенными поверх того, что называется Интернет-протоколом или IP. Интернет-протокол является основным протоколом Интернета и, например, позволяет нам просматривать веб-страницы. Вот почему вы часто будете видеть эти протоколы, написанные как TCP / IP или UDP / IP. Они на самом деле являются основными протоколами Интернета.

В обоих случаях ваши данные делятся на куски, называемые пакетами. TCP гарантирует, что эти пакеты попадают к месту назначения и в правильном порядке, без каких-либо ошибок.

UDP, с другой стороны, не гарантирует, что пакет данных будет даже доставлен. Это только гарантирует, что, если это действительно прибудет, это будет без ошибки.

Как правило, другие протоколы будут работать поверх TCP и UDP и называются протоколами приложений, поскольку они работают внутри приложения, а не в операционной системе. Ваш веб-браузер использует протокол HTTP, который будет использовать протокол TCP.

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

Я надеюсь, что это отвечает на ваш вопрос на более простом английском языке.

Matt
источник