3、iPerf3 基础使用:安装与配置、TCP带宽测试命令、UDP带宽测试命令、常用参数详解

好,咱们直接进入正题。iPerf3 这工具,说白了就是网络工程师手里的“卷尺”。你想知道一条链路到底能跑多快?用它测一下就知道了。我这些年排查网络瓶颈,十次里有八次第一件事就是掏出 iPerf3。

3.1 安装与配置:别在这步卡住

安装其实没什么技术含量,但很多人一开始就栽在版本不匹配上。我强调一下:客户端和服务端的 iPerf3 版本必须一致,否则会报错或者结果不准。

注意:iPerf2 和 iPerf3 不兼容!别拿 iPerf2 的客户端去连 iPerf3 的服务端,连不上。

Linux 安装

大多数发行版直接走包管理器就行。我个人习惯用 Ubuntu,一条命令搞定:

# Ubuntu / Debian
sudo apt-get install iperf3

# CentOS / RHEL
sudo yum install iperf3

# 或者从源码编译(我一般不推荐,除非你要改参数)
wget https://downloads.es.net/pub/iperf/iperf-3.11.tar.gz
tar -xzf iperf-3.11.tar.gz
cd iperf-3.11
./configure
make
sudo make install

Windows 安装

去官网下载二进制包,解压就能用。嗯,这里要注意:Windows 版没有注册成系统服务,你得手动在命令行里跑。

macOS 安装

用 Homebrew 最省事:

brew install iperf3
小技巧:装完后先跑一下 iperf3 -v 确认版本。我曾经遇到过系统自带的旧版 iPerf2 和新装的 iPerf3 冲突,结果测了半天数据全是错的。

3.2 TCP 带宽测试命令:最常用的场景

TCP 测试是 iPerf3 的默认模式。说白了就是模拟文件传输,看看 TCP 协议栈能跑多快。

基本命令结构

服务端先启动监听:

iperf3 -s

默认监听 5201 端口。客户端连上去:

iperf3 -c 192.168.1.100

就这么简单?对,但实际工作中没人这么用。为什么?因为默认只跑 10 秒,结果太粗糙。我一般会加几个参数:

# 服务端
iperf3 -s -p 5201

# 客户端(我常用的生产环境命令)
iperf3 -c 192.168.1.100 -p 5201 -t 30 -P 4 -i 1

解释一下:-t 30 跑 30 秒,-P 4 开 4 个并行流,-i 1 每秒打印一次结果。你想想看,单流测试很多时候测不出真实带宽,尤其是面对多核 CPU 或者链路聚合的场景。

核心要点:TCP 测试的结果受窗口大小、延迟、丢包率影响很大。别只看最后那个平均值,要关注中间的波动。

3.3 UDP 带宽测试命令:测极限、看丢包

UDP 测试和 TCP 完全不同。TCP 有拥塞控制,会自动降速;UDP 不管这些,你给它多少带宽它就发多少。所以 UDP 测试更适合看链路的硬上限。

基本命令

# 服务端(和 TCP 一样)
iperf3 -s

# 客户端(指定 UDP 模式,设置目标带宽)
iperf3 -c 192.168.1.100 -u -b 1000M

-u 开启 UDP 模式,-b 1000M 表示以 1000 Mbps 的速率发包。这里有个坑:如果你设的带宽超过了链路实际容量,服务端会显示丢包率。

避坑指南:我曾经在一条 1Gbps 的链路上设了 -b 2000M,结果丢包率飙到 40% 以上。这不是链路有问题,而是我强行塞了超过容量的数据。UDP 测试要逐步增加带宽,找到那个“刚好不丢包”的临界点。

UDP 测试结果怎么看?

服务端输出会包含这几项关键数据:

指标 含义 正常范围
Jitter 抖动(延迟变化) < 1ms 优秀,< 5ms 可接受
Lost/Total Datagrams 丢包数 / 总包数 0% 最好,< 0.1% 可接受
Bandwidth 实际接收带宽 接近你设定的 -b 值

3.4 常用参数详解:这些你早晚用得上

iPerf3 的参数很多,但常用的就十几个。我按使用频率给你排个序:

必知参数(每次都用)

  • -c:客户端模式,后面跟服务器 IP
  • -s:服务端模式
  • -p:指定端口,默认 5201
  • -t:测试时长,单位秒。我一般设 30 秒以上
  • -i:结果打印间隔,单位秒。设 1 秒能看到实时波动

进阶参数(解决特定问题)

  • -P:并行流数。测多核 CPU 或链路聚合时很有用
  • -R:反向模式。让服务端向客户端发包,测上行带宽
  • -w:TCP 窗口大小。我调这个参数解决过高延迟下的吞吐问题
  • -M:设置 MSS(最大报文段大小)。排查 MTU 问题时用
  • -l:缓冲区长度。UDP 测试时调整包大小
个人经验:有一次客户说跨洋链路带宽只有 10Mbps,我加了 -w 256K 把窗口调大,结果直接跑到 80Mbps。很多时候不是带宽不够,是 TCP 窗口没调对。

3.5 知识体系:一张图看懂 iPerf3 测试流程

下面这张图是我自己总结的,把 iPerf3 的核心逻辑串起来了:

iPerf3 带宽测试核心流程 客户端 (Client) iperf3 -c [IP] -u -b 1000M -t 30 -P 4 服务端 (Server) iperf3 -s 监听端口 5201 等待连接 TCP/UDP 数据流 反向测试 (-R) 测试结果输出 TCP 测试结果 [ ID] Interval Transfer Bitrate [ 5] 0.00-30.00 sec 3.45 GBytes 988 Mbits/sec [ 5] sender (客户端发送速率) UDP 测试结果 [ ID] Interval Transfer Bitrate Jitter [ 5] 0.00-30.00 sec 3.45 GBytes 988 Mbits/sec 0.234ms Lost/Total Datagrams: 0/250000 (0%)

这张图把整个测试流程串起来了。客户端发起连接,服务端接收,最后两端都会输出结果。我个人习惯看服务端的结果,因为那是实际接收到的数据,更准确。

3.6 实战避坑指南

最后分享几个我踩过的坑:

  • 防火墙拦截:默认端口 5201 经常被防火墙挡住。记得先 telnet 一下端口通不通。
  • CPU 瓶颈:单流测试跑不满带宽?看看 CPU 是不是已经 100% 了。加 -P 2 或 -P 4 试试。
  • 网卡 offload 特性:有些网卡开启了 TSO/GRO,测出来的带宽虚高。我一般会关掉再测一次做对比。
  • 无线环境:Wi-Fi 测试结果波动极大。别只看一次结果,多跑几轮取中位数。
记住:iPerf3 只是个工具,结果需要结合你的网络拓扑、设备性能、应用场景来解读。别拿到一个数字就下结论,多跑几遍,多换几个参数,才能看到真相。

好了,这一章的内容就到这。工具装好了,命令会用了,参数也懂了。接下来就是多练,多试,慢慢你就能从数字里读出网络的故事。