我正在用 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 只会发送您请求的所有数据包并希望获得最佳效果。
答案2
如今,即使是廉价的硬件也能超过 10 Gb,尤其是使用 iperf 等流量生成器。当链路带宽超出时,缓冲区很快就会填满,从而导致丢包。UDP 没有拥塞控制意味着它将继续通过已经饱和的接口发送数据包,这会破坏实际产量。
这就像一条道路被超速行驶的疯子撞车事故堵塞了一半,没有任何交通管理,而且还有人抱怨说每小时的车辆数量没有达到理论上的峰值。
限制 iperf 的带宽。TCP 的 8.8 Gb 可能比较现实,但让我们乐观一点,尝试以太网的理论最大值:iperf -u -b 9750M