本文来自南非蚂蚁的BLOG。如果您想与本文作者进行讨论和互动,请点此直接跳转。1、网络性能评估工具Iperf网络性能评估主要是监控网络带宽的利用率。最大限度地利用网络带宽是保证网络性能的基础。但由于网络设计不合理、网络存在安全漏洞等原因,网络带宽利用率不高。要找出网络带宽利用率低的原因,需要对网络传输进行监控。这时候就需要一些网络性能评估工具,Iperf就是这样一个网络带宽测试工具。本节将详细介绍Iperf。使用。一、Iperf能做什么Iperf是一个基于TCP/IP和UDP/IP的网络性能测试工具。可用于衡量网络带宽和网络质量,还可以提供网络延迟抖动、丢包率、***传输单位等统计数据。网络管理员可以根据这些信息了解和判断网络性能问题,从而定位网络瓶颈,解决网络故障。下面介绍Iperf的主要功能。(1)TCPaspectq测试网络带宽。q支持多线程,支持客户端和服务器的多连接。q报告MSS/MTU值的大小。q支持TCP窗口值定制和通过socket缓冲。(2)UDP方面,q可以设置指定带宽的UDP数据流,q可以测试网络抖动值和丢包数,q支持组播测试,支持多线程,支持客户端多连接和服务器。二、Iperf的安装与使用iperf可以运行在任何IP网络上,包括本地以太网、接入Internet、Wi-Fi网络等。在工作方式上,iperf运行在server和client模式。服务器端主要用于监听传入的测试请求,而客户端主要用于发起连接会话。因此,要使用iperf,需要两台服务器,一台运行在server模式,另一台运行在client模式。1、安装iperfiperf,支持Win32、Linux、FreeBSD、MacOSX、OpenBSD、Solaris等多种操作系统平台。读者可以到iperf官方主页http://iperf.fr/下载各种版本,最新版本是iperf3.0,这里下载的软件包是iperf-3.0.tar.gz,安装过程如下:【root@networkserver~]#tarzxvfiperf-3.0.tar.gz[root@networkserver~]#cdiperf[root@networkserveriperf]#make[root@networkserveriperf]#makeinstall这样iperf就安装好了。2、iperf参数介绍完成iperf安装后,执行“iperf3–h”即可显示iperf的详细使用方法。iperf的命令行选项分为三类,分别是客户端和服务器通用选项、服务器专用选项和客户端专用选项。下面介绍常用的选项。服务器端特殊选项含义如表1所示。表1服务器端特殊选项含义命令行参数含义说明-s以服务器模式启动iperf,例如:iperf3–s,默认监听端口iperf3为5201,可以通过“-p”选项修改默认监听端口-D将iperf作为后台守护进程运行,例如:iperf3-s-Dclient-specific选项的含义如表2.5所示。表2client-specificoptions含义命令行参数含义说明-c以客户端模式启动iperf例如:iperf3-c192.168.12.168,其中192.168.12.168为服务器端的IP地址-u指定使用UDP协议-b[K|M|G]指定UDP模式使用的带宽,单位是bits/sec。此选项与“-u”选项相关。默认值为1Mbit/sec-t指定传输数据包的总时间。iperf会在指定时间内重复发送指定长度的数据包。默认为10秒-n[K|M|G]指定传输数据包的字节数,例如:iperf3-c192.168.12.168–n100M-l指定读写缓冲区的长度。TCP方法的默认大小为8KB,UDP方法的默认大小为1470字节。-P指定客户端和服务器之间使用的线程数。默认值为1个线程。客户端和服务端都需要通过这个参数-R来切换数据的发送和接收方式,比如默认客户端发送,服务端接收。设置该参数后,数据流向变为客户端接收,服务端发送-w指定socketBuffer大小,在TCP模式下,该设置为TCP窗口的大小。在UDP模式下,这个设置是接受UDP数据包的缓冲区大小,用于限制可以接收的数据包的最大值-B用于绑定一个主机地址或接口,这个参数只用于多个networks接口的主机。在UDP模式下,该参数用于绑定并加入一个多播组-M设置TCP***信息段的值-N设置TCP无延迟。表3客户端和服务端常用选项的含义。命令行参数的含义。-f[k|m|g|K|M|G]指定带宽输出单位,“[k|m|g|K|M|G]”分别表示以Kbits、Mbits、Gbits为单位显示输出结果,KBytes、MBytes、GBytes,默认单位为Mbits,例如:iperf3-c192.168.12.168-fM-p指定服务器使用的端口或客户端连接的端口端口,例如:iperf3-s-p9527;iperf3-c192.168.12.168-p9527-i指定每次报告的时间间隔,以秒为单位,如果设置为非零值,将按此间隔输出测试报告,默认值为1,例如:iperf3-c192.168.12.168-i2-F指定文件为带宽测试的数据流。例如:iperf3-c192.168.12.168-Fweb-ixdba.tar.gz2.3.3Iperf应用程序实例要使用iperf,必须先启用一个服务器。这里假设服务器的IP地址是192.168.12.168,在这个服务器上运行“iperf3-s”可以打开iperf的服务器模式。iperf3默认会在服务器上开启一个5201监听端口,然后可以使用另一台服务器作为客户端进行iperf功能测试。1.测试TCP吞吐量为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf会尝试以最快的速度从客户端向服务器发送数据请求,并会输出数量发送的数据量和网卡带宽值的平均值。图1是最简单的带宽测试命令。图1通过iperf测试网络带宽利用率从图1可以看出iperf默认运行时间为10秒,每秒输出一次传输状态。同时可以看到每秒传输的数据量在112MB左右,刚好对应“Bandwidth”栏中的数值,网卡的带宽速率维持在941Mbits/sec左右,测试服务器是千兆网卡,这个测试值基本合理。在输出***中,iperf还给出了发送和接收的数据总量,以及平均带宽速率。通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。iperf提供了很多参数,可以多角度、全方位的测试网络带宽利用率。比如改变iperf的运行时间和输出频率,可以通过“-t”和“-i”参数实现,如图2所示。图2添加“-t”和“-i”参数后的iperf输出从图2可以看出,输出状态的间隔变为每5秒一次,测试总执行时间为20秒,并且测试的带宽速率依然保持在941Mbits/sec左右,唯一变化的是重传失败次数增加了。为了模拟大量的数据传输,也可以指定发送的数据量,可以通过“-n”参数来实现。指定“-n”参数后,“-t”参数失效,iperf传输指定大小的数据包后自动结束,如图3所示。图3iperf客户端通过“-n”参数指定传输的数据量。图3的例子指定发送一个5GB左右的数据包,每隔10秒输出一次传输状态。从这个输出可以看出,当重传失败次数较多时,传输速率下降很快。有时为了模拟更真实的TCP应用,iperf客户端允许从特定文件发送数据,这可以通过“-F”参数实现,如图4所示。图4iperf客户端发送数据通过“-F”参数指定文件。在图4的例子中,通过“-F”参数指定了一个webdata.tar.gz文件作为iperf要传输的数据。使用该参数时需要同时指定一个“-t”参数来设置测试传输的时间。这个时间应该设置的越长越好,因为在默认的10秒传输时间内文件可能还没有传输完。使用iperf进行网络带宽测试时,如果不指定发送方式,iperf客户端只会使用单线程,iperf支持多线程,可以使用iperf提供的“-P”参数设置发送次数多线程,通过使用多线程,可以在一定程度上提高网络的吞吐量。下面通过两个例子进行简单对比。图5显示了iperf使用单个线程传输1.86GBytes数据所消耗的时间和带宽使用情况。为了统一速率单位,这里使用“-f”参数,以MBytes为单位显示输出结果。图5单线程模式下iperf的传输时间和传输速率从图5可以看出,传输1.86GBytes的数据需要17秒,平均带宽速率为112MBytes/sec(注意单位)。下面我们来看看使用多线程后,iperf传输相同数据量所消耗的时间和平均带宽速率如图6所示。图6iperf使用多线程后的数据传输状态这里,两个多线程分别是通过“-P”参数启用。从传输时间来看,1.86GBytes的数据传输时间为10.79秒,比之前的单线程传输时间有所提升。将近7秒的时间过去了,平均带宽速率从之前单线程的112MBytes/sec提升到了177MBytes/sec。从这个结果可以看出,多线程大大提高了网络传输性能。2、测试UDP丢包和时延iperf也可以用于UDP包吞吐量、丢包率和时延指标,但是由于UDP协议是一种非面向连接的轻量级传输协议,不提供可靠的数据传输服务,所以UDP应用的重点不是数据传输的速度有多快,而是它的丢包率和延迟指标。UDP应用程序的传输性能可以通过iperf的“-u”参数进行测试。图7测试iperf客户端传输100MBUDP包的输出结果:图7iperf传输100MBUDP包的输出结果在图7中,重点关注虚线下方的一段内容。在此输出中,“Jitter”列表示抖动时间或传输延迟,“Lost/Total”列表示丢失的数据报和数据报的总数。下面的0.33%是平均丢包率,“Datagrams”一栏显示的是传输的数据报总数。这个输出太简单了。想要了解更详细的UDP丢包和延迟信息,可以在iperf服务器上查看,因为在客户端进行传输测试的同时,服务器端也会同时显示传输状态,如图8所示。图8iperf服务器显示的UDP传输状态在这个输出中,详细记录了传输过程中各个阶段的传输延迟和丢包率。在UDP应用中,随着传输数据量的增加,丢包率和延迟也会增加。延迟和丢包可以通过改变应用来缓解或修复,比如视频流应用,可以通过缓存数据来容忍更大的延迟。
