4. 带宽测试工具
说到带宽测试,我第一个想到的工具就是 iPerf3。这玩意儿我用了快十年了,从 iPerf2 一路跟到 iPerf3,中间踩过的坑能写满一页纸。说白了,它就是网络工程师的「万用表」——简单、直接、靠谱。
你可能会问:为什么不用 Speedtest 或者别的什么工具?嗯,那些工具测的是「到互联网的带宽」,而 iPerf3 测的是「任意两点之间的带宽」。你想想看,排查内网问题的时候,你关心的是到公网的速度吗?显然不是。你要的是 A 到 B 的真实吞吐量。
4.1 iPerf3 的安装:三分钟搞定
安装这事儿,我习惯分平台来说。别嫌啰嗦,我在项目里见过太多因为装错版本导致测试结果离谱的案例。
Linux 系统(CentOS / Ubuntu)
# CentOS / RHEL
sudo yum install epel-release -y
sudo yum install iperf3 -y
# Ubuntu / Debian
sudo apt update
sudo apt install iperf3 -y
这里有个坑:CentOS 默认源里没有 iperf3,必须装 EPEL。我曾经在一台刚装好的 CentOS 7 上直接 yum install iperf3,结果告诉我「没有可用软件包」。当时我还纳闷呢,后来才想起来 EPEL 没装。嗯,这种低级错误犯过一次就够了。
Windows 系统
去官网下载二进制包,或者直接用 Chocolatey:
choco install iperf3
我个人习惯把 iperf3.exe 扔到 C:\Windows\System32 目录下,这样命令行里直接就能调用了。省得每次都要 cd 到安装目录,麻烦。
macOS 系统
brew install iperf3
装完之后,验证一下:
iperf3 --version
看到版本号就说明装好了。如果报错,大概率是环境变量没配好,检查一下 PATH。
4.2 基础使用:服务端与客户端模式
iPerf3 的工作模式很简单:一台机器当服务器,另一台当客户端。服务器监听端口,客户端发起连接并发送数据。
先启动服务端:
iperf3 -s
默认监听 5201 端口。如果你想用别的端口:
iperf3 -s -p 5001
然后客户端连上去:
iperf3 -c 192.168.1.100
就这么简单。几秒钟后,你会看到类似这样的输出:
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.10 GBytes 945 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
看到 945 Mbits/sec 这个数字了吗?这说明你的千兆链路基本跑满了。如果只有 300 多,那就要开始排查了——是网线问题?交换机端口协商不对?还是中间有瓶颈?
-i 1 参数,让结果每秒输出一次。这样能看出带宽的波动情况,而不是只看一个平均值。
4.3 TCP 模式测试:最常用的场景
TCP 模式是默认的,也是我工作中用得最多的。它模拟的是真实应用的数据传输行为——有确认、有重传、有拥塞控制。
常用的参数组合:
# 客户端:测试 30 秒,每 1 秒输出一次
iperf3 -c 192.168.1.100 -t 30 -i 1
# 反向测试(服务器向客户端发数据)
iperf3 -c 192.168.1.100 -t 30 -i 1 -R
# 指定并行流数(模拟多连接场景)
iperf3 -c 192.168.1.100 -t 30 -P 4
为什么要用 -R?因为很多时候链路是不对称的。比如你公司的出口带宽,下载 1000M,上传可能只有 100M。只测一个方向,你只能看到一半的真相。
至于 -P 参数,我在项目中遇到过这样一个案例:某次测试单流只能跑 200Mbps,但加上 -P 4 之后直接飙到 800Mbps。这说明什么?说明瓶颈不在带宽,而在 TCP 的窗口大小或者 CPU 的处理能力。多流并行能绕过这些限制,看到链路的真实上限。
-P 32,结果 CPU 被打满了,带宽反而下降了。一般来说,4 到 8 个流就够用了。
4.4 UDP 模式测试:看丢包和抖动
TCP 模式测的是「可靠传输」的带宽,而 UDP 模式测的是「尽力而为」的带宽。说白了,UDP 模式能告诉你:如果我不在乎丢包,这条链路到底能塞多少数据?
启动 UDP 模式:
# 服务端
iperf3 -s
# 客户端:指定带宽 100Mbps
iperf3 -c 192.168.1.100 -u -b 100M
输出结果里,我最关注三个指标:
- Jitter(抖动):延迟的变化量。VoIP 和视频会议对抖动特别敏感,超过 30ms 基本就没法用了。
- Lost/Total Datagrams(丢包率):这个不用多说,丢包多了什么应用都白搭。
- 实际吞吐量:发送端声称发了 100M,但接收端只收到了 80M,那剩下的 20M 就是被网络吃掉了。
举个例子:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 113 MBytes 94.8 Mbits/sec 0.023 ms 0/81048 (0%)
丢包率为 0%,抖动 0.023ms,这说明链路质量非常好。但如果看到这样的结果:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 89.3 MBytes 75.0 Mbits/sec 5.234 ms 1421/65421 (2.2%)
丢包 2.2%,抖动 5ms——嗯,这条链路有问题。可能是带宽不够,也可能是中间设备在处理大流量时出现了瓶颈。
4.5 常见参数速查表
| 参数 | 说明 | 示例 |
|---|---|---|
-s |
服务端模式 | iperf3 -s |
-c |
客户端模式,指定服务器 IP | iperf3 -c 10.0.0.1 |
-u |
UDP 模式 | iperf3 -c 10.0.0.1 -u |
-b |
UDP 目标带宽 | iperf3 -c 10.0.0.1 -u -b 500M |
-t |
测试时长(秒) | iperf3 -c 10.0.0.1 -t 60 |
-i |
输出间隔(秒) | iperf3 -c 10.0.0.1 -i 1 |
-P |
并行流数 | iperf3 -c 10.0.0.1 -P 4 |
-R |
反向测试 | iperf3 -c 10.0.0.1 -R |
-p |
指定端口 | iperf3 -s -p 5001 |
4.6 避坑指南
最后,分享几个我踩过的坑:
- 防火墙没关:我曾经在客户现场折腾了半小时,结果发现是 Windows 防火墙把 5201 端口拦了。记得先放行端口,或者直接关防火墙测试。
- 服务端版本不一致:iPerf3 的 3.0 和 3.1 在某些参数上不兼容。我建议两端用完全相同的版本,省得出幺蛾子。
- 测试时间太短:默认 10 秒的测试,对于 TCP 的慢启动阶段来说可能不够。尤其是高延迟链路,10 秒可能还没进入稳态。我一般至少测 30 秒。
- 忽略了 CPU 瓶颈:如果测试时 CPU 跑到 100%,那测出来的带宽就不是网络瓶颈,而是 CPU 瓶颈了。用
top或任务管理器看一眼,确保 CPU 有余量。
好了,iPerf3 的基础使用就讲到这里。工具本身不复杂,但怎么用好它,怎么从结果里读出问题,这才是真功夫。下一节我们会聊更高级的用法——比如双向测试、JSON 输出、以及如何用 iPerf3 做长时间的稳定性测试。