第2章:测试工具入门:iPerf3 安装与基本用法

好,咱们直接进入正题。上一章聊了带宽测试到底测什么,这一章我们得动手了。工欲善其事,必先利其器——iPerf3 就是那个「器」。

说实话,我入行那会儿还在用老版的 iPerf,那时候连个 JSON 输出都没有,全靠肉眼盯屏幕。后来 iPerf3 出来,我第一时间就换了。为什么?因为它更轻、更快、输出更友好。说白了,它就是为网络性能测试而生的瑞士军刀。

2.1 iPerf3 是什么?

iPerf3 是一个主动测量 TCP、UDP 和 SCTP 带宽性能的工具。它采用客户端-服务器模型工作。你在一端跑服务器模式,另一端跑客户端模式,中间就产生流量了。

嗯,这里有个关键点:iPerf3 不是 iPerf2 的升级版,它们是两个独立项目。我见过不少新手把 iPerf2 的参数往 iPerf3 里套,结果报错一脸懵。记住,iPerf3 的参数设计更简洁,也更严格。

核心原理: 客户端向服务器发送数据流,服务器接收并统计。最后两端都会报告带宽、丢包、延迟抖动等指标。

2.2 安装 iPerf3

安装这事儿,不同系统差别挺大。我分别说说。

Linux(以 Ubuntu/CentOS 为例)

# Ubuntu / Debian
sudo apt-get install iperf3

# CentOS / RHEL 7+
sudo yum install iperf3

# CentOS / RHEL 8+ 用 dnf
sudo dnf install iperf3

我个人习惯用源码编译安装,因为能拿到最新版。但说实话,大多数场景下包管理器就够了。有一次我在一个老旧的 CentOS 6 上装 iPerf3,yum 源里没有,只能编译。那叫一个折腾——缺依赖、缺编译器。后来我学乖了,先 yum install epel-release 再装,省心很多。

macOS

brew install iperf3

macOS 用户用 Homebrew 最方便。如果你还没装 Homebrew,先去装一个,这是 macOS 上必备的包管理器。

Windows

Windows 下稍微麻烦点。你需要去 iPerf3 的官方 GitHub 仓库下载预编译的 exe 文件。下载后解压,把 iperf3.exe 放到一个你记得住的目录,比如 C:\tools\。然后把这个目录加到系统 PATH 环境变量里。

小技巧: 我建议在 Windows 上装一个 WSL(Windows Subsystem for Linux),然后在 WSL 里用 apt 装 iPerf3。这样体验跟 Linux 完全一致,而且不用折腾环境变量。

2.3 验证安装

装完之后,打开终端,敲下面这行命令:

iperf3 --version

如果看到类似 iperf3 version 3.9 的输出,说明装好了。如果提示「命令未找到」,那就检查一下 PATH 或者重新安装。

我记得有一次帮同事排查,他明明装了却报找不到命令。后来发现他把 exe 文件放桌面了,但没加到 PATH 里。嗯,这种小坑其实挺常见的。

2.4 基本用法:服务器模式

先启动服务器。在你要作为接收端的那台机器上运行:

iperf3 -s

就这么简单。-s 就是 server 模式。默认监听 5201 端口。如果你想改端口,用 -p 参数:

iperf3 -s -p 5001

服务器启动后,它会一直等客户端连上来。你可以在服务器端看到连接日志和最终的测试结果。

注意: 防火墙要放行对应端口。我曾经在客户现场调试,服务器端怎么都连不上,折腾了半小时才发现是防火墙把 5201 端口给拦了。所以,先检查防火墙,别上来就怀疑工具。

2.5 基本用法:客户端模式

在另一台机器上,运行客户端:

iperf3 -c 服务器IP地址

比如服务器 IP 是 192.168.1.100,那就:

iperf3 -c 192.168.1.100

默认情况下,它会进行 10 秒钟的 TCP 测试。结束后,两端都会显示结果。客户端显示的是发送端的统计,服务器显示的是接收端的统计。

你想想看,如果两端数据差异很大,那说明中间链路有问题——要么是丢包,要么是缓冲区不够。

2.6 常用参数速查

下面这张表是我自己整理的,平时干活经常翻。你直接拿去用。

参数 说明 示例
-s 服务器模式 iperf3 -s
-c 客户端模式,后接服务器 IP iperf3 -c 192.168.1.100
-p 指定端口,默认 5201 iperf3 -s -p 5001
-u 使用 UDP 协议 iperf3 -c 192.168.1.100 -u
-b UDP 模式下指定带宽(单位 bps) iperf3 -c 192.168.1.100 -u -b 100M
-t 测试时长,单位秒 iperf3 -c 192.168.1.100 -t 30
-P 并行连接数 iperf3 -c 192.168.1.100 -P 4
-R 反向模式(服务器发,客户端收) iperf3 -c 192.168.1.100 -R
-J 输出 JSON 格式结果 iperf3 -c 192.168.1.100 -J

2.7 实战:跑一次完整的 TCP 带宽测试

咱们来一次完整的。假设服务器 IP 是 10.0.0.1,客户端是 10.0.0.2。

步骤 1:服务器端启动

iperf3 -s

你会看到:

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

步骤 2:客户端发起测试

iperf3 -c 10.0.0.1 -t 20 -P 2

这个命令的意思是:向 10.0.0.1 发起测试,持续 20 秒,用 2 个并行连接。

步骤 3:看结果

客户端输出大概长这样:

Connecting to host 10.0.0.1, port 5201
[  5] local 10.0.0.2 port 54321 connected to 10.0.0.1 port 5201
[  7] local 10.0.0.2 port 54322 connected to 10.0.0.1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-20.00  sec   112 MBytes   47.0 Mbits/sec   12
[  7]   0.00-20.00  sec   108 MBytes   45.3 Mbits/sec   10
[SUM]   0.00-20.00  sec   220 MBytes   92.3 Mbits/sec   22
-----------------------------------------------------------
CPU Utilization: local/sender 12.5% (0.7%u/11.8%s), remote/receiver 8.2%

这里我重点解释几个字段:

  • Transfer:传输的总数据量
  • Bitrate:平均带宽,单位是 Mbits/sec
  • Retr:重传次数。这个很关键!如果重传次数很多,说明网络有丢包或者拥塞
  • SUM:所有并行连接的总和

你看上面这个例子,重传有 22 次,说明网络质量一般。如果重传为 0,那才是理想状态。

避坑指南: 我曾经遇到过测试结果带宽很低,但重传为 0。后来发现是客户端 CPU 跑满了,根本发不出更多数据。所以,别忘了看 CPU 利用率那一行。如果 CPU 接近 100%,那瓶颈可能在主机本身,而不是网络。

2.8 知识体系总览

下面这张图,是我自己画的。它把 iPerf3 的核心逻辑串起来了。你一看就明白。

iPerf3 核心知识体系 客户端模式 iperf3 -c [IP] 发送数据流 报告发送端统计 TCP/UDP 数据流 服务器模式 iperf3 -s 接收数据流 报告接收端统计 常用参数速记 -t 30 → 测试时长30秒 -P 4 → 4个并行连接 -u → 改用UDP协议 -b 100M→ UDP带宽限制100Mbps -R → 反向模式(服务器发) -J → JSON格式输出 -p 5001→ 指定端口5001 --bidir→ 双向同时测试 核心关注指标:Bitrate(带宽)、Retr(重传)、CPU利用率

2.9 几个实用小技巧

  • 反向测试:用 -R 参数,让服务器发数据、客户端收。这样可以测试另一方向的带宽。我经常用这个来验证链路是否对称。
  • JSON 输出:加 -J 参数,结果以 JSON 格式输出。方便写脚本自动化处理。我在做自动化测试平台时,全靠这个参数来解析结果。
  • 双向测试:加 --bidir 参数,客户端和服务器同时发数据。这样一次测试就能拿到两个方向的带宽。
  • 日志保存:用 --logfile 参数把结果保存到文件。比如 iperf3 -c 10.0.0.1 --logfile result.txt。
我的习惯: 每次做正式测试前,我都会先跑一次短时间的测试(比如 5 秒),看看网络通不通、参数对不对。确认没问题了,再跑长时间的正式测试。这样能避免因为参数配错而浪费大量时间。

好了,这一章的内容就到这儿。iPerf3 的基本用法其实不复杂,但真正用好它,需要你理解每个参数背后的意义。下一章我们会深入 UDP 测试和更高级的用法,到时候再聊。

想要更多资料,联系可可