使用iperf测试网络性能

iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动、丢包率、最大段和最大传输单元大小等统计信息;从而能够帮助我们测试网络性能,定位网络瓶颈。iperf是开源的,源代码可以从http://sourceforge.net/projects/iperf/下载。

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

iperf测试案例介绍

4.    iperf主要参数

iperf中的可选参数比较多,具体可以参见其用户手册。

http://webfolder.wirelessleiden.nl/iperf/

一般来说,我们在做性能测试的时候需要指定包长,不同的包长会得到不同的吞吐量,通过-l指定,而使用-b指定带宽。

5.    测试吞吐量,抖动和丢包率

如何需要同时测试以上三个参数,那么只能通过UDP获得。使用-u参数进行UDP测试(iperf默认为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到达,

程序会按时间和反应成功的次数,估计丢包率和分组来回时间(即网络时延)。

当然,如果我们能成功构造一个回环测试路径,那么测试时延就轻而易举了,我们可以使用iperf发送数据,同时结合tcpdump抓包工具,经过wireshark分析.cap文件就可以得出包来回时间,也就是往返时延。

7.    使用TCP测试带宽应注意的问题

有时候,我们需要使用TCP来测试网络带宽。这里有一个参数需要特别注意,那就是TCP窗口大小,可以使用-w参数指定。

网络通道的容量capacity = bandwidth * round-trip time

而理论TCP窗口的大小就是网络通道的容量。

比如,网络带宽为40Mbit/s,回环路径消耗时间是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes

此时我们可以查询iperf默认的TCP窗口大小来决定是否需要设置此参数,在此例中,窗口大小应设计大于10Kbytes,当然,这仅仅是理论值,在实际测试中可能需要作出调整。

参数说明
-s 以server模式启动,eg:iperf -s
-c 以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23

通用参数
-f [k|m|K|M] 分别表示以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

iperf是client端向server端发送数据

server端显示的是接收速率,最好加i参数,进行速率跟踪

client 显示的是发送速率

server 显示接收速率
-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16

可以使用不同的包长,进行测试
-m 显示tcp最大mtu值
-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o c:iperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

-u 使用udp协议

测试htb的时候最好用udp,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 单独进行双向传输测试

-b 指定发送带宽,默认是1Mbit/s

在测试qos的时候,这是最有用的参数。
-t 测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5

默认是10s

-F 指定需要传输的文件
-T 指定ttl值

测试实例:

使用:

此软件需要安装到两端需要互测的机器上,然后一段作为服务端监听,一端作为客户端连接。具体命令可以iperf -h 查看下。

服务端:
iperf -s -u
-s 标记此端为服务端
-u标记自己为UDP监听
-p 指定自己监听端口

客户端:
iperf -c 1.1.1.1 -i 1 -u -t 60 -F /root/a.zip -P 5
-c标记自己为客户端
-i 设定输出值间隔
-u使用传输协议为UDP
-t 设定测试时间为60秒
-F 指定传输文件(该项可有可无)
-P 指定进程数,如果设置为5,那么也就相当与对端建立五个连接

注意事项:
1.发包测试需要分为UDP测试与TCP测试,其中服务端需要用-u命令去区分监听协议。
2.TCP协议测试不能计算出时延与丢包率,而且还不能指定发送带宽。

案例:
[root@localhost ~]# iperf -c 192.168.1.100 -u -i 1 -t 10 -b 2M #指定2M带宽向对端发送数据
------------------------------------------------------------
Client connecting to 192.168.1.100, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 108 KByte (default)
------------------------------------------------------------
[ 3] local 192.200.40.112 port 32784 connected with 218.60.1.20 port 5001 #与对端连接上的信息
[ ID] Interval Transfer Bandwidth #输出行的解释
[ 3] 0.0- 1.0 sec 12.0 GBytes 103 Gbits/sec
[ 3] 1.0- 2.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 2.0- 3.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 3.0- 4.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 4.0- 5.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 5.0- 6.0 sec 245 KBytes 2.01 Mbits/sec
[ 3] 6.0- 7.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 7.0- 8.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 8.0- 9.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 9.0-10.0 sec 244 KBytes 2.00 Mbits/sec
[ 3] 0.0-10.0 sec 12.0 GBytes 10.3 Gbits/sec
[ 3] Sent 1702 datagrams
[ 3] Server Report: #输出报告
[ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.313 ms 1518/ 1701 (89%) #间距 ,传输总字节,速率,时延,丢包率。
[ 3] 0.0-10.6 sec 1 datagrams received out-of-order  #乱序

服务端:
[root@localhost ~]# iperf -s -u #设定此端为服务端
------------------------------------------------------------ #本段设置信息
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 108 KByte (default)
------------------------------------------------------------
[ 3] local 218.60.1.20 port 5001 connected with 218.241.145.36 port 32784 #如果对端连接上了本端才会出现该信息
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.314 ms 1518/ 1701 (89%)
[ 3] 0.0-10.6 sec 1 datagrams received out-of-order

iPerf同样也可以用于测量UDP数据包吞吐量、丢包和延迟指标。与TCP测试不同的是,UDP测试不采取尽可能快地发送流量的方式。与之相对的是,iPerf尝试发送1 Mbps的流量,这个流量是打包在1470字节的UDP数据包中(成为以太网的一帧)。我们可以通过指定一个目标带宽参数来增加数据量,单位可以是Kbps 或Mbps(-b #K 或 --b #M)。举例如下:

然而,上面的例子只说明了iPerf客户端能够以多快的速度传输数据。为了得到更多关于UDP发送的数据,我们必须查看服务器上的结果:

这样,我们就可以看到吞吐量(间隔1秒测量的),以及丢包数(丢失的数据屯接收到的数据对比)和延迟(如jitter——在连续传输中的平滑平均值差)。延迟和丢失可以通过应用的改变而被兼容。比如,视频流媒体通过缓冲输入而能够容忍更多的延迟,而语音通讯则随着延迟增长性能下降明显。

UDP测试可以通过改变报文缓冲长度进行优化,长度单位为Kbytes 或 Mbytes(-l #K or #M)。与以太网帧的1500比特的MTU(最大转换单位)不同的是,802.11数据帧可以达到2304比特(在加密之前)。

但是,如果你正在测试的路径中包括Ethernet和802.11,那么要控制你的测试数据包长度,使它在一个Ethernet帧以内,以避免分片。

另一个有趣的iPerf UDP测试选项是服务类型(Type of Service, ToS),它的大小范围从0x10 (最小延迟) 到0x2 (最少费用)。在使用802.11e来控制服务质量的WLAN中,ToS是映射在Wi-Fi多媒体(WMM)存取范畴的。

对比两种方式

在802.11a/b/g网络中,无线电的传输性能变化在在两个方向上都很相似。比如,当距离导致数据传输率下降或干扰造成重要数据包丢失时,发送和接收的应用吞吐量都受到影响。
 
在802.11n网络中,MIMO天线和多维空间流使问题又有所不同。从笔记本发送到AP上的数据帧可能(有意地)使用一个完全与从AP发送到笔记本上帧时不同的空间路径。这样的结果是,现在对两个方向的测试都很重要的。幸运的是,iPerf本身就已经拥有这个功能,这是由两个选项所控制的:

--d选项是用于告诉iPerf服务器马上连接回iPerf客户端的由--L 所指定端口,以支持同时测试两个方向的传输。

--r选项虽然有些类似,但是它是告诉iPerf服务器等到客户端测试完成后再在相反的方向中重复之前的测试。

最后,如果你需要支持多点传送应用,那么可以使用-B选项指定多点传送组IP地址来启动多个iPerf服务器。然后再打开你的iPerf客户端,连接之前启动的多点传送组iPerf服务器。

使用测试工具iPerf监控无线网络性能:图形化测试结果

如本文介绍的,iPerf程序可以在命令行下运行,它或者也在一个名为JPerf的Java实现前端工具上运行。JPerf不仅能简化复杂命令行参数的构造,而且它还保存测试结果——同时实时图形化显示结果。

图1 使用JPerf运行iPerf

事实上,iPerf测试工具被嵌入到一些其它的网络流量分析工具中——包括底层LAN分析工具,如AirMagnet。比如,在下面的屏幕截图中显示了一个Wi-Fi笔记本上运行的AirMagnet作为iPerf客户端与安装在有线网络上的常规iPerf服务器进行交互的情况。

图2 使用AirMagnet运行iPerf

总结

正如我们所看到的,iPerf简化了对基于TCP数据流应用和UDP数据包应用的端对端性能测定。然而,iPerf仍然无法模拟所有类型的应用——比如,对于交互式上网的模拟就不是很好。同时,用于iPerf Wi-Fi测试的WLAN适配器也会影响你的测试——为了获得更好的测试结果,我们可以配置一个类似于“实际”用户的有代表性的适配器。

尽管如此,iPerf仍然是一个非常方便的工具,它可以帮助你生成和检测WLAN应用流量。同时,因为iPerf可以方便以开源软件方式获取,因此使用它来在其它位置重复创建测试环境是一个很好的方法——如分公司、供应商技术支持等等。想要了解更多关于iPerf的信息,可以阅读NLANR上的更老的文件或者浏览SourceForge上新的项目页面。

时间: 2024-08-07 13:47:40

使用iperf测试网络性能的相关文章

使用Iperf测量网络性能

https://iperf.fr/ Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能.Iperf具有多种参数和UDP特性,可以根据需要调整.Iperf可以报告带宽,延迟抖动和数据包丢失...

iperf测试网卡性能

Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失 因为产品上确定要要用的PHY是千M的,但模块接口又定义死了,只能用到100M.所以想测试下割掉几根线试下100M可行不.在测之前先测下千M模式下到底性能怎么样,之前别人一直说这我手头上这颗ARM根本上不了千M,虽然他标称的是可以支持千M.一准备工作做好了,开始. 我们使用的工具是iperf这个工具我是自己编译的.现在将我的过程写下来.iperf下

嵌入式设备的网络性能该如何分析

最近对公司的嵌入式设备做了一个网络性能测试,如何确定网络性能的瓶颈在哪里,以及网络性能影响因素有哪些,有些心得记录在此. 一般评判网络性能都是看数据下载上传的速度.现在主流的带宽有2种,100Mbps和1000Mbps,2者理论上可以达到的下载最大速度分别为12.5MB/s和125MB/s. 设备的网络性能如何,影响因素很多,受所在局域网网络状况,对端设备性能影响很大,而且不同的应用程序测试速度也会有所不同. 那么该如何来分析设备的性能瓶颈? 对于嵌入式设备,测试网络性能一般是看从局域网内的PC

Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量

网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款网络带宽测试工具,本节将详细介绍一下Iperf的使用. 1. Iperf能做什么 Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动.数据包丢失率.最大

针对文件系统和网络性能的测试

由于工作需要,需要对文件系统和网络性能等进行测试: 一.文件系统测试 fio: 直接读取盘符下的data目录,测试结果和自己写程序,open(,DIRECT_IO)的结果几乎相近,很有说服力. iozone:能测多种读写方式,还能自动生成测试报告,可惜,即使指定屏蔽缓存,测试结果也不如fio真实. dd:这是最简单的测试工具了 测试读:dd if=filepath of=/dev/null bs=2M count=512 测试写:dd if=/dev/zero of=filepath bs=2M

网络性能评估工具iperf

项目背景: 在我们的企业生产中,我们需要对我们的网络性能有一定的监控,从而对网络进行优化,提供给我们客户最好的服务.当然 老板没钱! 监控开源!!! 试验环境: vmware workstation 11 服务器:centos6.5  ip:192.168.0.53 客户端:centos6.5  ip: 192.168.0.26 服务器:iperf-2.0.5-11.el6.x86_64 客户端:iperf-2.0.5-11.el6.x86_64 服务器:iptables关闭 客户端:iptab

Ceph:网络性能基线测试

#一.带宽基线测试:iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.iperf可以测量最大TCP带宽,具有多种参数和UDP特性. Iperf可以报告带宽,延迟抖动和数据包丢失. #二.测试方法:启动网络性能基准测试,在第一个Ceph节点上执行iperf服务端选项,在第二个Ceph节点上执行客户端选项. #三.操作方法:在服务端节点和客户端节点分别找一个没被占用的相同端口,比如6901 1.服务端节点: # yum -y install iperf # iperf -s

App的网络环境测试和性能优化

1. 网络环境测试一般是先用网络损伤模拟仪或mock工具模拟常见的七种损伤和5种网络环境,然后再国内外城市采样的方式(带宽和延时)组合测试生成报告, 下面是一些统计图 2. 采样点的选择一般都是根据自己server收集的用户信息.如果新app就要参考近品/竞品或第三方的统计数据拍脑袋 3. 从测试的角度,应该建立实时监控的web portal.其实测试的目的除了保证产品发布的质量.更重要的是为优化提供依据,所以report最后一部分都是issue list 和optmize advice,当然测

COROUTINE协程库:网络性能完爆ASIO异步模型(-O3测试)

在purecpp社区的github组织中有一个协程库:https://github.com/topcpporg/cpp_features 近日有用户找到我,想要了解一下coroutine库在网络方面的性能,于是选取已入选标准库的boost.asio网络库的异步模型做横向对比. 在小包和利用多核方面,coroutine库的网络性能完爆asio异步模型,8线程处理小包时差距可达十几倍. 在大包+单线程的情况,coroutine库的网络比asio异步模型高的不是很多,在一些性能比较差的PC机上,甚至出