用 iperf3 测内网带宽需避免默认单流,应加 -P 4、-w 2M、-t 30+,服务端加 -s -D;UDP 测试必加 -b;tc 模拟弱网前须清空规则;公网测速应手动选低延迟节点并取中位数;结果需综合带宽稳定性、丢包抖动、服务端负载三指标判断。

用 iperf3 测内网带宽,别直接跑默认命令
默认 iperf3 -c SERVER_IP 只测 10 秒 TCP 单流,结果常严重低估真实带宽——尤其在万兆、RDMA 或多核服务器场景下。单流受限于单线程吞吐和 TCP 窗口大小,容易卡在 1–3 Gbps 就上不去,哪怕物理链路是 10G。
实操建议:
- 加
-P 4启动 4 并行流(根据 CPU 核数调整),避免单线程瓶颈 - 显式设窗口大小:
-w 2M(匹配高带宽时延积 BDP),否则小窗口会拖慢长距链路 - 测试时间至少
-t 30,避开瞬时抖动干扰;关键链路建议-t 300观察稳定性 - 服务端务必加
-s -D后台运行,避免被 Ctrl+C 中断后残留进程占端口
常见错误:UDP 测试漏掉 -b 参数,iperf3 -c IP -u 默认只发 1 Mbps,根本测不出丢包和抖动——必须写成 iperf3 -c IP -u -b 900M 才有意义。
模拟弱网环境,tc netem 配置不能只写一条命令
tc 不是“设完就生效”的开关,而是分层队列管理器。直接 tc qdisc add ... 在已有规则上叠加,会导致规则冲突、延迟失效甚至网络中断。
安全做法:
- 每次模拟前先清空:
tc qdisc del dev eth0 root(注意替换为实际网卡名) - 复杂组合(如延时+丢包+乱序)必须用
netem单一层实现,例如:tc qdisc add dev eth0 root netem delay 80ms 20ms distribution normal loss 2% reorder 5% - 测试完立刻恢复:
tc qdisc del dev eth0 root,否则影响后续业务
容易踩的坑:在虚拟机或容器里用 tc,宿主机网卡名(如 ens3)和容器内看到的(如 eth0)不一致,配错设备名等于白配。
公网测速用 speedtest-cli,但别信“自动选服”
speedtest-cli 自动选的服务器可能跨省、绕运营商骨干网,测出来 50 Mbps 不代表你的真实出口能力——可能只是到那个节点的路径被限速了。
更准的做法:
- 先列可用节点:
speedtest-cli --list | grep -i "shanghai\|beijing"(按地域过滤) - 挑
ping延迟最低的几个,再逐个测:speedtest-cli --server 12345 - 对比三次结果,取中位数;若某次上传速度突降 50%,大概率是该节点上行拥塞,不是你家宽带问题
注意:某些 ISP 会对 speedtest.net 的域名或 IP 做 QoS 优先级标记,导致结果虚高,内网验证仍需靠 iperf3。
看结果时盯紧三类指标,别只扫一眼“Bandwidth”
一次完整测试要交叉验证三组数据,缺一不可:
-
带宽稳定性:用
-i 1每秒输出,观察最后 10 秒是否持续达标,还是前 5 秒冲高后断崖下跌(说明缓冲区溢出或驱动异常) -
丢包与抖动:UDP 测试必须看
Jitter(毫秒级)和Lost/Total,视频会议场景 >5 ms 抖动或 >0.1% 丢包就会卡顿 -
服务端负载:在
iperf3 -s机器上同时跑htop和ss -i,确认 CPU 不飙红、重传率(retrans)接近 0——否则瓶颈在本机,不是网络
最常被忽略的一点:所有测试必须关闭客户端和服务端的防火墙临时规则(sudo ufw disable 或 sudo systemctl stop firewalld),否则 Connection refused 错误会误导你去查网线。











