☰
iperf3 UDP打流测试:从安装到实战的网络带宽测速指南
2026/10/1 3:18:48 网站建设 项目流程

刚搭好一条链路,或者机房割接完,验收时最怕被问一个问题:“这条线带宽到底能不能跑满?”Ping通只能说明三层通,实际跑业务时卡不卡、丢不丢包,完全是另一回事。这时候就需要一个能“灌流量”的工具,也就是打流测试。而iperf3就是这个场景下绕不开的标准工具,它本身就是一款专门用来测网络带宽、抖动、丢包率的打流软件,支持 TCP 和 UDP,跨平台,安装包又小,Windows、Linux、macOS 都能跑。

这篇文章我直接按实际干活的经验来写:从下载安装开始,到 UDP 打流测试的完整操作,再到常见的报错和误判,哪怕你之前完全没碰过iperf3,照着一步步来也能把链路测明白。

1. 打流测试到底在测什么:iperf3 的核心思路

先搞清楚原理再动手,不然你连输出结果里那几行数字什么意思都看不懂。

1.1 为什么不能用“拷大文件”代替打流

很多人觉得测带宽简单,往服务器传个大文件看速度不就完了?这个思路在日常体验上没问题,但严格来说不严谨。文件拷贝的速度受限于磁盘 IO、SMB 协议栈、系统缓存等因素,你拷得快不快,可能根本不是网络瓶颈,而是硬盘先顶不住了。而且拷贝是单向长连接,测不出链路在双向并发、多流并发下的表现。

打流的思路完全不同:用工具主动制造网络流量,让流量尽量只考验网络链路本身。iperf3把数据包从一端灌到另一端,统计单位时间内传了多少字节,从而直接算出一条链路的实际吞吐能力。同时通过 UDP 模式还能额外测出抖动和丢包率,这些都是文件拷贝给不了的关键指标。

1.2 服务端与客户端:一个做接收,一个做发送

iperf3是典型的 C/S 架构。测试时必须先在一台机器上启动服务端(服务器模式),然后在另一台机器上跑客户端命令去连接它。默认端口是 5201,服务端监听这个端口,客户端发起连接后开始灌流量。

这个设计带来了一个容易被忽略的细节:你启动服务端的机器需要能接受入站连接,防火墙必须放行对应端口。很多人第一次跑iperf3卡在“客户端连不上”,九成都是防火墙拦了服务端,而不是软件本身有问题。

1.3 为什么打流测试要分 TCP 和 UDP

TCP 打流测的是“链路的极限可用带宽”。因为 TCP 有拥塞控制机制,链路一旦出现拥塞或丢包,发送端会自动降速,所以 TCP 测出来的是一个比较“温和”的结果——链路在现有条件下的最大稳定吞吐。

UDP 打流则完全不同。UDP 没有拥塞控制,你让它按 500Mbps 发包,它就真的每秒发 500Mbps 的数据出去,链路如果撑不住就直接丢。所以 UDP 打流更适合模拟视频流、组播、语音通话这类“只管发、不重传”的业务场景,能测出一根链路在有损状态下的真实承载能力。这也是很多人专门搜索“iperf3 使用 UDP 打流”的原因。

2. Windows 环境安装:解压即用,但五个地方必须核对

Windows 上安装iperf3可以说是所有系统里最简单的,因为不需要安装程序,解压就能用。但这不代表没有坑,我一个个说。

2.1 下载与解压:注意选 64 位版本

去官网或者项目的 GitHub Release 页面下载 Windows 编译版压缩包(zip 格式),文件名一般会带win64或win32字样。现在是 2025 年,绝大多数机器都是 64 位系统,直接下载win64的包即可。

解压后你会看到几个文件,核心是iperf3.exe,旁边还会跟着cygwin1.dll、cyggcc_s-seh-1.dll之类的动态库。这几个 dll 不能删,iperf3.exe是依赖它们运行的。有人把 exe 单独拷出来放到别的目录,结果双击报错,就是这个原因。

2.2 命令行进入目录的两种方式

iperf3没有图形界面,必须在命令行里执行。进入解压目录有两种方式:

  • 在文件夹地址栏输入cmd,回车,命令行会直接定位到当前目录。
  • 打开 CMD 后执行cd /d 路径,比如cd /d D:\tools\iperf-3.1.3-win64。

建议把解压目录改名为iperf3,路径短、好记,后边写命令也省事。我自己习惯放在D:\tools\iperf3\下。

2.3 把 iperf3 加入系统 PATH

如果你不想每次测试都先cd到目录里,可以把它加进系统环境变量。操作路径:此电脑 → 属性 → 高级系统设置 → 环境变量 → 找到 Path → 编辑 → 新建 → 填入解压目录路径。完成后重开一个 CMD,直接输入iperf3 -v就能看到版本信息,说明配置成功。

这一步不是必须的,但如果你经常要做网络测试,加上会省很多事。

2.4 第一个大坑:运行时错误 216

很多人在老机器或某些精简版系统上运行 iperf 时,会弹出一个对话框提示类似“Runtime Error 216”。我遇到过,这个报错通常和两点有关:一是你下载的是旧版 iperf(比如 2.x 时代的二进制),二是因为老版本二进制与新系统之间的兼容性问题。解决办法很简单:不要用 iperf 2.x,换成 iperf3 的 64 位版本。如果换了还是报错,用管理员身份重新打开 CMD 再执行。实测下来,iperf3.exe新版在 Windows 10、Windows 11 上都很稳。

2.5 第二个大坑:防火墙必须放行 5201

这是 Windows 上安装iperf3后最容易翻车的地方。你启动了服务端,客户端发起连接却一直卡在Connecting to host,说明网络层面根本没通。检查顺序是这样的:

  1. 服务端是否真的启动了(窗口里能看到Server listening on 5201类似字样)。
  2. 两端 IP 能否互相 ping 通。
  3. 服务端 Windows 防火墙是否放行了 5201 端口。

放行操作:控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP/UDP 填 5201 → 允许连接。注意,如果要测 UDP 打流,入站规则里要同时给 TCP 和 UDP 都放行,如果只放行了 TCP,就会出现很诡异的现象——TCP 测速正常,UDP 测试丢包率极高甚至全丢。

3. Linux 与国产系统安装:包管理器、EPEL、源码编译三条路

Linux 下装iperf3比 Windows 还快,正常发行版基本都有现成包。但国内环境比较特殊,很多跑业务用的是国产 Linux 系统,比如银河麒麟这类,安装命令和通用的 Ubuntu、CentOS 不完全一样。我把几条典型路径都列出来。

3.1 Ubuntu / Debian 系列:apt 一行搞定

sudo apt update sudo apt install iperf3

装完执行iperf3 -v验证版本。如果系统里的版本太老,后面测出一些奇怪的结果(比如单线程跑不满),可以考虑卸载后用源码装新版。

3.2 CentOS / RHEL 及基于它的发行版:注意 EPEL 仓库

CentOS 这类系统直接用yum搜iperf3经常搜不到,因为默认软件源里没有。常规做法是先装 EPEL 扩展仓库:

sudo yum install epel-release sudo yum install iperf3

系统如果自带dnf,把yum换成dnf即可。这里有个细节:EPEL 仓库里的iperf3版本通常不会太新,但对绝大多数测试场景来说完全够用,没必要追求最新版。

3.3 银河麒麟等国产系统:先判断底子再选命令

国产系统这块我多说两句,因为问的人真的很多。银河麒麟实际上分桌面版和服务器版,底层来自不同的开源体系,安装命令也跟着变:

  • 如果底层基于 Debian 体系(比如银河麒麟桌面版 V10 SP1 这类),直接用前面的apt命令。
  • 如果底层基于 CentOS 体系(比如银河麒麟高级服务器版 V10),用yum或dnf装。
  • 如果自带的源里面没有 iperf3,或者安装报找不到包,那就老老实实走源码编译。

判断到底属于哪种体系,执行cat /etc/os-release,看里面的ID和ID_LIKE字段,一目了然。

3.4 源码编译:手动装新版 iperf3 的通用路子

不管什么系统,源码编译都是兜底方案,我实际使用中觉得也没多复杂。先从官网或镜像站下载源码包,比如iperf-3.12.tar.gz,然后按顺序执行:

tar -zxvf iperf-3.12.tar.gz cd iperf-3.12 ./configure make sudo make install sudo ldconfig

编译前确保系统里有gcc和make,没有就先装。装完执行which iperf3确认路径,通常会被安装到/usr/local/bin/iperf3。如果执行iperf3提示找不到命令,多半是 PATH 里没有/usr/local/bin,或者ldconfig没刷新动态库缓存,两个都排查一下就行。

3.5 Linux 下用服务模式跑

生产环境测试时,你不可能一直开着终端窗口挂着服务端。可以用-D参数让iperf3以守护进程方式后台运行:

iperf3 -s -D

或者干脆写一个 systemd service 文件托管,方便开机自启。这个看个人习惯,我用-D比较多,简单直接。

4. UDP 打流的完整操作流程与结果判读

UDP 打流是iperf3的高阶玩法,也是很多人最想搞明白的部分。下面这组命令是我日常测试用的标准组合,直接抄就可以。

4.1 服务端启动命令

iperf3 -s -p 5201

这里的-p 5201可以省略,因为默认就是 5201。如果链路上有多个测试同时进行,建议加-p指定不同端口避免冲突,比如iperf3 -s -p 5210。

4.2 客户端 UDP 打流命令

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

参数拆解:

  • -c 192.168.1.100:指定服务端 IP。
  • -u:启用 UDP 模式。
  • -b 500M:目标带宽,也就是你希望以多大的码率灌包,单位是 bit 每秒,500M 就是 500Mbps。
  • -t 30:测试持续 30 秒。
  • -i 1:每秒打印一次实时结果。

4.3 服务端输出怎么看:核心三行

UDP 打流时,服务端的输出才是有效结果,因为接收端才能统计真实的丢包率。典型的服务端输出长这样:

[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-30.00 sec 1.79 GBytes 513 Mbits/sec 0.021 ms 0/1464245 (0%)

逐项解释:

  • Bitrate:实际接收速率。这里 513 Mbits/sec,说明实际跑到了 500Mbps 左右,符合预期。
  • Jitter:抖动,单位通常是微秒或毫秒。0.021 ms 属于很优秀的水平,如果超过 1ms,说明链路延迟不太稳定。
  • Lost/Total Datagrams:丢包数 / 总包数,后面括号里是丢包率。0/1464245 (0%) 代表零丢包,链路质量极好。

4.4 阶梯加压法:找出链路的真实承载能力

UDP 打流最有价值的操作不是一次测完,而是阶梯式加压。思路很简单:

  1. 先用低码率测,比如-b 100M。
  2. 确认零丢包后,涨到-b 300M、-b 500M、-b 800M、-b 1G。
  3. 记录第一个出现明显丢包的码率。

假设你在-b 800M时丢包率为 0%,涨到-b 1G时变成 12%,那这条链路的实际有损吞吐能力就在 800Mbps 到 1Gbps 之间。这个临界值对后续业务规划非常重要,比如你要在这条链路上跑视频会议,就该留 30% 左右的冗余,不要贴着临界值用。

4.5 客户端输出怎么看

客户端简单很多,主要看Total Datagrams和Bitrate,它是发送方统计的,不参与丢包判定。测试完成后客户端也会打印一份汇总,但真正写入报告的数据要以服务端为准。

5. 从单线到多流:TCP 测速、双向测速与并发压测的工程玩法

UDP 打流测的是链路极限,TCP 打流测的是可用带宽。日常网络验收里二者都要做,下面把 TCP 场景的完整玩法也过一遍。

5.1 基础 TCP 测速:别画蛇添足加 -b

最基本的 TCP 测试命令:

iperf3 -c 192.168.1.100 -t 10

输出重点看两行:

[ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec 834 sender [ 5] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec receiver
  • Retr:TCP 重传次数。如果数值非常大,说明链路存在丢包或拥塞,TCP 在不停重传,这会直接拉低吞吐。
  • sender 和 receiver:发送端和接收端的速率对比。两者差距过大时(比如 sender 显示了很高的速率,receiver 却低很多),链路损耗就很明显。

注意一个常见的错误认知:有人会在 TCP 测试里加-b参数,试图“限制带宽测更稳”。其实 TCP 模式自带拥塞控制,会自适应链路状况,而-b在 TCP 模式下起的是限速作用,测出来的结果反而不是链路的真实能力。TCP 测试就让它放开跑,不要手动限速。

5.2 反向测试与双向测试:别只看单向

很多业务场景是上下行不对称的,比如视频监控回传、P2P 下载,这时只测单向不够。

  • -R参数:反向测试,流量从服务端反向灌回客户端,也就是测试下行链路。
  • -d参数:双向同时测试,客户端和服务端同时向对方发包。

命令示例:

iperf3 -c 192.168.1.100 -R -t 30 iperf3 -c 192.168.1.100 -d -t 30

注意-d和-R在 iperf3 里都有效,但含义不同,一个是“同时双向”,一个是“单方向反过来”。做验收报告时,最好把正向、反向、双向三组数据都测全,避免漏掉链路中的不对称问题。

5.3 多流并发:模拟真实业务的关键参数

单流测试跑不满带宽是很常见的事,因为单线程受限于 CPU 频率和协议栈效率。这时要用-P参数开多流:

iperf3 -c 192.168.1.100 -P 4 -t 30

-P 4表示同时开 4 个流。多流测试更接近真实业务场景,因为服务器上的实际业务基本都是多并发。开 4 条流之后吞吐通常会有明显提升,如果加了并发还是上不去,那瓶颈基本就在硬件或者链路本身了。

这里有个人经验要分享:多流测试时得盯着服务端的 CPU。如果服务端 CPU 被打满,吞吐上不去是正常的,不代表链路有问题。反之,如果 CPU 没满但吞吐还上不去,那链路多半真的有瓶颈。

5.4 调优参数:TCP 窗口和测试时长

对于高带宽长距离链路,默认的 TCP 窗口可能不够大,导致吞吐受限。可以用-w调整窗口大小:

iperf3 -c 192.168.1.100 -w 1M -t 30

-w 1M把 TCP 窗口调到 1MB。这个参数不是越大越好,得看链路带宽和延迟的乘积(BDP),但实测中如果你发现速率远低于链路标称值,且 CPU 不忙、无重传,试着加大窗口往往能有惊喜。

测试时长建议至少 30 秒,如果链路质量不稳定,甚至测 60 秒以上。短时间测试容易受到突发流量的干扰,数据不够平滑。

5.5 输出 JSON:写脚本和报告时省力

iperf3支持直接输出 JSON 格式结果:

iperf3 -c 192.168.1.100 -J > result.json

这条命令会把完整结果保存到文件里,方便你用脚本批量解析和统计。做网络巡检或者多节点批量测试时,这个功能非常实用,不用一条一条复制终端输出。

我列个常用参数速查表,方便现场翻:

参数作用示例
-s启动服务端iperf3 -s
-c指定客户端连接的服务端 IPiperf3 -c 192.168.1.100
-uUDP 模式iperf3 -c 192.168.1.100 -u
-b目标带宽(UDP 必用)iperf3 -c 192.168.1.100 -u -b 500M
-t测试时长-t 30
-i打印间隔-i 1
-P并发流数-P 4
-R反向测试iperf3 -c 192.168.1.100 -R
-d双向同时测试iperf3 -c 192.168.1.100 -d
-wTCP 窗口大小-w 1M
-JJSON 格式输出iperf3 -c 192.168.1.100 -J
-p指定端口-p 5202

6. 实测中容易翻车的细节与排错链路

最后这部分是我最想写的,因为iperf3安装本身没有门槛,真正让人头疼的全是测试过程中的隐藏问题。我踩过的坑基本都在下面。

6.1 客户端卡在 Connecting 不动:先查防火墙和端口监听

现象:客户端执行命令后一直停在Connecting to host ...,最后超时报错。

排查链路按顺序来:

  1. 先在服务端执行ss -lntp | grep 5201或netstat -an | grep 5201,确认 5201 端口确实在监听。
  2. 看服务端是否绑定了错误的网卡。iperf3 -s默认监听所有接口,但如果服务端有多张网卡,保险起见用iperf3 -s -B 服务器IP指定绑定地址。
  3. 检查两端是否在同一网段,跨网段的话先确认路由和中间设备的访问控制策略。
  4. 最后检查防火墙。Windows 看 Defender 入站规则,Linux 看firewalld或ufw状态。

我遇到最多的情况是第 4 步,服务端防火墙默认拦截了 5201 端口。

6.2 UDP 测试结果“必丢包”:不一定是链路不行

UDP 打流出现丢包时,先别急着下“链路不行”的结论。有几种非链路因素会导致假性丢包:

  • 防火墙拦了 UDP:很多防火墙默认对 UDP 的策略比 TCP 严格,先检查服务端入站规则里 UDP 5201 是否放行。
  • 服务端 CPU 达到瓶颈:高码率 UDP 打流会大量占用 CPU 处理中断,CPU 满了,接收缓冲区溢出,就出现丢包。用top或任务管理器确认一下。
  • 交换机/路由器的限速策略:有些网络设备的端口有 QoS 或限速配置,导致实际吞吐被人为限制。这种时候打流结果再正常,网络策略也要一并排查。

6.3 Bitrate 单位换算:Mbits/sec 不等于 MB/s

很多人第一次看输出会犯迷糊:500 Mbits/sec为什么不是 50MB/s?因为这里的单位是bit每秒,不是 byte。换算关系是 8 bit = 1 byte,所以 500 Mbps 约等于 62.5 MB/s。跟文件拷贝软件显示的速度对比时,一定要先做这个换算,不然你会以为结果差了好几倍。

6.4 服务端报 Address already in use

如果你先启动过一个服务端没退出,再启动新实例就会报这个错。处理方式:

pkill iperf3

或者干脆换个端口启动,比如iperf3 -s -p 5210,客户端对应使用-p 5210连接。注意iperf3一个端口只支持一个服务端实例,不像某些服务可以多进程共享端口。

6.5 Linux 下报错无法启动线程

高并发测试(比如-P 16)时,Linux 下偶尔会报资源不足或创建线程失败。这通常是进程线程数限制太低,执行一下:

ulimit -u unlimited

再重试。如果还不行,检查系统ulimit -n是否设置得太低,适当调大文件描述符限制。

6.6 测试结果忽高忽低:先看中间链路

如果每次测试结果差异很大,不要只盯着两端设备。检查交换机端口是否有 CRC 错误计数器在增长、光模块光功率是否在临界值、无线链路是否存在干扰。iperf3只是个测量工具,它能告诉你链路“现在不行”,但具体是哪一段不行,还得靠交换机的统计数据和链路层工具进一步定位。

6.7 报告前多跑两遍,取稳态数据

最后是一个经验之谈:正式测试至少要跑两遍以上,取后程稳定的数据。网络刚建立连接时会有 TCP 慢启动、缓冲区填充的过程,前几秒数据波动大,不具代表性。我一般习惯用-t 60 -i 1拉长测试时间,然后看后 30 秒的输出作为有效数据,前 30 秒当作热身。

写在最后的实操体会

说实话,安装iperf3本身在三分钟之内就能搞定,真正有价值的经验全在参数组合和结果解读上。我自己的习惯是,在正式测试之前,先在本机的回环地址上跑一遍iperf3 -c 127.0.0.1 -u -b 1G,确认软件本身工作正常,再跑到真实链路上去测。这样一旦结果异常,就能排除“工具坏了”这个可能性,直接聚焦到网络设备上。还有一个细节想分享:UDP 打流的时候,不要把-b设置得超过链路标称值太多,否则结果全是丢包,反而不容易看出链路到底能跑多少。从低到高阶梯式测试,找到临界点,比一次压满更有参考价值。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询