2013-06-04 2 views
3

Мне нужно проверить передачу данных с использованием UDP и TCP. Я настраивал виртуальную среду и делал тесты передачи данных. Я использовал Iperf на двух машинах Linux для отправки данных с помощью udp и tcp, я обнаружил, что TCP работает лучше, чем UDP (в среднем на 65% лучше). Это было удивительно для меня, поскольку я ожидал, что UDP будет работать лучше, чем TCP.iperf testing - TCP vs UDP

Команды, которые я использовал являются:

TCP:

/usr/bin/iperf -c 172.16.0.2 -f m -n 16000000 -F myfile_MB_128.dat 

-c 172.16.0.2 # connect as client to host ip 
-f m #show results in Mbits/sec 
-n 16000000 # number of bytes to transfer 
-F myfile_MB_128.dat # File to source transfer bytes from 

UDP:

/usr/bin/iperf -c 172.16.0.2 -u -f m -b 1G 

-b 1G # set target bandwidth to 1Gbps 

Виртуальная сетевая карта является картой 100Mbps (проверяется dmesg)

[email protected]:dmesg|grep eth0 
[ 2.182110] e1000 0000:02:00.0: eth0: (PCI:66MHz:32-bit) 00:0c:29:02:76:c5 
[ 2.182116] e1000 0000:02:00.0: eth0: Intel(R) PRO/1000 Network Connection 
[ 31.793133] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None 
[ 41.952914] eth0: no IPv6 routers present 

Мои результаты o версия 50 итераций:

TCP: средняя скорость 939 Мбит

UDP: средняя скорость 568 Мбит

Мои вопросы:

- ли UDP всегда лучше, чем TCP? или существует какой-то конкретный сценарий, где UDP лучше, чем TCP.

- В каком сценарии/конфигурации я получаю UDP для работы лучше, чем TCP?

EDIT: Я также пробовал UDT, чтобы проверить скорость передачи файлов.

Я использовал udt-java (протокол udt, написанный в java) от here и использовал встроенные утилиты send-file и receive-file. UDT-java должен быть действительно быстрым, но более 50 итераций я получил среднюю скорость всего 32 Мбит/с (перенесена 16 Мб файла). При увеличении размера файла скорость не меняется. Я не могу понять, что здесь происходит.

Заранее спасибо

EDIT 2: среда выглядит следующим образом:

машина 1 (eth0) < --- LAN СЕГМЕНТ 1 ---> (eth1) ISP VM (eth2) < --- LAN SEGMENT 2 ---> (eth1) Машина 2

Все три машины являются виртуальными машинами и имеют статические IP-адреса. Сегменты ЛВС имеют 0% потери пакетов. Все машины имеют 1 ГБ ОЗУ, а все карты Ethernet - 1000 Мбит/с.

+0

С одной стороны, вы ограничили скорость своего UDP-соединения, но вы не ограничили скорость своего TCP-соединения. –

+1

Я ограничил скорость соединения UDP с 1G (это скорость сетевой карты). Я получаю такую ​​же скорость с пределом 2G. Без ограничения он будет принимать ограничение по скорости до 1.5 Мбит/с. Также iperf не поддерживает ограничение скорости для TCP. –

+0

Страница man на iperf скудна по деталям. Вы знаете, что он на самом деле делает? –

ответ

2

UDP всегда работает лучше, чем TCP? или есть какие-либо конкретные сценарий, где UDP лучше, чем TCP

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

+3

Я вижу вашу мысль. Однако в моих тестах iperf, почему UDP работает хуже, чем TCP? Поскольку это просто тест скорости без надежности, он должен превзойти TCP. Что ты думаешь? –

+0

Наблюдая то же, что @AlastorMoody, и я в тупике. – Mehrdad

2

UDP всегда работает лучше, чем TCP?или существует какой-то конкретный сценарий, где UDP лучше, чем TCP

Что является «лучше», зависит от вашего приложения. Если ваше программное обеспечение предполагает, что он получает каждый байт в порядке, то вы должны использовать TCP. Если ваши требования более слабы, или вы можете сделать некоторые предположения относительно базовой сети (99,9999% времени, когда он не будет отбрасывать пакеты, а вам не нужен другой .0001%), или если задержка важна , то UDP лучше.

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

+0

Я добавил некоторые сведения об окружающей среде. Есть ли какие-то конкретные детали, которые вы ищете? –

+1

Нет ... не так много, что может пойти не так. Только я попробую запустить сразу несколько тестов UDP. Возможно, что буферное пространство или что-то еще в программе iPerf является узким местом. –

+0

Хмм .. Я попробую это. благодаря –