【概要】Iperf是一款网络性能测试工具,可以方便的用它进行SDN网络带宽和网络质量的测试,Iperf支持协议、定时、缓冲区等参数的配置调整,报告TCP/UDP最大带宽、延迟抖动、数据包丢失等统计信息。Iperf版本建议采用Linux版本,事实上,Windows版也很好用。
Iperf安装方法有多种,可以下载源码编译安装,也可以直接使用编译好的二进制版本,在ubuntu下安装使用iperf尤为简单,apt-get install iperf 即可,值得一提的是Mininet自带Iperf,在SDN网络上测试比较便捷。
使用Iperf测试时必须将一台主机设置为客户端,一台主机设置为服务器。
Iperf测试TCP
Iperf测试TCP带宽的原理比较简单,在客户端和服务端建立三次握手连接后,客户端带宽的大小等于发送的总数据除以发送的总时间。对服务端测得的带宽,则是接收的总数据除以所花时间。
TCP模式下简单举例:
Server:iperf -s
Client:iperf -c 10.0.0.1 -i 1
客户端到服务器10.0.0.1上带宽测试,每一秒钟打印一次信息。
Iperf测试UDP
Iperf测试UDP性能时,客户端可以指定UDP数据流的速率。客户端发送数据时,将根据客户端提供的速率计算数据报发送之间的时延。
客户端还可以指定发送数据报的大小。每个发送的数据报包含一个ID号,用来唯一标识报文,服务器端根据该ID号来确定数据报丢失和乱序。
当把UDP报文大小设置可以将整个报文放入IP层的包(packet)内时,那么UDP所测得的报文丢失数据即为IP层包的丢失数据,这提供了一个有效的测试包丢失情况的方法。
数据报传输延迟抖动 (Jitter)的测试由服务器端完成,客户发送的报文数据包含有发送时间戳,服务器端根据该时间信息和接收到报文的时间戳来计算传输延迟抖动。传输延迟抖动反映传输过程中是否平滑。由于它是一个相对值,所以并不需要客户端和服务器端时间同步。
UDP模式下简单举例:
Server:iperf -s -u
Client:iperf -c 10.0.0.1 -u -b 100M
在UDP模式下,客户端以100Mbps为数据发送速率,测试客户端到服务器10.0.0.1上的带宽。
综上,用以下方法测试网络连接的质量:
- 延时(反应时间或者RTT):用ping命令量度
- Jitter(延时变化):用Iperf UDP测试来量度
- 数据报丢失:用Iperf UDP测试来量度
- 带宽:通过TCP测试来量度
表 1. 客户端/服务器端通用参数
表 2. 服务器端参数
表 3. 客户端参数
测试环境
1) 已搭建好一套SDN网络环境,使用Mininet模拟交换机和主机连接到一款OpenFlow控制器
2) 使用Mininet自带的Iperf工具
应用实例
实例一:最简参数实例
服务端:
客户端:
Iperf客户端连接Iperf服务器的TCP默认端口5001,否则我们可以用-p参数修改Iperf服务器的端口,客户端与服务器必须加上同样的端口。结果显示的带宽是从用户到服务器之间的带宽。
实例二:双向带宽测试
服务端:
客户端:
-r参数可以量度双向带宽,Iperf服务器会主动向客户端发起连接。
实例三:同步双向带宽测试
服务端:
客户端:
使用-d 参数同步测量双向带宽,而上例的-r在初始状态时,只会量度客户到服务器的带宽。
实例四:TCP窗口大小
服务端:
客户端:
在连接中,如果接收方来不及验证,数据会暂时被存在一个缓冲区里,这个缓冲区的上限就是所谓的TCP窗口大小,窗口的大小可以在2到65,535 bytes之间。
实例五:UDP测试
UDP测试会得到关于Jitter和数据包丢失的重要信息。
服务端:
客户端:
良好的连接质量,数据包的丢失率要小于1%,数据包的丢失率过高会导致许多TCP数据报需要重传,从而影响带宽。 Jitter代表的是延时变化,并不依赖于延时本身,你可能拥有很长的反应时间,但是Jitter却很低。