1. iperf能够做什么
提起iperf,想必大家都知道它是用了测试网络性能的。具体说来,Iperf 是美国伊利诺斯大学(University of Illinois)开发的一种开源的网络性能测试工具。可以用来测试网络节点间(也包括回环)TCP或UDP连接的性能,包括带宽、抖动以及丢包率,其中抖动和丢包率适应于UDP测试,而带宽测试适应于TCP和UDP。
这里需要特别提出的是,iperf不能够用来测试时延,想一想这是为什么。
2.
网络性能参数
以上提到了网络的主要性能参数包括带宽,时延,抖动和丢包率,这些用一个名词代替,就是QOS(服务质量)。
图中D1,D2分别表示包A和包B的时延。
抖动 = |D2-D1|
对于时延,iperf无能为力。但是iperf能够计算抖动,想想这又是为什么。
我们知道,在iperf中,我们测试时需要发送大量的包,因此计算出来的抖动值就是连续发送时延差值的平均值
3.
安装
iperf
在Unix 系统下,安装iperf最方便的方法是直接下载rpm包,使用rpm指定安装即可。
当然也可以直接去sourceforge上下载源代码,使用如下命令安装即可。
#./configure
#make
#make install
前提是该机器上已经有C++编译器和make等程序。安装完成之后,可以进行一个简单的回环测试iperf是否安装成功。
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 35589
[ ID] Interval
Transfer Bandwidth
[ 4] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec
$ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 49.5 KByte (default)
------------------------------------------------------------
[ 3] local 127.0.0.1 port 35589 connected with 127.0.0.1 port 5001
[ ID] Interval
Transfer Bandwidth
[ 3] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec
4.
iperf
主要参数
iperf中的可选参数比较多,具体可以参见其用户手册。
http://webfolder.wirelessleiden.nl/iperf/
一般来说,我们在做性能测试的时候需要指定包长,不同的包长会得到不同的吞吐量。通过-l 指定,而使用-b指定带宽。
5.
测试吞吐量,抖动和丢包率
如何需要同时测试以上三个参数,那么只能通过UDP获得。使用-u 参数进行UDP测试(默认为TCP)。
在测试的最后server端会给出一个报告。
[ 3] local 192.168.1.1 port 2152 connected with 192.168.101.2 port 56768
[ ID] Interval
Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 1.40 MBytes 11.7 Mbits/sec
0.069 ms 0/14671 (0%)
[ 3] 1.0- 2.0 sec 1.40 MBytes 11.8 Mbits/sec
0.050 ms 0/14703 (0%)
[ 3] 2.0- 3.0 sec 1.40 MBytes 11.8 Mbits/sec
0.052 ms 0/14708 (0%)
[ 3] 3.0- 4.0 sec 1.40 MBytes 11.8 Mbits/sec
0.057 ms 0/14704 (0%)
[ 3] 4.0- 5.0 sec 1.40 MBytes 11.8 Mbits/sec
0.072 ms 0/14706 (0%)
[ 3] 5.0- 6.0 sec 1.40 MBytes 11.8 Mbits/sec
0.075 ms 0/14705 (0%)
[ 3] 6.0- 7.0 sec 1.40 MBytes 11.8 Mbits/sec
0.060 ms 0/14707 (0%)
[ 3] 7.0- 8.0 sec 1.40 MBytes 11.8 Mbits/sec
0.073 ms 0/14703 (0%)
[ 3] 8.0- 9.0 sec 1.40 MBytes 11.8 Mbits/sec
0.073 ms 0/14706 (0%)
[ 3] 0.0-10.0 sec 14.0 MBytes 11.8 Mbits/sec
0.064 ms 0/147020 (0%)
要获得带宽数据,需要不断在client端增加带宽值,直到server端出现轻微的丢包为止,此时server端显示的带宽就是被测系统的吞吐量。
6.
测试时延
那么有朋友会问,iperf不能用来测试延时,而时延又是比较重要的QOS参数,有什么办法吗?
其实最简单的办法就是使用Ping程序。我们经常用它来测试特定 主机能否通过 IP到达,
程序会按时间和反应成功的次数,估计丢包率和 分组来回时间(即网络时延)。
当然,如果我们能成功构造一个回环测试路径,那么测试时延就轻而易举了,可以利用tcpdump抓包工具,对得到的包利用wireshark分析就可以得出包来回时间(RTT时间)。
7.
使用
TCP
测试带宽应注意的问题
有时候,我们需要使用TCP来测试网络带宽。有一个参数需要特别注意,那就是TCP窗口大小,可以使用-w参数指定。
网络通道的容量 capacity = bandwidth * round-trip time
而理论TCP窗口的大小就是网络通道的容量。
比如,网络带宽为40Mbit/s, 回环路径消耗时间是2ms,那么TCP的窗口大小不小于 40Mbit/s×2ms = 80kbit = 10Kbytes
此时我们可以查询iperf默认的TCP窗口大小来决定是否需要设置此参数。