第3章:iperf3 入门——安装、基本命令与TCP/UDP测试模式

说实话,我入行那会儿做带宽测试,用的还是老掉牙的 FTP 大文件拷贝法。传个大文件,掐秒表算时间,再手动除一下……那叫一个原始。后来接触了 iperf3,才感觉打开了新世界的大门。这工具,说白了就是网络性能测试的瑞士军刀。今天我就带你把它摸透。

3.1 安装 iperf3:别在这步翻车

iperf3 的安装其实很简单,但不同系统有点小区别。我踩过的坑是:有些系统源里的版本太老,导致客户端和服务端握手失败。

Linux(以 Ubuntu/CentOS 为例)

# Ubuntu / Debian
sudo apt-get install iperf3

# CentOS / RHEL
sudo yum install epel-release
sudo yum install iperf3

嗯,这里要注意:CentOS 默认源里没有 iperf3,必须先装 EPEL。我曾经在一台刚装好的 CentOS 7 上直接敲 yum install iperf3,结果提示找不到包。当时还以为是网络问题,折腾了半天……后来才发现是源没配。

macOS

brew install iperf3

Windows

去官网下载预编译的 exe 文件,或者用 choco install iperf3。我个人习惯把 iperf3.exe 扔到 C:\Windows\System32 里,这样命令行直接就能调用了。

小提示:装完后在终端敲 iperf3 -v,如果能看到版本号,说明装好了。看不到?检查一下环境变量。

3.2 基本命令结构:记住这个公式

iperf3 的命令其实就一个套路:

iperf3 -s  # 服务端(Server)
iperf3 -c [服务器IP]  # 客户端(Client)

你想想看,这跟现实中的测速很像。服务端开着等你来连,客户端主动发起测试。我刚开始学的时候,总记混哪个是服务端哪个是客户端。后来我给自己编了个口诀:「S 是 Server,也是 Stay,它在那等着;C 是 Client,也是 Connect,它去连别人。」

常用参数我列个表,你收藏一下:

参数 含义 我的备注
-s 服务端模式 默认监听 5201 端口
-c 客户端模式,后跟服务器 IP 必填参数
-p 指定端口 如果服务端改了端口,客户端也要对应改
-t 测试时长(秒) 默认 10 秒,我一般设 30 秒
-i 结果输出间隔(秒) 设 1 秒,能看到实时波动
-u 使用 UDP 模式 默认是 TCP
-b UDP 目标带宽 比如 -b 100M

3.3 TCP 测试模式:最常用的场景

TCP 测试是 iperf3 的默认模式。说白了,就是看你的网络链路能跑多快,同时也能看出 TCP 窗口、延迟这些因素对吞吐量的影响。

实战步骤

假设服务端 IP 是 192.168.1.100:

服务端(先启动):

iperf3 -s

客户端(发起测试):

iperf3 -c 192.168.1.100 -t 30 -i 1

这条命令的意思是:连到 192.168.1.100,测 30 秒,每 1 秒打印一次结果。

输出解读:你会看到类似这样的结果——
[ ID] Interval Transfer Bitrate
[ 5] 0.00-30.00 sec 3.45 GBytes 987 Mbits/sec

重点看 Bitrate 那一列,987 Mbits/sec 说明你的千兆链路基本跑满了。

我记得有一次帮客户排查问题,他们抱怨说「内网拷贝文件慢」。我上去一测,TCP 吞吐量只有 200 Mbps。后来发现是网线质量太差,换了一根 Cat6 的线,直接飙到 940 Mbps。你看,iperf3 能帮你快速定位到底是网络问题还是其他问题。

3.4 UDP 测试模式:看丢包和抖动

TCP 测试看的是吞吐量,UDP 测试看的是丢包率和抖动。为什么?因为 UDP 没有重传机制,丢了就是丢了。这对实时业务(比如视频会议、VoIP)特别重要。

实战步骤

服务端:

iperf3 -s -u

客户端:

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

这里 -b 100M 的意思是:以 100 Mbps 的速率发送 UDP 数据包。如果不设 -b,iperf3 默认只会发 1 Mbps,那测出来肯定没丢包,没有参考价值。

注意:UDP 测试时,服务端和客户端都要加 -u 参数。我曾经只给客户端加了 -u,服务端没加,结果服务端一直报错,我还以为是防火墙的问题……

输出解读

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

重点关注三个指标:

  • Jitter(抖动): 延迟的变化量。一般小于 1ms 算优秀,超过 5ms 就要注意了。
  • Lost(丢包率): 括号里的百分比。0% 最好,超过 1% 就会影响实时业务。
  • Bitrate: 实际接收到的带宽。如果发送 100M,接收只有 80M,说明链路有瓶颈。

3.5 一张图看懂 iperf3 测试流程

下面这张 SVG 图,是我自己画的 iperf3 核心逻辑。你一看就明白:

iperf3 测试核心流程 客户端 (Client) 服务端 (Server) 1. 发起连接请求 2. 发送数据流 3. 接收统计结果 1. 监听端口 (5201) 2. 接收数据流 3. 计算并返回结果 TCP/UDP 连接 数据流 结果返回 TCP模式:默认,测吞吐量 | UDP模式:加 -u 参数,测丢包和抖动

3.6 避坑指南:我踩过的三个坑

  1. 防火墙没关: 服务端启动了,客户端就是连不上。检查一下防火墙,iperf3 默认用 5201 端口。我习惯先 telnet [IP] 5201 测试一下端口通不通。
  2. 版本不一致: 服务端是 iperf3 3.1,客户端是 3.9,有时候会握手失败。尽量保持两端版本一致。
  3. UDP 测试忘了设 -b: 默认 1 Mbps 的速率,测出来当然没丢包。你以为网络很好,其实只是压力不够大。
我的习惯:每次测试前,先跑一次 TCP 看最大带宽,再用 80% 的带宽值去跑 UDP 测试。比如 TCP 能跑 900 Mbps,UDP 我就设 -b 720M,这样能看出真实链路的承载能力。

好了,这一章的内容就这些。iperf3 入门其实不难,关键是理解 TCP 和 UDP 测试分别看什么指标。你先把安装和基本命令跑通,后面章节我们会深入讲多线程、反向测试、双向测试这些高级玩法。

想要更多资料,联系可可