为什么 udp 的吞吐量比 tcp 低?

为什么 udp 的吞吐量比 tcp 低?

我正在用 iperf3 测量 tcp 和 udp 吞吐量。我在虚拟机中运行 iperf3,一个用作服务器,另一个用作客户端。虚拟机通过 10 Gbps 链路连接。结果表明,tcp 的吞吐量比 udp 高得多。但是,众所周知,TCP 运行更多的算法和计算,并且它也有三次握手,那么为什么 udp 吞吐量低于 tcp?这与 tcp 和 udp 的缓冲区大小有关吗?以下是 tcp 和 udp 测量的结果。很明显,iperf 在特定时间内为 tcp 发送的数据比为 udp 发送的数据多,但为什么呢?

TCP:8.88 Gbps

[ 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 Gbps,数据包长度默认为8Kbytes

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 中的吞吐量是根据发送的数据包来计算的,而不管接收到的数据包!

答案1

TCP 包含拥塞控制。它将限制流量以防止数据包丢失。UDP 只会发送您请求的所有数据包并希望获得最佳效果。

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

答案2

如今,即使是廉价的硬件也能超过 10 Gb,尤其是使用 iperf 等流量生成器。当链路带宽超出时,缓冲区很快就会填满,从而导致丢包。UDP 没有拥塞控制意味着它将继续通过已经饱和的接口发送数据包,这会破坏实际产量

这就像一条道路被超速行驶的疯子撞车事故堵塞了一半,没有任何交通管理,而且还有人抱怨说每小时的车辆数量没有达到理论上的峰值。

限制 iperf 的带宽。TCP 的 8.8 Gb 可能比较现实,但让我们乐观一点,尝试以太网的理论最大值:iperf -u -b 9750M

相关内容