iperf3 主机端与服务器端测速新手教程:测试上传、下载、延迟和常见报错
为什么用 iperf3 测速
如果你想知道一台服务器在你本地网络环境下能跑多快,iperf3 是一个很常用的工具。
它可以测试:
- 本地电脑上传到服务器的速度
- 服务器下载到本地电脑的速度
- TCP 带宽表现
- UDP 丢包和抖动
- IPv4 / IPv6 网络质量
- 不同线路、不同代理、不同运营商之间的实际速度
相比浏览器下载文件,iperf3 更适合单独测试网络链路本身。
主机端和服务器端分别是什么
iperf3 测速需要两端配合:
| 角色 | 含义 | 常用命令 |
|---|---|---|
| 服务器端 | 监听端口,等待连接 | iperf3 -s |
| 主机端 / 客户端 | 主动连接服务器并发起测试 | iperf3 -c SERVER_IP |
为了避免暴露真实地址,本文统一使用占位符:
| 占位符 | 含义 |
|---|---|
SERVER_IP |
服务器 IPv4 或域名 |
SERVER_IPV6 |
服务器 IPv6 |
SERVER_PORT |
iperf3 端口,默认是 5201 |
iperf3 默认监听端口是:
1TCP 5201
一、测速前的准备
1. 服务器端安装 iperf3
如果你的服务器是 Debian 或 Ubuntu,可以通过 SSH 登录服务器后执行:
1apt update
2apt install -y iperf3
安装完成后,可以检查版本:
1iperf3 --version
如果能正常显示版本号,说明服务器端已经安装好了。
2. Windows 主机端安装 iperf3
如果你在 Windows 里执行 iperf3 时看到:
1'iperf3' 不是内部或外部命令,也不是可运行的程序
说明本地 Windows 还没有安装 iperf3,或者安装后没有加入 PATH。
可以用 winget 安装:
1winget install --id ar51an.iPerf3 -e
安装完成后,关闭当前 PowerShell 或 CMD,重新打开一个新窗口,再执行:
1iperf3 --version
如果能显示版本号,就说明 Windows 主机端也准备好了。
3. 查询服务器 IP
SSH 登录服务器后,可以查询服务器公网 IPv4:
1curl -4 ip.sb
查询服务器公网 IPv6:
1curl -6 ip.sb
也可以查看服务器网卡地址:
1ip addr
注意:这些命令会显示你的真实服务器 IP。如果要发截图或写教程,建议把 IP 打码。
二、服务器端启动 iperf3
1. 默认启动
在服务器 SSH 里执行:
1iperf3 -s
如果成功,会看到类似:
1-----------------------------------------------------------
2Server listening on 5201
3-----------------------------------------------------------
这表示服务器端已经在 5201 端口监听。
这个 SSH 窗口不要关,保持它运行。
2. IPv6 启动
如果你要用 IPv6 测试,可以明确指定 IPv6:
1iperf3 -s -6
成功时同样会看到:
1Server listening on 5201
3. 指定端口启动
如果默认的 5201 端口被占用,或者你想换一个端口,可以这样:
1iperf3 -s -p SERVER_PORT
例如你把端口换成其他值,本地测试时也要加同样的端口参数:
1iperf3 -c SERVER_IP -p SERVER_PORT -t 30
三、主机端测试命令
下面这些命令都在本地电脑上执行,而不是在服务器上执行。
1. 测延迟
IPv4 或域名:
1ping SERVER_IP
IPv6:
1ping -6 SERVER_IPV6
如果想多测几次:
1ping -n 20 SERVER_IP
IPv6 多测几次:
1ping -6 -n 20 SERVER_IPV6
重点看输出里的:
1time=xx ms
或者 Windows 最后的统计:
1最短 = xxms,最长 = xxms,平均 = xxms
一般主要看平均延迟。
2. 测本地上传到服务器
数据方向是:
1本地电脑 → 服务器
IPv4 或域名:
1iperf3 -c SERVER_IP -P 4 -t 30
IPv6:
1iperf3 -6 -c SERVER_IPV6 -P 4 -t 30
这条命令测试的是你本地网络上传到服务器能跑多少。
3. 测服务器下载到本地
数据方向是:
1服务器 → 本地电脑
IPv4 或域名:
1iperf3 -c SERVER_IP -R -P 4 -t 30
IPv6:
1iperf3 -6 -c SERVER_IPV6 -R -P 4 -t 30
这里的 -R 表示 Reverse,也就是反向测试。
注意:命令仍然是在本地电脑执行,但是加了 -R 后,数据方向会反过来,由服务器向本地电脑发送数据。
所以:
- 不带
-R:测本地上传到服务器 - 带
-R:测服务器下载到本地
四、常用参数解释
| 参数 | 含义 |
|---|---|
-s |
启动 iperf3 服务端 |
-c SERVER_IP |
作为客户端连接服务器 |
-R |
反向测试,服务器向本地发送数据 |
-P 4 |
使用 4 个并发连接 |
-t 30 |
测试 30 秒 |
-p SERVER_PORT |
指定端口 |
-6 |
强制使用 IPv6 |
-4 |
强制使用 IPv4 |
-V |
显示更详细日志 |
-u |
使用 UDP 测试 |
-b 100M |
UDP 目标带宽为 100 Mbps |
要特别注意:
1-t 30
是小写 t,表示测试 30 秒。
不要写成:
1-T 30
大写 -T 不是测试时间参数。
五、怎么看 iperf3 测试结果
测试完成后,你会看到类似输出:
1[ ID] Interval Transfer Bitrate
2[ 5] 0.00-30.00 sec 3.20 GBytes 916 Mbits/sec sender
3[ 5] 0.00-30.00 sec 3.19 GBytes 913 Mbits/sec receiver
主要看这一列:
1Bitrate
常见单位:
| 显示 | 含义 |
|---|---|
100 Mbits/sec |
约 100 Mbps |
916 Mbits/sec |
约 916 Mbps |
1.10 Gbits/sec |
约 1.1 Gbps |
一般更建议看最后的 receiver,因为它表示接收端实际收到的数据速度。
六、防火墙和安全组设置
iperf3 默认使用:
1TCP 5201
所以服务器需要放行 TCP 5201。
如果服务器使用 ufw,可以执行:
1ufw allow 5201/tcp
如果你换了端口,例如 SERVER_PORT:
1ufw allow SERVER_PORT/tcp
如果要测 UDP,再放行:
1ufw allow 5201/udp
如果是云服务器,还需要到云厂商控制台的安全组里放行:
1入站 TCP 5201
如果你用 IPv6,还要确认安全组允许 IPv6 入站。
安全建议:
- 测试完可以关闭 iperf3
- 不需要长期开放 5201
- 如果可以,安全组只允许自己的本地公网 IP 访问
- 发截图时记得打码服务器真实 IP
七、常见报错排查
1. Windows 报错:不是内部或外部命令
报错:
1'iperf3' 不是内部或外部命令,也不是可运行的程序
原因是 Windows 没安装 iperf3,或者没有加入 PATH。
解决方法:
1winget install --id ar51an.iPerf3 -e
安装完成后重新打开 PowerShell 或 CMD:
1iperf3 --version
2. Linux 服务器报错:command not found
报错:
1-bash: iperf3: command not found
原因是服务器没安装 iperf3。
解决方法:
1apt update
2apt install -y iperf3
然后启动服务端:
1iperf3 -s
3. 服务器显示 Server listening on 5201
如果服务器显示:
1Server listening on 5201
说明服务器端已经成功开启。
这时候不要关闭 SSH 窗口,直接去本地 Windows 运行客户端测试命令。
4. iperf3: exiting
如果只看到:
1iperf3: exiting
要看它前面一两行真正的报错。
常见原因是端口被占用,例如:
1Address already in use
可以检查 5201 是否已经被占用:
1ss -lntp | grep 5201
如果已经有 iperf3 在监听,说明服务可能已经开着。
如果想重新启动:
1pkill iperf3
2iperf3 -s
也可以换端口:
1iperf3 -s -p SERVER_PORT
本地连接时也指定端口:
1iperf3 -c SERVER_IP -p SERVER_PORT -R -P 4 -t 30
5. unable to connect to server
如果本地报:
1unable to connect to server
通常是以下原因:
- 服务器 iperf3 没开
- 服务器防火墙没放行
- 云服务器安全组没放行
- IP 写错了
- IPv6 网络不通
- 端口不是 5201
- 服务端监听的是另一个端口
可以在 Windows 里检查端口:
1Test-NetConnection SERVER_IP -Port 5201
IPv6:
1Test-NetConnection SERVER_IPV6 -Port 5201
如果看到:
1TcpTestSucceeded : True
说明 TCP 5201 是通的。
如果是:
1TcpTestSucceeded : False
说明端口不通,需要检查服务器防火墙、云安全组和 iperf3 服务状态。
6. control socket has closed unexpectedly
报错:
1iperf3: error - control socket has closed unexpectedly
意思是 TCP 连接可能建立成功了,但 iperf3 控制连接被对端关闭。
常见原因:
- 公共 iperf3 服务器繁忙
- 服务器 iperf3 服务异常
- 服务器端限制连接
- 中间代理或 TUN 模式干扰
- 开了全局代理
- 服务器端不是正常的 iperf3 服务
- iperf3 版本或平台兼容问题
可以加 -V 查看详细日志:
1iperf3 -c SERVER_IP -t 5 -V
IPv6:
1iperf3 -6 -c SERVER_IPV6 -t 5 -V
八、全局代理对 iperf3 的影响
如果你开了全局代理、TUN 模式、mihomo、Clash 等,iperf3 流量可能会走代理,而不是走你的真实本地网络。
例如执行:
1Test-NetConnection SERVER_IPV6 -Port 5201
如果看到类似:
1InterfaceAlias : mihomo
2SourceAddress : 代理虚拟网卡地址
3TcpTestSucceeded : True
说明流量走的是代理虚拟网卡。
这时候即使端口是通的,iperf3 也可能报:
1control socket has closed unexpectedly
因为代理节点、TUN 虚拟网卡或代理规则可能不适合 iperf3 这种大流量测速。
更重要的是,如果走代理,你测到的不是:
1本地电脑 → 服务器
而是:
1本地电脑 → 代理节点 → 服务器
这个结果不能代表你的真实本地网络到服务器的速度。
九、测速时建议关闭代理
如果你要测真实网络,建议:
- 关闭全局代理
- 关闭 TUN 模式
- 或者给服务器 IP 加 DIRECT 规则
mihomo / Clash 规则示例:
1- IP-CIDR,SERVER_IP/32,DIRECT,no-resolve
IPv6 规则示例:
1- IP-CIDR6,SERVER_IPV6/128,DIRECT,no-resolve
重载配置后,再检查:
1Test-NetConnection SERVER_IP -Port 5201
IPv6:
1Test-NetConnection SERVER_IPV6 -Port 5201
确认不再显示代理虚拟网卡后,再进行 iperf3 测试。
十、UDP 测试,可选
默认 iperf3 使用 TCP。
如果你要测 UDP 丢包和抖动,可以用:
1iperf3 -c SERVER_IP -u -b 100M -t 30
反向 UDP:
1iperf3 -c SERVER_IP -u -b 100M -R -t 30
IPv6 反向 UDP:
1iperf3 -6 -c SERVER_IPV6 -u -b 100M -R -t 30
参数说明:
| 参数 | 含义 |
|---|---|
-u |
使用 UDP |
-b 100M |
目标带宽 100 Mbps |
-R |
反向测试 |
注意:UDP 一定要指定 -b,否则默认带宽很低,不适合测速。
十一、新手推荐命令总结
服务器端
默认启动:
1iperf3 -s
IPv6 启动:
1iperf3 -s -6
指定端口启动:
1iperf3 -s -p SERVER_PORT
本地电脑测延迟
IPv4 或域名:
1ping SERVER_IP
IPv6:
1ping -6 SERVER_IPV6
本地电脑测上传
IPv4 或域名:
1iperf3 -c SERVER_IP -P 4 -t 30
IPv6:
1iperf3 -6 -c SERVER_IPV6 -P 4 -t 30
本地电脑测下载
IPv4 或域名:
1iperf3 -c SERVER_IP -R -P 4 -t 30
IPv6:
1iperf3 -6 -c SERVER_IPV6 -R -P 4 -t 30
十二、最容易记住的版本
服务器端运行:
1iperf3 -s
本地测上传:
1iperf3 -c SERVER_IP -P 4 -t 30
本地测下载:
1iperf3 -c SERVER_IP -R -P 4 -t 30
本地测延迟:
1ping SERVER_IP
如果是 IPv6:
1ping -6 SERVER_IPV6
2iperf3 -6 -c SERVER_IPV6 -P 4 -t 30
3iperf3 -6 -c SERVER_IPV6 -R -P 4 -t 30
总结
如果你的目标是:
我想知道这台服务器在我本地网络下,上传、下载、延迟分别是多少。
最标准流程是:
-
服务器安装 iperf3。
-
服务器运行:
1iperf3 -s -
本地电脑关闭全局代理 / TUN。
-
本地电脑测延迟:
1ping SERVER_IP -
本地电脑测上传:
1iperf3 -c SERVER_IP -P 4 -t 30 -
本地电脑测下载:
1iperf3 -c SERVER_IP -R -P 4 -t 30
最后记住这几个重点:
- 不带
-R:本地上传到服务器 - 带
-R:服务器下载到本地 -P 4:4 个并发连接,更容易跑满带宽-t 30:测试 30 秒- 测真实网络时不要开全局代理
- 发教程或截图时不要暴露真实服务器 IP