简介

什么是 Iperf3 ?

Iperf3 是一个网络带宽测试工具,Iperf3 可以报告带宽、延迟抖动和数据包丢失。利用 Iperf3 这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。

Iperf3 可在 WindowsMac OSLinuxFreeBSD 等各种平台使用,是一个简单又实用的小工具。老苏之前用过 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字节