无 iperf3 时的带宽测量是什么
受限环境(生产机不允许安装新软件、也没有测试对端)里测带宽,只能借用系统已有工具:nc 做 TCP 灌流、curl 下载大文件看速率、dd 配合 nc 计时、scp 观察传输速度。这些方法测出的是『够不够用』而非精确基准,结果里混入了协议、磁盘与服务端开销,与 iperf3 的净吞吐不能直接比较。
基本信息
| 适用平台 | Linux 通用(nc、curl、dd、scp 通常预装) |
|---|---|
| 测量口径 | 应用层可用带宽,含协议与磁盘开销 |
| 关键注意 | 全零数据在压缩链路上会虚高,需用随机数据 |
| 替代关系 | 无法替代 iperf3 的精确基准,仅用于可用性判断 |
典型使用场景
- 生产机不能装工具:先用现有命令回答『带宽够不够』
- 临时验证扩容效果:传输同一文件对比前后耗时
- 排查是否需要专业测量:先粗测定位方向,再申请测试窗口
- 容器与精简镜像环境:多数镜像自带 curl,可直接测量
- 跨机房传输评估:用真实大文件测端到端可用速率
替代方案
替代方案
# 接收端:丢弃所有收到的数据,只测吞吐
nc -l 9000 > /dev/null
# 发送端:用零数据灌流(若路径有压缩设备会虚高)
dd if=/dev/zero bs=1M count=1024 2>/dev/null | nc 10.0.0.5 9000
# 用随机数据避免压缩带来的虚高
openssl rand 512000000 > /tmp/rand.bin; cat /tmp/rand.bin | nc 10.0.0.5 9000
# curl 测下载速率
curl -sS -o /dev/null -w 'speed=%{speed_download} B/s\n' http://10.0.0.5/big.bin
# scp 观察实际传输速率
scp big.bin user@10.0.0.5:/tmp/方法对照
| 方法 | 测的是 | 主要偏差来源 |
|---|---|---|
| nc 灌流 | 单向 TCP 吞吐 | nc 实现差异、单流窗口限制 |
| curl 下载 | HTTP 可用速率 | 服务端与磁盘开销、协议头部 |
| scp 传输 | 加密通道可用速率 | 加解密 CPU 开销 |
| dd 计时 | 磁盘与管道吞吐 | 本机磁盘成为瓶颈 |
nc 的实现差异较大:传统 netcat 用 nc -l 监听,ncat 与部分 BSD 实现参数不同,动手前先用 nc -h 或 man 确认本机用法,避免在接收端就失败。
用全零数据在带压缩或去重的链路上测,会得到明显虚高的结果:需要准确数值时改用随机数据,或者安排 iperf3 的正式测试窗口。