iperf3客户端连不上服务端需先检查服务端是否绑定非回环地址(如-b 0.0.0.0)、防火墙是否放行5201端口、docker是否正确映射端口;测速偏低应启用多流(-p)和调大tcp窗口(-w);udp丢包率高通常因未设目标带宽(-b);iperf2与iperf3不兼容,须版本一致。

iperf3 客户端连不上服务端?先确认监听地址和防火墙
默认情况下 iperf3 -s 只监听 127.0.0.1,局域网其他机器根本连不上。这不是 bug,是安全默认行为。
- 服务端必须显式指定绑定地址:
iperf3 -s -B 0.0.0.0(监听所有接口)或iperf3 -s -B 192.168.1.100(只绑内网 IP) - Linux 上检查
ufw或firewalld是否放行了5201端口:sudo ufw status,没放行就加规则:sudo ufw allow 5201 - 如果服务端在 Docker 里跑,别忘了
-p 5201:5201并确认容器网络模式不是host以外的隔离模式
测速结果远低于预期?注意 TCP 窗口大小和并行流数
单线程 TCP 测速容易被窗口大小或接收端吞吐限制拖累,尤其千兆以上网络。iperf3 默认单流、自动调窗,但实际中常需手动干预。
- 用
-P开多流(比如-P 4),能更充分压满带宽,避免单连接瓶颈 - 加
-w 2M手动设 TCP 接收窗口(单位可为 K/M),对高延迟或高带宽网络很关键;不设可能卡在 64K - 如果跑出来只有 200Mbps,但网卡是千兆,大概率是没开多流或窗口太小;先试
iperf3 -c 192.168.1.100 -P 4 -w 1M
UDP 测速显示丢包率高?不是网络问题,先看发送端参数
iperf3 -u 默认只发 1Mbps,这个速率下即使轻微抖动也会报出 100% 丢包——因为接收端根本没收到任何包,不是真丢,是“发太少+收太快”导致的假象。
- UDP 必须用
-b指定目标带宽,例如iperf3 -c 192.168.1.100 -u -b 100M,否则按默认 1Mbps 发,毫无意义 - UDP 测试时加
-l 1200调大包长(默认 8KB),更贴近真实业务流量特征,也减少小包中断开销影响 - 若仍丢包,再查物理链路、交换机 QoS、网卡驱动是否开启 TSO/LRO,而不是直接怀疑网线或交换机
跨平台或旧设备只能用 iperf2?兼容性坑比功能还多
iperf2 和 iperf3 协议不兼容,iperf2 -c 连不上 iperf3 -s,反之亦然。很多嵌入式设备、老路由器只带 iperf2,得统一版本。
- 确认两端版本:
iperf -v(iperf2) vsiperf3 -v(iperf3),别混用 - iperf2 的 UDP 模式用
-u,但带宽控制靠-b后不带单位(如-b 100M在 iperf2 中会被当成 100bps);iperf2 正确写法是-b 100M→ 实际要写成-b 100000000或用-b 100m(小写 m) - iperf2 不支持
-R(反向测试)的语义一致性,建议始终让客户端主动发起连接,避免方向混淆










