iperf3 —— 网络带宽与质量基准
iperf3 —— 网络带宽与质量基准
分类:10 压测与基准 适用:Linux / macOS / Windows(iperf3 3.x) 一句话:两台机器之间到底能跑多少带宽、有没有丢包抖动,测一次就有答案。
1. 它解决什么问题
- 专线标称 1Gbps,实际能到多少?
- 跨机房延迟高、吞吐上不去,是带宽不够还是丢包?
- 新上架的 10G/25G 网卡、交换机链路是否达标。
- 云主机内网带宽是否符合规格。
2. 安装
apt install -y iperf3
dnf install -y iperf3
apk add iperf3
# Windows 从官网下载 iperf3.exe
3. 基本用法
服务端
iperf3 -s # 默认监听 5201
iperf3 -s -p 5202 # 指定端口
iperf3 -s -D # 后台运行(守护)
iperf3 -s -1 # 接受一次测试后退出
客户端
iperf3 -c 10.0.0.5 # TCP 默认 10 秒
iperf3 -c 10.0.0.5 -t 30 # 测 30 秒
iperf3 -c 10.0.0.5 -p 5202 # 指定端口
iperf3 -c 10.0.0.5 -P 8 # 8 条并行流
iperf3 -c 10.0.0.5 -R # 反向:服务端发给客户端
iperf3 -c 10.0.0.5 --bidir # 双向同时
iperf3 -c 10.0.0.5 -u -b 100M # UDP,限速 100Mbps
iperf3 -c 10.0.0.5 -w 2M # TCP 窗口 2MB
iperf3 -c 10.0.0.5 -i 1 # 每秒输出一次
iperf3 -c 10.0.0.5 -J > result.json # JSON 输出
iperf3 -c 10.0.0.5 --get-server-output # 同时拿服务端结果
4. 结果怎么读
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec receiver
| 列 | 含义 |
|---|---|
Transfer |
传输总量 |
Bitrate |
带宽(bits,不是 Bytes) |
Retr |
重传次数(TCP) |
sender / receiver |
发送端 / 接收端视角 |
单位换算
938 Mbits/sec ÷ 8 ≈ 117 MB/s
千兆网卡实测 930~945 Mbits/sec 是正常的(协议开销)。
UDP 模式
iperf3 -c 10.0.0.5 -u -b 500M -t 20
[ ID] Interval Transfer Bitrate Total Datagrams Lost/Total Loss% Jitter
[ 5] 0.00-20.00 1.16 GBytes 500 Mbits/sec 850000 120/850000 0.014% 0.045 ms
| 指标 | 意义 |
|---|---|
Lost/Total |
丢包数 |
Loss% |
丢包率,音频/视频/VoIP 关注 |
Jitter |
抖动,实时业务关注 |
5. 判读标准
| 链路 | 期望吞吐 | 说明 |
|---|---|---|
| 1 Gbps | 930~945 Mbps | 千兆网卡 |
| 10 Gbps | 9.2~9.4 Gbps | 需多流 + 足够 CPU |
| 25 Gbps | 22~23 Gbps | 需多流 + 大窗口 |
| 跨城专线 | 接近标称,延迟高 | 受 RTT 与窗口限制 |
吞吐上不去时依次排查:
- 单流受 TCP 窗口与 RTT 限制 → 加
-P(多流)。 - 网卡/交换机端口协商速率 →
ethtool eth0 | grep Speed。 - CPU 软中断打满 →
top看si、mpstat -P ALL 1。 - 中间设备限速/QoS → 查策略。
- 磁盘/内存拷贝瓶颈 → UDP 模式排除 TCP 因素。
6. 实战场景
6.1 验证专线/内网带宽
# A 机(服务端)
iperf3 -s -p 5201
# B 机(客户端)
iperf3 -c <A> -t 60 -P 8 -i 5
iperf3 -c <A> -t 60 -P 8 -R -i 5 # 反向
双向都测,因为上下行可能不对称。
6.2 测 10G 网络需要多流
iperf3 -c <server> -t 30 -P 16 -w 4M
单流在 10G 上通常只能跑到 3~5 Gbps,受窗口与 RTT 限制。
6.3 测丢包与抖动(UDP)
iperf3 -c <server> -u -b 200M -t 60 -i 5
Loss% 持续 >0.1% 说明链路有问题;Jitter >5ms 对实时业务有影响。
6.4 排查"带宽够但应用慢"
# 1. 裸带宽
iperf3 -c <server> -t 30 -P 8
# 2. 小包(模拟高频交易/游戏)
iperf3 -c <server> -u -b 10M -l 64 -t 30
# 3. 延迟
mtr -rwc 100 <server>
小包吞吐远低于大包 → PPS 能力不足(网卡/防火墙/内核参数)。
6.5 保存结果做对比
iperf3 -c <server> -t 30 -P 8 -J > /tmp/iperf-$(date +%F-%H%M).json
jq '.end.sum_sent.bits_per_second / 1e9' /tmp/iperf-*.json
6.6 指定源 IP / 多网卡
iperf3 -c <server> -B 10.0.0.11 # 绑定源地址
iperf3 -c <server6> -6 # IPv6
7. 常见坑
- 单位混淆:
Mbits/sec是比特,除以 8 才是 MB/s。云厂商带宽按 Mbps 卖。 - 单流测不出万兆:必须
-P 8以上。 - 防火墙未放行 5201:客户端报
Connection refused或一直重连。 - 服务端只跑单实例:多客户端并发测试要
iperf3 -s多次或不同端口。 -R方向搞反:-R是服务端发、客户端收,测下行带宽。- UDP 不限速:
-u不带-b会全速发包,打爆链路。 - CPU 瓶颈:高速率下单核软中断打满,
mpstat -P ALL 1看%soft。 - 测试时间太短:
-t 5包含 TCP 慢启动,结果偏低,至少 30s。 - 跨公网测:受运营商 QoS 影响,结果不代表内网能力。
- 云环境安全组:入方向要放行 5201,别只放行 ICMP。
-w设太大:超过net.core.rmem_max会报警告,需同步调内核参数。- JSON 字段版本差异:不同 iperf3 版本的
end.sum_sent结构略有不同,脚本要做兼容。
8. 配套内核调优(高速率场景)
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"
sysctl -w net.core.somaxconn=65535
查看网卡速率与丢包:
ethtool eth0 | grep -E 'Speed|Duplex'
ethtool -S eth0 | grep -i -E 'err|drop|discard'
ip -s link show eth0
9. 速查表
# 服务端
iperf3 -s
iperf3 -s -p 5202 -D
# TCP
iperf3 -c <ip> -t 30
iperf3 -c <ip> -t 30 -P 8
iperf3 -c <ip> -t 30 -P 8 -R
iperf3 -c <ip> --bidir -t 30
iperf3 -c <ip> -w 2M -P 4
iperf3 -c <ip> -B 10.0.0.11
# UDP
iperf3 -c <ip> -u -b 200M -t 30
iperf3 -c <ip> -u -b 10M -l 64 -t 30 # 小包/PPS
# 输出
iperf3 -c <ip> -J > r.json
iperf3 -c <ip> -i 1 --get-server-output
# 判读
Bitrate(Mbits/sec)/8 = MB/s
Retr 高 → 丢包/拥塞
Loss% >0.1 或 Jitter >5ms → 链路质量问题