iperf是另外一款用于流量测试的软件,主要运行于Windows系统和安卓系统的手机/PAD(IOS系统下载需要收费)。
一个工作在Server模式,另外一个工作在Client模式,输入Server的测试ip地址就可以测试从Client到Server方向的流量,测试时通过改变设备的工作模式,来完成上下行的流量测试。
1.iperf安装
1.1下载地址:https://iperf.fr/iperf-download.php
1.2 linux环境安装,使用命令安装
#gunzip –c iperf-
#cd iperf-
#./configure
#make
#make install
1.3 windows环境使用,直接将解压出来的iperf.exe和cygwin1.dll复制到%systemroot%目录(根目录)即可,还要进入iperf当前文件夹敲命令。
2. Iperf主要功能
2.1.TCP
测量网络带宽
报告MSS/MTU值的大小和观测值
支持TCP窗口值通过套接字缓冲
当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接
2.2.UDP
客户端可以创建指定带宽的UDP流
测量丢包
测量延迟
支持多播
当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows)
2.3.其他
在适当的地方,选项中可以使用K(kilo-)和M(mega-)。例如131072字节可以用128K代替。
可以指定运行的总时间,甚至可以设置传输的数据总量。
在报告中,为数据选用最合适的单位。
服务器支持多重连接,而不是等待一个单线程测试。
在指定时间间隔重复显示网络带宽,波动和丢包情况。
服务器端可作为后台程序运行。
服务器端可作为Windows 服务运行。
使用典型数据流来测试链接层压缩对于可用带宽的影响。
支持传送指定文件,可以定性和定量测试。
2.4参数介绍
备注:参数区分大小写
3.网络带宽测试
使用iperf3测试时,要同时在server端与client端都各执行一个程序,让它们互相传送报文进行测试。发包测试需要分为UDP测试与TCP测试,其中服务端需要用-u命令去区分监听协议。TCP协议测试不能计算出时延与丢包率,而且还不能指定发送带宽。
3.1测试单线程TCP传输速度
服务器启动:iperf3 –s –p 54321 -i 1
启动客户端输入:iperf3–c 10.101.70.247 –p 54321–i 1 –t 10 –w 10K
-c:客户端模式,后接服务器ip
-p:后接服务端监听的端口
-i:设置带宽报告的时间间隔,单位为秒
-t:设置测试的时长,单位为秒
-w:设置tcp窗口大小,一般可以不用设置,默认即可
Interval表示时间间隔。Transfer表示时间间隔里面转输的数据量。Bandwidth是时间间隔里的传输速率。最后一行是本次测试的统计。测试可知带宽平均为74.0Mbit/sec。
参数说明:-t改变运行的时间,-i改变输出频率
(网络速度单位换算https://wenku.baidu.com/view/bab6102dbd64783e09122b1d.html)
3.2测试多线程TCP传输速度
启动客户端输入:iperf3–c 10.101.70.247–i 1 –t 5 –P 3
参数说明:-P参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量;-n指定要发送的数据量。使用-n参数后,-t参数失效,传输完指定大小的数据包后,自动结束。
通过-P参数开启了3个线程,从传输时间上看,传输10M的数据,消耗时间为1.07秒,比之前单线程的传输时间少了一点点,在平均带宽速率上,从之前单线程的73.4Mbits/sec提高到73.4Mbits/sec,从这个结果可以看出,多线程对网络传输性能有提高。
3.3测试单线程UDP传输速度
服务器启动:iperf3 -s -i 1
启动客户端输入:iperf3 –c 10.101.70.247 -i 1 -t 5 -u –b 50M
-c:客户端模式,后接服务器ip
-p:后接服务端监听的端口
-i:设置带宽报告的时间间隔,单位为秒
-t:设置测试的时长,单位为秒
-b:设置udp的发送带宽,单位bit/s
-u : 设置UDP
要获得带宽数据,需要通过-b不断在client端增加带宽值,直到server端出现轻微的丢包为止,此时server端显示的带宽就是被测系统的吞吐量。
Interval表示时间间隔。Transfer表示时间间隔里面转输的数据量。Bandwidth是时间间隔里的传输速率。Jitter为抖动,lost/total为丢包数量,Datagrams为包数量。
3.4测试多线程UDP传输速度
启动客户端输入:iperf3 -c 10.101.70.247 –p 54321 -i 1 -t 4 -u -P 3 –b 30M
4. 测试UDP丢包和延迟
iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过-u参数即可测试UDP应用的传输性能。
l Iperf测试UDP性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户端提供的速率计算数据报发送之间的时延。
l 客户端还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来唯一标识报文,服务器端根据该ID号来确定数据报丢失和乱序。
l 当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据,这提供了一个有效的测试包丢失情况的方法。
l 数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步
启动客户端输入:iperf3 -c 10.101.70.247 -u -b 100M –n 2G
Jitter列表示抖动时间,或者称为传输延迟,Lost/Total列表示丢失的数据报和总的数据报数量,后面的80%是平均丢包的比率,Datagrams列显示的是总共传输数据报的数量。
5.Iperf工作原理
Iperf主要的功能是测试基于特定路径的TCP连接的性能,我们知道TCP连接调整最基本的措施是调整TCP窗口的大小,窗口大小控制在任何节点网络中可以存在的数据大小。如果该值太小,发送者将会在某段时间处于空闲状态,从而影响发送的性能。TCP窗口大小的理论值为链路瓶颈带宽与往返时延的乘积:
TCP_Window=Bottleneck_Bandwidth*Round_Trip_Time
例如链路瓶颈带宽为45Mbps,往返时延为42ms(可以通过ping来测试),那么窗口的理论值为:
45Mbps*42ms=(45*e6)*(42*e-3)=1890000 bits=230KByte
调节窗口大小即可以理论值为基准,在该值上慢慢增大或减少,即可获得最好的结果。
Iperf测试TCP带宽的原理较简单,即在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报,并记下发送的时间, 或者客户端在一定的时间内发送数据,并记下发送的总数据。带宽的大小等于发送的总数据除以发送的总时间。对服务器端来说,就是在连接建立时间内,接收的总数据除以所花时间即为服务器端所测得的带宽。MSS的大小通过TCP内核接口函数直接获得。
Iperf测试UDP的性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户提供的速率计算数据报发送之间的时延。另外客户还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来惟一地标识该报文。服务器端则根据该ID号来确定数据报丢失和乱序。当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据。这提供了一个有效的测试包丢失情况的方法。数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步。
参数说明
-s 以server模式启动,eg:iperf –s 。Server端为数据的接收端。
-c host以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23 。Client端为数据的发出端。
通用参数
-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,eg:iperf -c 222.35.11.23 -f K
-i sec 以秒为单位显示报告间隔,eg:iperf -c 222.35.11.23 -i 2
-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16
-m 显示tcp最大mtu值
-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o ciperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp协议
-w 指定TCP窗口大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包
server专用参数
-D 以服务方式运行ipserf,eg:iperf -s -D
-R 停止iperf服务,针对-D,eg:iperf -s -R
client端专用参数
-d 同时进行双向传输测试
-n 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000
-r 单独进行双向传输测试
-t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5
-F 指定需要传输的文件
-T 指定ttl值
实例:
使用 iperf -s 命令将 Iperf 启动为 server 模式,在客户机上使用 iperf -c启动client模式。
iperf -c 59.125.103.56 -f K -i 2 -w 300K
设定报告间隔为2秒,服务器端和客户端的TCP窗口都开到300KB
iperf -c 59.125.103.56 -f K -i 2 -w 300K –n 1000000
测试传输约1MB数据
iperf -c 59.125.103.56 -f K -i 2 -w 300K –t 36
测试持续36秒
iperf -c 59.125.103.56 -f K -i 2 -w 300K -n 10400000 –d
测试双向的传输
iperf -c 59.125.103.56 -f K -i 2 -w 300K –u
UDP测试
其中 -i 参数的含义是周期性报告的时间间隔(interval),单位为秒;在上面的例子中,表示每隔2秒报告一次带宽等信息。