UDP по сравнению с TCP, сколько быстрее это? [закрытый]

185
задан Étienne 14 May 2014 в 03:16
поделиться

8 ответов

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

Для получения дополнительной информации я рекомендую простое, но очень понятный объяснение Skullbox (TCP по сравнению с UDP)

86
ответ дан Jarvis 23 November 2019 в 05:50
поделиться

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

5
ответ дан Leon Timmermans 23 November 2019 в 05:50
поделиться

UDP немного более быстр, по моему опыту, но не очень. Выбор не должен быть сделан на производительности, но на методах сжатия и содержимом сообщения.

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

6
ответ дан Andrew 23 November 2019 в 05:50
поделиться

@Andrew, я прошу отличаться. UDP является выбором в некоторых видах приложения из-за требований к производительности. Одним классическим примером является организация видеоконференций. Этот вид приложения не хорошо отвечает на управление TCP.

Другой аспект для взятия в соображении - то, если Вы собираетесь должны многоадресно передать. Если так, используйте UDP.

10
ответ дан Community 23 November 2019 в 05:50
поделиться

Каждое соединение TCP требует начального квитирования, прежде чем данные будут переданы. Кроме того, заголовок TCP содержит много издержек, предназначенных для различных сигналов и обнаружения доставки сообщений. Для обмена сообщениями будет, вероятно, достаточен UDP, приемлем ли маленький шанс отказа. Если получение должно быть проверено, TCP является Вашим наилучшим вариантом.

12
ответ дан Kyle Cronin 23 November 2019 в 05:50
поделиться

с потерей, терпимой

, Вы имеете в виду "с допуском потерь"?

В основном, UDP не является "терпимой потерей". Можно отправить 100 пакетов кому-то, и они могли бы только получить 95 из тех пакетов, и некоторые могли бы быть в неправильном порядке.

Для вещей как потоковая передача видео и многопользовательские игры, где лучше пропустить пакет, чем задержать все другие пакеты позади него, это - очевидный выбор

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

К счастью, некоторые очень очень умные люди сделали это, и они назвали его TCP.

Думают о нем этот путь: Если пакет пропадает, был бы Вы скорее просто получить следующий пакет как можно быстрее и продолжиться (используйте UDP), или сделайте Вас, на самом деле нуждаются в тех недостающих данных (используйте TCP). Издержки не будут иметь значения, если Вы не будете в действительно сценарий пограничного случая.

27
ответ дан Orion Edwards 23 November 2019 в 05:50
поделиться

В некоторых приложениях TCP быстрее (лучшая пропускная способность), чем UDP.

Дело обстоит так при выполнении большого количества маленьких записей относительно размера MTU. Например, я считал эксперимент, в котором поток 300-байтовых пакетов отправлялся по Ethernet (1 500-байтовый MTU) и , TCP был на 50% быстрее, чем UDP.

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

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

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

89
ответ дан TravisHendrickson 23 November 2019 в 05:50
поделиться

Люди говорят, что главной вещью, которую TCP дает Вам, является надежность. Но это не действительно верно. Самой важной вещью, которую TCP дает Вам, является управление перегрузкой: можно выполнить 100 соединений TCP через ссылку DSL все движение в максимальной скорости, и все 100 соединений будут продуктивны, потому что они все "обнаруживают" доступную пропускную способность. Попробуйте это 100 различными приложениями UDP, все пакеты продвижения с такой скоростью, как они могут пойти, и видят, как хорошо вещи удаются для Вас.

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

Вещи, которые склоняются к приложениям доставки к UDP:

  • семантика доставки Группы: возможно сделать надежную доставку группе людей намного более эффективно, чем подтверждение TCP точка-точка.

  • Неисправная доставка: в большом количестве приложений, пока Вы получаете все данные, Вы не заботитесь о том, что приказывает, чтобы они прибыли в; можно уменьшить задержку уровня приложения путем принятия неисправного блока.

  • Недружелюбие: на LAN-пати Вы не можете заботиться, функционирует ли Ваш веб-браузер приятно, пока Вы блитируете обновления сети с такой скоростью, как Вы возможно можете.

, Но даже если Вы заботитесь о производительности, Вы, вероятно, не хотите идти с UDP:

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

  • Теперь Вы являетесь сетевыми недружелюбными, который может вызвать проблемы в общих средах.

  • Самое главное, брандмауэры заблокируют Вас.

можно потенциально преодолеть некоторую производительность TCP и проблемы задержки путем "транкинга" нескольких соединений TCP вместе; iSCSI делает это для обхождения управления перегрузкой в локальных сетях, но можно также сделать это для создания низкой задержки "срочный" канал сообщения ("СРОЧНОЕ" поведение TCP полностью повреждается).

262
ответ дан tqbf 23 November 2019 в 05:50
поделиться