##网络基础 iperf3 主要用于测试网络带宽,延迟抖动和丢包率,而不是延迟。{alertInfo}
由人工编写审核,非AI生成内容,请放心观看!
{getToc} $title={文章目录}
iperf3 一篇文章弄明白该如何使用? |
安装
yum install iperf3.x86_64 -y
服务器端:
服务器端开启默认的监控端口 5201
,等待客户端进行访问测试。
iperf3 -s -i 1
客户端:
iperf3 -c 127.0.0.1 -t 10
-c 链接地址
-t 测试时间
## 测试带宽
iperf3 -c <server-ip> -t 60 -i 5 -J
iperf3 -c <server-ip> -t 60 -P 8 -i 5 -J
iperf3 -c <server-ip> -t 60 -P 8 -w 256K -J
解释
- 第一条: 测试 60s , 间隔报告 5 -J 输出
Json
数据 - 第二条:-P 表示多线程测试
- 第三条:-w 设置的 TCP 发送/接收缓冲区大小(这里双向 都被设置了)
服务端和客户端结果
[ ID] Interval Transfer Bitrate
[ 5] 0.00-60.05 sec 289 MBytes 40.4 Mbits/sec receiver
[ 8] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 10] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 12] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 14] 0.00-60.05 sec 289 MBytes 40.3 Mbits/sec receiver
[ 16] 0.00-60.05 sec 286 MBytes 40.0 Mbits/sec receiver
[ 18] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 20] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[SUM] 0.00-60.05 sec 2.25 GBytes 322 Mbits/sec receiver
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.03 sec 289 MBytes 40.4 Mbits/sec 0 sender
[ 5] 0.00-60.05 sec 289 MBytes 40.4 Mbits/sec receiver
[ 7] 0.00-60.03 sec 288 MBytes 40.2 Mbits/sec 0 sender
[ 7] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 9] 0.00-60.03 sec 288 MBytes 40.2 Mbits/sec 0 sender
[ 9] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 11] 0.00-60.03 sec 288 MBytes 40.2 Mbits/sec 0 sender
[ 11] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 13] 0.00-60.03 sec 289 MBytes 40.3 Mbits/sec 0 sender
[ 13] 0.00-60.05 sec 289 MBytes 40.3 Mbits/sec receiver
[ 15] 0.00-60.03 sec 286 MBytes 40.0 Mbits/sec 0 sender
[ 15] 0.00-60.05 sec 286 MBytes 40.0 Mbits/sec receiver
[ 17] 0.00-60.03 sec 288 MBytes 40.2 Mbits/sec 0 sender
[ 17] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[ 19] 0.00-60.03 sec 288 MBytes 40.2 Mbits/sec 0 sender
[ 19] 0.00-60.05 sec 288 MBytes 40.2 Mbits/sec receiver
[SUM] 0.00-60.03 sec 2.25 GBytes 322 Mbits/sec 0 sender
[SUM] 0.00-60.05 sec 2.25 GBytes 322 Mbits/sec receiver
推荐的测试矩阵
- TCP 单流基线(30s)
- TCP 并发流扩展:
-P 2,4,8,16
,每次 30–60s,观察吞吐随流数变化 - TCP 窗口调优:按 BDP 调整
-w
并复测 - UDP 递增:10%、50%、80%、100% 发送率,记录丢包与抖动
- 长运行(5–10 分钟)以检测间歇性问题
- 不同时间点重复测试,观测方差
对于 10Gbps 及以上链路,通常需要多流并分派到不同 CPU 核心。
## 延迟测试
持续4K数据包网络延迟和吞吐率
在实际应用中,很多关键的网络流量都是由小数据包组成的:
- 数据库查询 (Database Lookups):每次请求和响应的数据量通常很小。
- 网络游戏 (Online Gaming):持续发送和接收的是玩家状态的微小更新包。
- Web 浏览 (Web Browsing):大量的 HTTP 头、Cookies、小图片、API 调用等都是小数据包。
- 语音和视频通话 (VoIP):语音数据流也是由许多小包组成。
如果你的网络处理小包的效率低,即使最大带宽很高(比如 10 Gbps),你的网页加载速度或游戏体验也会感觉“卡顿”或“慢”。
iperf3 -c <server-ip> -u -b 100M -l 4K -t 30
-b 100M
: 设置目标带宽为 100 Mbps。因为小包测试的重点不是最大带宽,而是特定带宽下的吞吐和丢包,所以通常会限制一个速率。
-l 4K
: 设置发送的数据包长度为 4K 字节。 设置发送数据包的载荷(Payload)大小为 4 Kilobytes (4096 字节)。这个大小指的是数据包中实际数据的部分,不包括 IP、UDP/TCP 头等网络开销。
-t 30
: 测试 30 秒。
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-30.00 sec 358 MBytes 100 Mbits/sec 0.000 ms 0/91551 (0%) sender
[ 5] 0.00-30.02 sec 358 MBytes 99.9 Mbits/sec 0.430 ms 0/91550 (0%) receiver
Jitter (延迟抖动):小包测试会准确反映网络抖动情况,抖动大会影响 VoIP 和游戏。每个包延迟和前一个包延迟差的平均值
Datagrams (每秒数据包数):评估网络路由器和交换机的包转发性能。
Lost/Total Datagrams (丢包率):这是小包测试最重要的指标之一。高丢包率表明网络拥塞或设备处理小包的能力不足。
-l
决定了每个包裹里装了多少货物(字节)。
由于以太网有默认的 MTU (最大传输单元,通常是 1500 字节) 限制,当:
-l
小于 1500 (如64
或512
):用于模拟 VoIP 或游戏等大量小事务,测试网络的每秒事务处理能力和延迟抖动。-l
大于 1500 (如4K
):强制 IP 层对数据包进行分片 (Fragmentation)。这是在测试网络设备(路由器、防火墙)处理分片的能力,分片过多通常会导致丢包率上升。
案例:一个基本都iperf3 项目测试
基础概念:TCP 窗口
TCP 窗口(Window Size):TCP 协议用来控制“发送方一次可以发送多少未确认的数据”的机制。
- 发送窗口(Send Window):发送端能发送但未收到确认的数据量。
- 接收窗口(Receive Window):接收端能接收但尚未处理的数据量。
- 窗口越大,高带宽高延迟链路(例如长距离光纤或卫星链路)的吞吐就越高;窗口太小,会造成链路空闲,吞吐无法充分利用。
BDP 理论
BDP(Bandwidth-Delay Product,带宽-延迟积)公式:
BDP=带宽(bps)×往返延迟RTT(秒)
- 意义:为了充分利用链路带宽,TCP窗口大小应该至少等于 BDP。
示例:
- 链路带宽:1 Gbps
- RTT:50 ms
BDP=1G×0.05s=6.25 MB
→ TCP窗口至少 6.25 MB 才能满载链路。
iperf3 中的窗口调优
- 选项:
-w <窗口大小>
- 同时会设置发送/接收缓冲区,影响 TCP 最大窗口。
- Linux 特性:指定的窗口值在内核上会自动放大(TCP window scaling),实际最大窗口约为指定值的 2 倍。
示例命令:
iperf3 -c 192.168.1.1 -w 6M -t 30
意思:根据链路 BDP(6MB)调整 TCP 窗口,观察吞吐提升效果。调优效果
- 小窗口 < BDP → 吞吐不足,链路利用率低
- 窗口 ≈ BDP → 链路带宽充分利用
- 窗口 >> BDP → 不一定再提升吞吐,但增加内存占用
核心思想:窗口调优就是匹配 TCP 窗口和链路 BDP,使链路带宽被充分利用。
中文总结:
TCP 窗口调优(BDP匹配)就是根据链路的带宽和往返延迟计算出最佳的 TCP 窗口大小,保证数据在网络中持续流动而不被限制,从而实现最大吞吐。
- 窗口太小 → 链路利用率低
- 窗口匹配 BDP → 最佳吞吐
- 窗口过大 → 内存浪费但吞吐提升有限
测试类型 | 参数 | 时间 | 说明 |
---|---|---|---|
TCP 单流基线 | iperf3 -c <server> -t 30 | 30s | 单条TCP连接,评估基础吞吐 |
TCP 并发流 | `iperf3 -c <server> -P 2 | 4 | 8 |
TCP 窗口调优 | iperf3 -c <server> -w <BDP> | 30s | 根据链路 BDP 调整窗口,验证吞吐提升 |
UDP 递增 | iperf3 -c <server> -u -b <10%,50%,80%,100%带宽> | 每步30s | 记录丢包率、延迟抖动,找到最大可承受UDP负载 |