Пропускная способность TCP намного лучше, чем UDP

755
kuma

Я наблюдаю за работой соединения WAN с iperf между двумя компьютерами Windows на обоих концах.

Удивительно (для меня), что окно TCP для одного сеанса по умолчанию достигает пропускной способности 12 Мбит / с, в то время как предел UDP (потеря пакета 0%) составляет около 4 Мбит / с. Пропускная способность выше 5 Мбит / с приводит к недопустимой потере пакетов UDP (> 20%).

Как это может быть?

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

Заранее спасибо за любое предложение.

РЕДАКТИРОВАТЬ : забыл упомянуть важную деталь: это частная сеть, поэтому это не перегруженная ссылка, и дополнительный трафик по ссылке во время этих тестов (как с iperf, так и с реальным трафиком) практически ничтожен.

РЕДАКТИРОВАТЬ : Может ли кто-то предоставить советы о том, как устранить неполадки, где (в какой части сети) этот трафик отбрасывается?

3
Трафик пересекает роутер? Что еще в пути, например, пересекает ли он коммутатор от порта 1 Гбит / с до порта 100 Мбит / с? В сети много скрытых точек скопления. Ron Maupin 7 лет назад 0
Да, он пересекает: коммутируемая сеть A ----- маршрутизатор A ---- маршрутизатор B ----- коммутируемая сеть B. При некотором устранении неполадок возникает проблема в одной коммутируемой сети. Да, он пересекает коммутаторы от портов 1 Гбит / с до 100 Мбит / с. kuma 7 лет назад 0
@kuma Звучит так, будто есть какая-то часть пути, которая противоречива. TCP может адаптироваться, UDP не может. David Schwartz 7 лет назад 0
Есть много мест, где снижается трафик. Порт 100 Мбит / с не может поддерживать поток трафика 1 Гбит / с, и большое количество кадров будет отброшено (коммутаторы имеют крошечные буферы). У UDP нет способа запросить повторную отправку потерянного трафика, потому что принимающий хост не ожидает, что что-либо будет приходить. TCP заметит, что трафик сброшен, и отправит трафик повторно. Маршрутизаторы, как правило, не работают при скорости соединения и часто будут устанавливать приоритеты TCP над UDP, если не настроены иначе. Без проектирования и конфигурации сети пришлось бы сказать, в чем проблема. Ron Maupin 7 лет назад 0
Вы предлагаете установить все порты, участвующие в этом обмене UDP (хосты и коммутаторы) на 100 Мбит / с? kuma 7 лет назад 0
Нет. UDP - это протокол без установления соединения, ненадежный, с максимальным усилием. Приложения, использующие UDP, ожидают, что дейтаграммы будут потеряны в сети, и либо будут иметь встроенные средства защиты (эмулируют функции TCP), либо у приложения могут возникнуть проблемы, если потерянные дейтаграммы повторно отправляются (многие приложения реального времени, такие как VoIP или видео, имеют такие проблемы). Использование UDP означает, что отправителю не важно, доставлены ли дейтаграммы, и не ожидает ли получатель каких-либо дейтаграмм, но если полученные отправленные дейтаграммы получены, это здорово. Ron Maupin 7 лет назад 0
Я понимаю цели TCP / UDP. Мой вопрос заключается в том, как устранить неполадки, когда трафик сбрасывается. Я отредактировал вопрос для ясности. kuma 7 лет назад 0

1 ответ на вопрос

2
David Schwartz

У Iperf нет логики для максимизации эффективности UDP-трафика по каналу WAN. Windows, как и большинство современных операционных систем, приложила значительные усилия, чтобы добиться максимально возможного снижения пропускной способности TCP.

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

Там просто нет сравнения.

Я понимаю, что оптимизации сделаны на уровне ОС. Но я все еще не понимаю, говорить на уровне ссылок. Если ожидается, что это обеспечит пропускную способность 15 Мбит / с, почему отправка 5 Мбит / с UDP приводит к такой высокой потере пакетов? Какой пункт отвечает за такие потери? Разве это не симптом сетевой проблемы? Это также происходит с реальным UDP-трафиком (без iperf). kuma 7 лет назад 0
@kuma Опять же, есть причина, по которой так много исследований и усилий было уделено разработке TCP и его контролю перегрузки, задержке, частоте передачи и так далее. У UDP нет ничего подобного. Вот почему мы используем TCP для важных данных (например, для загрузки файлов) и используем UDP для крошечных, чувствительных к задержке запросов (например, DNS). У UDP нет разумного способа реагировать на перегрузку, если приложение не реализует его. Iperf нет. David Schwartz 7 лет назад 1
Я отредактировал вопрос, добавив некоторые детали. Этот вопрос в основном связан с возможными проблемами в сети, так как предполагается, что канал не перегружен (тесты намного ниже пропускной способности канала), а не о том, как работает TCP / UDP. kuma 7 лет назад 0

Похожие вопросы