Назад | Перейти на главную страницу

Почему udp имеет меньшую пропускную способность, чем tcp?

Я измеряю пропускную способность tcp и udp с помощью iperf3. Я запускаю iperf3 на виртуальных машинах, одну как сервер, а другую как клиент. Виртуальные машины подключаются через канал 10 Гбит / с. Результаты показывают, что tcp имеет гораздо более высокую пропускную способность, чем udp. Однако, как мы знаем, TCP выполняет больше алгоритмов и вычислений, а также имеет трехстороннее квитирование, так почему пропускная способность udp меньше, чем tcp? Это что-то связано с размером буфера tcp и udp? Ниже приведены результаты измерений TCP и UDP. Очевидно, что iperf отправляет больше данных по TCP, чем по UDP за определенное время, но почему?

TCP: 8,88 Гбит / с

[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   922 MBytes  7.73 Gbits/sec    1   3.04 MBytes       
[  4]   1.00-2.00   sec  1.04 GBytes  8.92 Gbits/sec    0   3.04 MBytes       
[  4]   2.00-3.00   sec  1.07 GBytes  9.15 Gbits/sec    0   3.04 MBytes       
[  4]   3.00-4.00   sec  1.05 GBytes  8.99 Gbits/sec    0   3.04 MBytes       
[  4]   4.00-5.00   sec  1.04 GBytes  8.91 Gbits/sec   80   2.17 MBytes       
[  4]   5.00-6.00   sec  1.04 GBytes  8.91 Gbits/sec    0   2.35 MBytes       
[  4]   6.00-7.00   sec  1.04 GBytes  8.98 Gbits/sec    0   2.54 MBytes       
[  4]   7.00-8.00   sec  1.01 GBytes  8.69 Gbits/sec  176   1.88 MBytes       
[  4]   8.00-9.00   sec  1.04 GBytes  8.97 Gbits/sec  208   1.42 MBytes       
[  4]   9.00-10.00  sec  1.02 GBytes  8.80 Gbits/sec    0   1.48 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  10.3 GBytes  8.80 Gbits/sec  465             sender
[  4]

UDP: 3,26 Гбит / с, длина пакета по умолчанию 8 Кбайт

iperf3 -c "server address" -u -b 0


[  4] local 145.100.132.197 port 58375 connected to 145.100.132.34 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec   375 MBytes  3.15 Gbits/sec  48035  
[  4]   1.00-2.00   sec   394 MBytes  3.31 Gbits/sec  50457  
[  4]   2.00-3.00   sec   352 MBytes  2.94 Gbits/sec  45114  
[  4]   3.00-4.00   sec   391 MBytes  3.30 Gbits/sec  50092  
[  4]   4.00-5.00   sec   403 MBytes  3.38 Gbits/sec  51566  
[  4]   5.00-6.00   sec   403 MBytes  3.38 Gbits/sec  51599  
[  4]   6.00-7.00   sec   418 MBytes  3.51 Gbits/sec  53493  
[  4]   7.00-8.00   sec   372 MBytes  3.12 Gbits/sec  47651  
[  4]   8.00-9.00   sec   444 MBytes  3.73 Gbits/sec  56892  
[  4]   9.00-10.00  sec   399 MBytes  3.34 Gbits/sec  51033  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  3.86 GBytes  3.32 Gbits/sec  0.020 ms  354384/505931 (70%) 

в зависимости от длины пакета пропускная способность в udp рассчитывается на основе пакетов, которые отправлены, независимо от полученных!

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

https://www.geeksforgeeks.org/tcp-congestion-control/

Даже дешевое оборудование в наши дни может превышать 10 ГБ, особенно с такими генераторами трафика, как iperf. Буферы быстро заполняются при превышении пропускной способности канала, что приводит к сбоям. Отсутствие контроля перегрузки для UDP означает, что он будет продолжать отправлять пакеты через уже насыщенные интерфейсы, что разрушает Goodput.

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

Ограничьте пропускную способность iperf. TCP 8,8 Гб, вероятно, реалистичен, но давайте будем оптимистами и попробуем получить теоретический максимум Ethernet: iperf -u -b 9750M