4、带宽测试实战:使用iPerf3进行TCP/UDP带宽测试、单流与多流测试、双向测试、结果解读

带宽测试,说白了就是看看你的专线到底能跑多快。

我见过太多人买了100M的专线,结果实际只能跑20M。运营商说「线路没问题」,你拿什么去怼?这时候iPerf3就是你的武器。

核心观点:带宽测试不是跑个数字就完事。你得理解TCP和UDP的区别,知道单流和多流意味着什么,更要能看懂那些输出结果背后的潜台词。

4.1 准备工作:装好iPerf3

iPerf3是目前最主流的带宽测试工具。它采用客户端-服务器模式工作。一台机器当服务器,另一台当客户端,客户端往服务器发流量。

安装很简单:

# Linux (CentOS/RHEL)
yum install iperf3 -y

# Linux (Ubuntu/Debian)
apt install iperf3 -y

# macOS
brew install iperf3

# Windows
# 去官网下载exe,或者用scoop: scoop install iperf3

我个人习惯在服务器端和客户端都装好,然后先启动服务端。

4.2 TCP带宽测试:最常用的场景

先启动服务端:

iperf3 -s -p 5201

-s 表示服务器模式,-p 指定端口。默认端口就是5201,但如果你跑多条测试,建议换端口避免冲突。

客户端发起测试:

iperf3 -c 192.168.1.100 -p 5201 -t 30

-c 后面跟服务器IP,-t 指定测试时长(秒)。我一般跑30秒,太短数据不稳定,太长浪费时间。

输出结果长这样:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-30.00  sec   356 MBytes   99.6 Mbits/sec    0    sender
[  5]   0.00-30.00  sec   356 MBytes   99.6 Mbits/sec         receiver

关键看三个指标:

  • Bitrate:实际带宽,单位Mbps。99.6 Mbps说明你的100M专线基本跑满了。
  • Retr:重传次数。0说明网络质量很好。如果这个数字很大,说明有丢包或拥塞。
  • Transfer:总传输数据量。配合时间可以反推带宽。
我的经验:如果Bitrate远低于预期,先看Retr。Retr高说明网络有瓶颈,可能是带宽不够、路由器性能差、或者链路有误码。Retr低但带宽低,那可能是客户端或服务器性能瓶颈——比如磁盘IO跟不上。

4.3 UDP带宽测试:看极限和抖动

TCP有拥塞控制,会自动降速。UDP不会,它只管发。所以UDP测试能看出网络的真实极限。

服务端启动方式一样:

iperf3 -s -p 5201

客户端加个 -u 参数:

iperf3 -c 192.168.1.100 -u -b 100M -t 30

-b 指定目标带宽。我设了100M,看看能不能发过去。

输出结果:

[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-30.00  sec   357 MBytes   99.8 Mbits/sec  0.023 ms  0/262144 (0%)

UDP测试多了两个关键指标:

  • Jitter:抖动,单位毫秒。0.023 ms非常优秀。超过1 ms就要注意了。
  • Lost/Total:丢包率。0%说明网络很干净。超过0.1%对实时业务就有影响了。
注意:UDP测试时,如果 -b 设得比实际带宽大,丢包率会飙升。我曾经帮一个客户排查视频会议卡顿,他专线标称50M,我UDP打60M,丢包率直接到15%。后来降到45M,丢包率0.01%。这说明运营商给的带宽有水分。

4.4 单流与多流测试

单流就是只开一个TCP连接。多流就是同时开多个连接。

为什么要测多流?因为很多应用(比如Web服务、文件传输)会建立多条连接。单流跑不满带宽的情况很常见。

单流测试:

iperf3 -c 192.168.1.100 -P 1 -t 30

-P 指定并行流数。-P 1 就是单流。

多流测试:

iperf3 -c 192.168.1.100 -P 4 -t 30

输出结果会显示每个流的情况,最后汇总:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-30.00  sec   89.2 MBytes  24.9 Mbits/sec    2
[  7]   0.00-30.00  sec   89.5 MBytes  25.0 Mbits/sec    1
[  9]   0.00-30.00  sec   89.1 MBytes  24.9 Mbits/sec    3
[ 11]   0.00-30.00  sec   89.3 MBytes  25.0 Mbits/sec    2
[SUM]   0.00-30.00  sec   357 MBytes   99.8 Mbits/sec    8

你看,单流只能跑25M,但4个流加起来能跑100M。这说明什么?

  • 要么是TCP窗口限制,单流无法充分利用带宽
  • 要么是中间设备(比如防火墙、负载均衡)对单流有限速
  • 要么是服务器网卡队列不够深
实战建议:我一般先跑单流,再跑4流、8流、16流。如果多流能跑满而单流不行,那问题大概率出在TCP参数或中间设备上。这时候可以调大TCP缓冲区试试。

4.5 双向测试:上下行一起测

很多专线是上下行不对称的。比如企业宽带,下行100M,上行可能只有20M。双向测试能同时测出上下行的真实性能。

加个 -d 参数:

iperf3 -c 192.168.1.100 -d -t 30

输出结果会分两部分:

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec   356 MBytes   99.6 Mbits/sec    sender
[  5]   0.00-30.00  sec   356 MBytes   99.6 Mbits/sec    receiver
[  7]   0.00-30.00  sec   71.2 MBytes  19.9 Mbits/sec    sender
[  7]   0.00-30.00  sec   71.2 MBytes  19.9 Mbits/sec    receiver

上面是客户端到服务器(下行),下面是服务器到客户端(上行)。

你看,下行99.6M,上行19.9M。这跟运营商承诺的100M/20M完全吻合。

我的习惯:双向测试一定要做。有一次客户说「专线慢」,我单流测下行没问题,双向一测发现上行只有5M。后来查出来是客户内网有个交换机端口协商成了半双工。这种问题单向下根本发现不了。

4.6 结果解读:别只看数字

拿到结果后,我一般按这个顺序分析:

  1. 看Bitrate是否达标:跟合同带宽对比。差太多就找原因。
  2. 看Retr是否过高:TCP重传超过1%就要警惕。超过5%基本可以断定网络有问题。
  3. 看Jitter和丢包:UDP测试中,Jitter超过1ms或丢包超过0.1%,对VoIP和视频会议就有明显影响。
  4. 对比单流和多流:如果多流能跑满而单流不能,说明需要优化TCP参数或检查中间设备。
  5. 对比上下行:不对称太严重,可能是链路问题或运营商限速。
避坑指南:我曾经遇到一个案例,iPerf3测出来带宽只有50M,但运营商信誓旦旦说给了100M。后来发现是客户端网卡驱动太老,开启了大量中断合并。更新驱动后,带宽直接翻倍。所以,测试结果异常时,先检查两端机器的CPU、内存、网卡设置。

4.7 知识体系:一张图看懂

下面这张图总结了iPerf3带宽测试的核心逻辑:

iPerf3 带宽测试知识体系 iPerf3 带宽测试 协议选择 TCP(默认,有拥塞控制) UDP(-u,无拥塞控制) 流模式 单流(-P 1) 多流(-P N) 测试方向 单向(默认) 双向(-d) 结果解读关键指标 Bitrate(实际带宽) Retr(重传次数) Jitter / 丢包率(UDP) 目标:验证专线带宽是否达标,定位性能瓶颈

这张图把测试协议、流模式、测试方向、结果解读串在了一起。你每次做测试前,可以对照这张图确认自己覆盖了哪些维度。

4.8 实战总结

带宽测试不是跑个数字就完事。你得理解每个参数的含义,知道不同场景下该用什么模式。

  • 日常验证:TCP单流 + 多流,跑30秒
  • 极限测试:UDP打满带宽,看丢包和抖动
  • 全面检查:双向测试,上下行一起看
  • 问题定位:对比单流和多流,对比TCP和UDP

嗯,掌握了这些,你就能拿着iPerf3的结果去跟运营商「友好沟通」了。

最后一句:工具是死的,思路是活的。别让iPerf3变成你只会敲命令的工具,要让它成为你诊断网络的「听诊器」。