Мне нужно проверить передачу данных с использованием 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 Мбит/с.
С одной стороны, вы ограничили скорость своего UDP-соединения, но вы не ограничили скорость своего TCP-соединения. –
Я ограничил скорость соединения UDP с 1G (это скорость сетевой карты). Я получаю такую же скорость с пределом 2G. Без ограничения он будет принимать ограничение по скорости до 1.5 Мбит/с. Также iperf не поддерживает ограничение скорости для TCP. –
Страница man на iperf скудна по деталям. Вы знаете, что он на самом деле делает? –