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

sar*_* sh 1 performance iperf tcp udp

我正在通过 iperf3 测量 tcp 和 udp 吞吐量。我在虚拟机中运行 iperf3,一台作为服务器,另一台作为客户端。VM 通过 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]
Run Code Online (Sandbox Code Playgroud)

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%) 
Run Code Online (Sandbox Code Playgroud)

根据数据包长度,udp 中的吞吐量是根据发送的数据包计算的,无论接收到的数据包如何!

sta*_*ark 5

TCP 包括拥塞控制。它将限制流量以防止数据包丢失。UDP 只是发送您请求的所有数据包,并希望得到最好的结果。

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