3、Iperf3基础:工作原理、TCP与UDP模式区别、基本命令格式、服务端与客户端模式

说到WiFi测试,Iperf3绝对是个绕不开的工具。我入行那会儿,前辈丢给我一个命令行窗口说「跑个吞吐」,我盯着黑屏愣了半天。后来才明白,这玩意儿就是网络性能测试的「秤」——你WiFi快不快,它说了算。

这一章,咱们把Iperf3的底裤扒干净。不扯虚的,全是实战里摸出来的东西。

3.1 Iperf3的工作原理

Iperf3本质上是个客户端-服务端架构的工具。说白了,就是一台机器当服务器等着,另一台机器当客户端往它那儿怼数据。然后它俩一算,就知道网络到底能跑多快。

它的工作流程其实就三步:

  1. 服务端监听:一台机器启动服务端模式,在指定端口上蹲着等数据。
  2. 客户端发起:另一台机器启动客户端模式,往服务端IP和端口发数据流。
  3. 双向统计:测试结束后,两端各自算带宽、抖动、丢包率,然后打印出来。

我记得有一次在客户现场,WiFi信号满格,但视频会议卡成PPT。我用Iperf3一测,服务端在机房,客户端在会议室,结果吞吐只有5Mbps。后来发现是AP的QoS策略把UDP包给限了。你看,没有Iperf3,这种问题你只能靠猜。

核心要点:Iperf3测试的是「端到端」的实际吞吐能力,不是理论速率。WiFi标称1200Mbps,Iperf3一跑可能只有300Mbps,这才是真实水平。

3.2 TCP模式与UDP模式的区别

这个问题我面试新人时必问。很多人背过答案,但真到用的时候还是搞混。

简单说:TCP模式测的是「网络能给你多少」,UDP模式测的是「网络本身有多好」。

对比项 TCP模式 UDP模式
传输特性 可靠传输,有重传机制 尽力而为,无重传
测试指标 吞吐量(Throughput) 带宽、抖动、丢包率
适用场景 文件传输、网页浏览等实际应用模拟 流媒体、VoIP、游戏等实时业务评估
结果解读 数值受窗口大小、延迟影响大 数值更接近物理层能力
默认行为 Iperf3默认就是TCP 需要加 -u 参数

我个人的习惯是:先跑UDP,再跑TCP。为什么?

UDP能告诉你这条链路「天花板」在哪。比如你UDP能跑到800Mbps,那TCP再怎么折腾也超不过这个数。然后TCP跑出来的值,才是你实际应用能拿到的。如果TCP比UDP低太多,那就要查TCP窗口、延迟、丢包重传这些问题了。

实战技巧:WiFi环境下,UDP模式的抖动(jitter)值如果超过10ms,语音通话就会明显感觉到卡顿。我曾经帮一个客户排查视频会议问题,UDP抖动飙到30ms,最后发现是信道干扰太严重。

3.3 基本命令格式

Iperf3的命令格式其实不复杂。你记住一个骨架就行:

iperf3 -s  # 服务端
iperf3 -c <服务端IP>  # 客户端

就这么简单。但实际测试中,我们通常会加一堆参数。我把最常用的列出来:

参数 含义 示例
-s 服务端模式 iperf3 -s
-c 客户端模式,后跟服务端IP iperf3 -c 192.168.1.100
-u 使用UDP模式 iperf3 -u -c 192.168.1.100
-b 目标带宽(UDP模式常用) iperf3 -u -c 192.168.1.100 -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
-i 结果输出间隔(秒) iperf3 -c 192.168.1.100 -i 1

举个例子,一个完整的WiFi吞吐测试命令长这样:

# 服务端(在台式机上跑)
iperf3 -s -p 5201

# 客户端(在笔记本上跑,连WiFi)
iperf3 -c 192.168.1.100 -u -b 500M -t 60 -i 1

这条命令的意思是:用UDP模式,目标带宽设500Mbps,跑60秒,每秒打印一次结果。

注意:UDP模式下如果不指定 -b 参数,Iperf3默认只会发1Mbps的数据。很多人第一次跑UDP发现结果只有1M,还以为网坏了。嗯,我当年也犯过这个错。

3.4 服务端与客户端模式详解

服务端和客户端,角色分工很明确。

服务端(Server):

  • 命令:iperf3 -s
  • 默认监听端口:5201
  • 可以指定端口:iperf3 -s -p 5001
  • 可以跑在后台:iperf3 -s -D(Linux下)
  • 一次只能服务一个客户端连接(这是Iperf3和Iperf2的重要区别)

客户端(Client):

  • 命令:iperf3 -c <IP>
  • 必须指定服务端IP地址
  • 可以指定端口、协议、时长、并行流数等
  • 测试结束后自动退出

这里有个坑,我必须要说。Iperf3的服务端是单线程的,一个服务端进程同时只能服务一个客户端。如果你需要多客户端同时测试,得用 iperf3 -s --daemon 启动多个实例,或者用Iperf2。

我曾经在一个大型WiFi部署项目中,需要同时测试20个终端的并发吞吐。Iperf3搞不定,最后写了个脚本,每台终端错开5秒启动,勉强模拟了并发场景。所以,选工具前先搞清楚你的测试场景。

3.5 一张图看懂Iperf3工作流程

下面这张SVG图,把Iperf3的完整工作流程画清楚了。从服务端启动监听,到客户端发起连接,再到数据流传输和结果汇总,一目了然。

Iperf3工作流程图 Iperf3 工作流程 服务端启动监听 等待客户端连接 客户端发起连接 TCP/UDP连接建立 数据传输(双向) 数据流 结果统计与输出 带宽 / 抖动 丢包率 / 重传 💡 服务端监听 → 客户端连接 → 数据传输 → 两端各自统计结果并打印

这张图把Iperf3的完整生命周期串起来了。你对照着看,每一步在命令行里都能找到对应。

3.6 实战中的几个关键点

最后,分享几个我踩过的坑,你遇到了能少走弯路:

  • 防火墙:服务端的端口(默认5201)必须放通。我遇到过好几次,服务端启动成功了,客户端就是连不上,最后发现是Windows防火墙在作怪。
  • 双向测试:WiFi的上下行性能往往不对称。记得加 -R 参数测一下反向(客户端收数据),你会发现惊喜。
  • 并行流:WiFi环境下,单流往往跑不满带宽。试试 -P 4 甚至 -P 8,有时候效果立竿见影。
  • 测试时长:别只跑10秒。WiFi信号会波动,建议至少跑60秒,看平均值和稳定性。

我的习惯:每次测试前,先用有线网络跑一次Iperf3,确认两台机器之间的有线链路没问题。然后再切到WiFi。这样出了问题,你至少知道不是网线或交换机的问题。