目录
简介
什么是 Iperf3 ?
Iperf3
是一个网络带宽测试工具,Iperf3
可以报告带宽、延迟抖动和数据包丢失。利用 Iperf3
这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。
Iperf3
可在 Windows
、Mac OS
、Linux
、FreeBSD
等各种平台使用,是一个简单又实用的小工具。老苏之前用过 Windows
版本,但说实话仅限于最基本的应用,并没有深入过,今天也只是介绍安装而已。
Iperf3
采用了 C/S
(客户端/服务器端)架构模式,在使用 Iperf3
测试时,要同时在 Server
端与 Client
端都各执行一个程序,让它们互相传送报文进行测试。
使用iperf3,你可以调整与时序、缓冲区和协议(如TCP、UDP、SCTP)相关的几个参数。它对网络性能调优操作很方便,为了获得最大或相当改善的网络性能,你需要增加吞吐量以及网络接收个发送功能的延迟。但是在进行实际调整之前,你需要执行一些测试以收集整体网络性能统计信息,以指导你的调优过程。其结果包括以秒为单位的时间间隔,数据传输,带宽(传输速率),丢失和其他有用的网络性能参数,它主要用于协助调整特定路径上的TCP连接。
官方主页:https://iperf.fr/
说明文档:https://iperf.fr/iperf-doc.php
Github:https://github.com/esnet/iperf
TCP
- 测量网络带宽
- 报告MSS/MTU值的大小和观测值
- 支持TCP窗口值通过套接字缓冲
- 当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接
UDP
- 客户端可以创建指定带宽的UDP流
- 测量丢包
- 测量延迟
- 支持多播
- 当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows)
安装
sudo apt install iperf3
运行
iperf3 -s
实例
基础测试
实验环境:192.168.1.1 作为服务器端,192.168.1.2 作为客户端
服务器端和客户端都安装iperf3:
sudo apt install iperf3
然后服务端192.168.1.1 启动:
# iperf3 -s //会在主机端运行iPerf3,默认在5201端口同时监听UDP和TCP
或者指定端口
# iperf3 -s -p 4000 //当5201端口被占用的时候则指定端口为4000,同理客户端发送也需要指定端口
//输出如下
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
然后客户端192.168.1.2链接服务端192.168.1.1:
# iperf3 -c 192.168.1.1 //默认会去连接对端的5201端口,
默认的协议为TCP,发送10秒后,会停止,并报告收发二端(sender/client, receiver/server)的
网络收发包统计结果。
//输出如下:
root@host176d4a3069:~# iperf3 -c 192.168.1.1
Connecting to host 192.168.1.1, port 5201
[ 5] local 192.168.1.2 port 47118 connected to 192.168.1.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 115 MBytes 968 Mbits/sec 0 334 KBytes
[ 5] 1.00-2.00 sec 114 MBytes 959 Mbits/sec 0 311 KBytes
[ 5] 2.00-3.00 sec 114 MBytes 956 Mbits/sec 0 322 KBytes
[ 5] 3.00-4.00 sec 115 MBytes 961 Mbits/sec 0 308 KBytes
[ 5] 4.00-5.00 sec 113 MBytes 951 Mbits/sec 0 314 KBytes
[ 5] 5.00-6.00 sec 114 MBytes 960 Mbits/sec 0 308 KBytes
[ 5] 6.00-7.00 sec 113 MBytes 950 Mbits/sec 0 308 KBytes
[ 5] 7.00-8.00 sec 114 MBytes 960 Mbits/sec 0 311 KBytes
[ 5] 8.00-9.00 sec 113 MBytes 951 Mbits/sec 0 311 KBytes
[ 5] 9.00-10.00 sec 114 MBytes 960 Mbits/sec 0 311 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 958 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.11 GBytes 956 Mbits/sec receiver
iperf Done.
此时服务端显示如下:
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.2, port 47116
[ 5] local 192.168.1.1 port 5201 connected to 192.168.1.2 port 47118
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 114 MBytes 956 Mbits/sec
[ 5] 1.00-2.00 sec 114 MBytes 956 Mbits/sec
[ 5] 2.00-3.00 sec 114 MBytes 955 Mbits/sec
[ 5] 3.00-4.00 sec 114 MBytes 956 Mbits/sec
[ 5] 4.00-5.00 sec 114 MBytes 957 Mbits/sec
[ 5] 5.00-6.00 sec 114 MBytes 956 Mbits/sec
[ 5] 6.00-7.00 sec 113 MBytes 951 Mbits/sec
[ 5] 7.00-8.00 sec 114 MBytes 957 Mbits/sec
[ 5] 8.00-9.00 sec 114 MBytes 956 Mbits/sec
[ 5] 9.00-10.00 sec 114 MBytes 957 Mbits/sec
[ 5] 10.00-10.00 sec 260 KBytes 851 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.11 GBytes 956 Mbits/sec receiver
- Interval:输出结果的时间间隔
- Transfer:间隔时间内传输的总流量
- Bitrate:间隔时间内的最大吞吐量
- Retr: 重发包数
- Cwnd: 拥塞窗口排队数据量大小
- 分割线下方的数据为单位测试时间内单项数据的总和
网络测试吞吐量
如果我们想在Linux中实现先进的网络测试吞吐量,确定网络中给定时间内数据量的一个重要因素是TCP窗口大小,它在调整TCP连接时很重要,我们可以使用-w标志设置窗口大小、套接字缓冲区大小:
iperf3 -c 192.168.1.1 -w 200k
输出如下:
Connecting to host 192.168.1.1, port 5201
[ 5] local 192.168.1.2 port 47126 connected to 192.168.1.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 114 MBytes 957 Mbits/sec 0 339 KBytes
[ 5] 1.00-2.00 sec 114 MBytes 957 Mbits/sec 0 399 KBytes
[ 5] 2.00-3.00 sec 114 MBytes 956 Mbits/sec 0 311 KBytes
[ 5] 3.00-4.00 sec 114 MBytes 954 Mbits/sec 0 427 KBytes
[ 5] 4.00-5.00 sec 114 MBytes 956 Mbits/sec 0 311 KBytes
[ 5] 5.00-6.00 sec 114 MBytes 955 Mbits/sec 0 308 KBytes
[ 5] 6.00-7.00 sec 114 MBytes 956 Mbits/sec 0 317 KBytes
[ 5] 7.00-8.00 sec 114 MBytes 957 Mbits/sec 0 328 KBytes
[ 5] 8.00-9.00 sec 114 MBytes 952 Mbits/sec 0 314 KBytes
[ 5] 9.00-10.00 sec 114 MBytes 954 Mbits/sec 0 322 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec receiver
iperf Done.
反向模式
如果要在服务器发送和客户端接收的反向模式下运行,可以添加-R开关:
root@ser914584585168:~# iperf3 -c 192.168.1.1 -w 200k -R
Connecting to host 192.168.1.1, port 5201
Reverse mode, remote host 192.168.1.1 is sending
[ 5] local 192.168.1.2 port 47130 connected to 192.168.1.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 114 MBytes 955 Mbits/sec
[ 5] 1.00-2.00 sec 114 MBytes 955 Mbits/sec
[ 5] 2.00-3.00 sec 114 MBytes 954 Mbits/sec
[ 5] 3.00-4.00 sec 114 MBytes 954 Mbits/sec
[ 5] 4.00-5.00 sec 114 MBytes 955 Mbits/sec
[ 5] 5.00-6.00 sec 114 MBytes 956 Mbits/sec
[ 5] 6.00-7.00 sec 114 MBytes 952 Mbits/sec
[ 5] 7.00-8.00 sec 114 MBytes 956 Mbits/sec
[ 5] 8.00-9.00 sec 114 MBytes 956 Mbits/sec
[ 5] 9.00-10.00 sec 114 MBytes 956 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec 88 sender
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec receiver
iperf Done.
双向测试
如果要运行双向测试,意味着我们要同时测量两个方向上的宽带,可以使用-d选项:
iperf3 -c 120.233.73.121 -w 200k -d
输出如下:
interval_len 1.000004 bytes_transferred 119047320
interval forces keep
[ 5] 9.00-10.00 sec 114 MBytes 952 Mbits/sec 0 311 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 952 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.11 GBytes 952 Mbits/sec receiver
双向结果显示
如果要在客户端输出中获取服务器结果,可以使用“–get-server-output”选项,此时我们便会在客户端192.168.1.2 主机上获取两份数据:
root@ser914584585168:~# iperf3 -c 192.168.1.1 -w 200k -R --get-server-output
Connecting to host 192.168.1.1, port 5201
Reverse mode, remote host 192.168.1.1 is sending
[ 5] local 192.168.1.2 port 47158 connected to 192.168.1.1 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 114 MBytes 956 Mbits/sec
[ 5] 1.00-2.00 sec 113 MBytes 950 Mbits/sec
[ 5] 2.00-3.00 sec 114 MBytes 956 Mbits/sec
[ 5] 3.00-4.00 sec 114 MBytes 956 Mbits/sec
[ 5] 4.00-5.00 sec 114 MBytes 956 Mbits/sec
[ 5] 5.00-6.00 sec 114 MBytes 956 Mbits/sec
[ 5] 6.00-7.00 sec 114 MBytes 956 Mbits/sec
[ 5] 7.00-8.00 sec 114 MBytes 956 Mbits/sec
[ 5] 8.00-9.00 sec 114 MBytes 956 Mbits/sec
[ 5] 9.00-10.00 sec 114 MBytes 956 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec 45 sender
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec receiver
Server output:
Accepted connection from 192.168.1.2, port 47156
[ 5] local 192.168.1.1 port 5201 connected to 192.168.1.2 port 47158
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 114 MBytes 959 Mbits/sec 0 201 KBytes
[ 5] 1.00-2.00 sec 113 MBytes 949 Mbits/sec 0 201 KBytes
[ 5] 2.00-3.00 sec 114 MBytes 956 Mbits/sec 0 201 KBytes
[ 5] 3.00-4.00 sec 114 MBytes 956 Mbits/sec 0 201 KBytes
[ 5] 4.00-5.00 sec 114 MBytes 955 Mbits/sec 0 201 KBytes
[ 5] 5.00-6.00 sec 114 MBytes 956 Mbits/sec 45 212 KBytes
[ 5] 6.00-7.00 sec 114 MBytes 956 Mbits/sec 0 212 KBytes
[ 5] 7.00-8.00 sec 114 MBytes 956 Mbits/sec 0 212 KBytes
[ 5] 8.00-9.00 sec 114 MBytes 956 Mbits/sec 0 212 KBytes
[ 5] 9.00-10.00 sec 114 MBytes 956 Mbits/sec 0 212 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec 45 sender
iperf Done.
并行客户端
也可以使用-P选项设置并行客户端流的数量,它们同时运行:
root@ser914584585168:~# iperf3 -c 192.168.1.1 -w 200k -P 2
Connecting to host 120.233.73.121, port 5201
[ 5] local 192.168.1.2 port 47168 connected to 192.168.1.1 port 5201
[ 7] local 192.168.1.2 port 47170 connected to 192.168.1.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 57.5 MBytes 483 Mbits/sec 0 246 KBytes
[ 7] 0.00-1.00 sec 57.0 MBytes 478 Mbits/sec 0 277 KBytes
[SUM] 0.00-1.00 sec 114 MBytes 960 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 1.00-2.00 sec 57.2 MBytes 480 Mbits/sec 0 334 KBytes
[ 7] 1.00-2.00 sec 56.7 MBytes 475 Mbits/sec 0 314 KBytes
[SUM] 1.00-2.00 sec 114 MBytes 955 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 2.00-3.00 sec 57.0 MBytes 479 Mbits/sec 0 297 KBytes
[ 7] 2.00-3.00 sec 56.9 MBytes 478 Mbits/sec 0 252 KBytes
[SUM] 2.00-3.00 sec 114 MBytes 956 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 3.00-4.00 sec 57.0 MBytes 478 Mbits/sec 0 305 KBytes
[ 7] 3.00-4.00 sec 57.2 MBytes 479 Mbits/sec 0 286 KBytes
[SUM] 3.00-4.00 sec 114 MBytes 957 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 4.00-5.00 sec 57.2 MBytes 480 Mbits/sec 0 305 KBytes
[ 7] 4.00-5.00 sec 56.7 MBytes 475 Mbits/sec 0 297 KBytes
[SUM] 4.00-5.00 sec 114 MBytes 955 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 5.00-6.00 sec 57.1 MBytes 479 Mbits/sec 0 288 KBytes
[ 7] 5.00-6.00 sec 56.9 MBytes 478 Mbits/sec 0 232 KBytes
[SUM] 5.00-6.00 sec 114 MBytes 957 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 6.00-7.00 sec 57.0 MBytes 478 Mbits/sec 0 294 KBytes
[ 7] 6.00-7.00 sec 56.8 MBytes 477 Mbits/sec 0 294 KBytes
[SUM] 6.00-7.00 sec 114 MBytes 955 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 7.00-8.00 sec 56.7 MBytes 476 Mbits/sec 0 308 KBytes
[ 7] 7.00-8.00 sec 56.7 MBytes 476 Mbits/sec 0 294 KBytes
[SUM] 7.00-8.00 sec 113 MBytes 952 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 8.00-9.00 sec 57.1 MBytes 479 Mbits/sec 0 283 KBytes
[ 7] 8.00-9.00 sec 56.9 MBytes 477 Mbits/sec 0 294 KBytes
[SUM] 8.00-9.00 sec 114 MBytes 956 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 5] 9.00-10.00 sec 57.0 MBytes 479 Mbits/sec 0 5.66 KBytes
[ 7] 9.00-10.00 sec 57.0 MBytes 479 Mbits/sec 0 5.66 KBytes
[SUM] 9.00-10.00 sec 114 MBytes 957 Mbits/sec 0
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 571 MBytes 479 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 571 MBytes 479 Mbits/sec receiver
[ 7] 0.00-10.00 sec 569 MBytes 477 Mbits/sec 0 sender
[ 7] 0.00-10.00 sec 568 MBytes 477 Mbits/sec receiver
[SUM] 0.00-10.00 sec 1.11 GBytes 956 Mbits/sec 0 sender
[SUM] 0.00-10.00 sec 1.11 GBytes 955 Mbits/sec receiver
iperf Done.
测试TCP吞吐量
先让 192.168.1.1 做server端,开启iperf服务器模式,指定TCP端口1314:
iperf3 -s -i 1 -p 1314
然后打开 192.168.1.2 做client端,连接 192.168.1.1 服务器端1314端口:
iperf3 -c 192.168.1.1 -i 1 -t 60 -p 1314
经过60秒后, 192.168.1.2 client端得到结果如下:
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.99 GBytes 1.00 Gbits/sec 704 sender
[ 5] 0.00-60.07 sec 6.99 GBytes 1000 Mbits/sec receiver
192.168.1.2 server端监听1314端口得到的结果如下:
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-60.07 sec 6.99 GBytes 1000 Mbits/sec receiver
-----------------------------------------------------------
其中:
- Interval表示时间间隔。
- Transfer表示时间间隔里面转输的数据量。
- Bitrate是时间间隔里的传输速率。
测试UDP吞吐量
192.168.1.1 server端开启iperf的服务器模式:
iperf3 -s -i 1 -p 1315 //注意端口 当前端口为1315,服务端和客户端需要对应
192.168.1.2 client端启动iperf的客户端模式,连接服务器端:
iperf3 -u -c 192.168.1.1 -b 100m -t 60 -p 1315 //意端口 当前端口为1315,服务端和客户端需要对应
192.168.1.2 client 模式测得到数据如下:
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.00 sec 715 MBytes 100 Mbits/sec 0.000 ms 0/517950 (0%) sender
[ 5] 0.00-60.04 sec 715 MBytes 99.9 Mbits/sec 0.021 ms 0/517950 (0%) receiver
192.168.1.1 server端 模式测得到数据如下:
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.04 sec 715 MBytes 99.9 Mbits/sec 0.021 ms 0/517950 (0%) receiver
-----------------------------------------------------------
- jitter 为抖动
- lost/total 为丢包数量
- Datagrams 为包数量
进行上下行带宽测试(TCP双向传输)
# iperf3 -c 192.168.1.1 -d -t 60 -p 1315 //意端口 当前端口为1315,服务端和客户端需要对应
//输出如下
[ 5] 59.00-60.00 sec 119 MBytes 996 Mbits/sec 0 3.10 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.99 GBytes 1.00 Gbits/sec 1170 sender
[ 5] 0.00-60.06 sec 6.99 GBytes 999 Mbits/sec receiver
测试上下行带宽(UDP双向传输)
iperf3 -u -c 192.168.1.1 -b 100M -d -t 60 -p 1315 //意端口 当前端口为1315,服务端和客户端需要对应
//输出参数如下
[ 5] 59.00-60.00 sec 11.9 MBytes 100 Mbits/sec 8634
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-60.00 sec 715 MBytes 100 Mbits/sec 0.000 ms 0/517951 (0%) sender
[ 5] 0.00-60.04 sec 715 MBytes 99.9 Mbits/sec 0.025 ms 13/517951 (0.0025%) receiver
测试多线程TCP吞吐量
如果没有指定发送方式,iPerf客户端只会使用单线程。
iperf3 -c 192.168.1.1 -P 30 -t 60 -p 1315
测试多线程UDP吞吐量
如果没有指定发送方式,iPerf客户端只会使用单线程。
iperf3 -u -c 192.168.1.1 -b 5M -P 30 -t 60
具体参数
服务端
iperf3 -s [options] #使用-s标志的是服务器,默认使用5201端口
[options] | 含义描述 |
-f 例:-f K |
指定生成报告的数据格式类型(其中k表示Kbits、m表示Mbits、g表示Gbits、K表示KBytes、M表示MBytes、G表示GBytes) |
-p 例:-p 4000 |
指定其他端口监听(例如指定4000端口) |
-D 例:-D > iperf3.log |
作为守护程序运行,并将服务器消息写入日志文件 |
客户端
iperf3 -c 192.168.1.1 [options] #使用-c标志以客户端运行,192.168.1.1表示服务器IP
[options] | 含义描述 |
-f [k|m|g|K|M|G] 例:-f K |
指定生成报告的数据格式类型(其中k表示Kbits、m表示Mbits、g表示Gbits、K表示KBytes、M表示MBytes、G表示GBytes) |
-w 例:-w 200K |
使用-w标志设置TCP窗口大小、套接字缓冲区大小 |
-R | 在服务器发送和客户端接收的反向模式下运行,可以添加-R开关。 |
-d | 运行双向测试,意味着我们要同时测量两个方向上的宽带,可以使用-d选项。 |
–get-server-output | 如果要在客户端输出中获取服务器结果,可以使用“–get-server-output”选项,此时我们便会在客户端上获取两份数据。 |
-P 例:-P 5 |
使用-P选项设置并行客户端测试进程的数量,如果设置为5,那么也就相当与对端建立五个连接 |
-i 例:-i 3 |
设置每次报告之间的时间间隔,单位为秒。如果设置为非零值,就会按照此时间间隔输出测试报告。默认值为零。 |
-m | 输出TCP MSS值(通过TCP_MAXSEG支持)。MSS值一般比MTU值小40字节。(通常情况) |
-u | 使用UDP方式,不加这个参数默认是TCP模式 |
-b [K|M|G] 例:-b 50M |
UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。 |
-t 例:-t 60 |
设置传输的总时间。Iperf在指定的时间内,重复的发送指定长度的数据包。默认是10秒钟。 在指定“-n”参数后,“-t”参数失效 |
-p 例:-p 5200 |
指定服务器监听端口(例如服务器指定端口为5200) |
-n [K|M|G] 例:-n 100M |
指定传输数据包的字节数 在指定“-n”参数后,“-t”参数失效 |
-I | 指定读写缓冲区的长度。TCP方式默认大小为8KB,UDP方式默认大小为1470字节 |