- 软件定义网络实验教程
- 黄韬 魏亮 刘江 杨帆
- 3085字
- 2025-02-17 15:21:11
任务二 性能测试工具iPerf和Netperf使用介绍
任务目的
1. 掌握iPerf的功能和基本命令,利用iPerf测试主机之间的吞吐量。
2. 掌握Netperf的功能和基本命令,能够根据不同的测试需求使用不同的命令参数。
任务环境
性能测试工具iPerf和Netperf使用介绍实验的拓扑如图1-7所示。

图1-7 实验拓扑
实验环境镜像配置说明如表1-2所示。
表1-2 实验环境镜像配置说明

注:系统默认的账户为root/root@openlab、openlab/user@openlab。
任务内容
1. 使用iPerf测试SDN网络的性能,熟悉iPerf常用的测试命令。
2. 使用Netperf测试SDN网络的性能,熟悉Netperf常用的测试命令。
3. 总结Netperf与iPerf的不同之处。
实验原理
在构建或管理一个网络系统时,除了关心网络的可用性,也要注意其整体的性能,这时就要用合适的工具对网络的各项性能进行测试。iPerf和Netperf是用于衡量网络性能的测试工具,本实验对这两款工具进行具体介绍。
一 iPerf工具
iPerf是一种网络性能测试工具,可以运行于Linux、BSD、UNIX及Windows等操作系统。iPerf具有多种参数和特性,支持协议、定时、缓冲区等参数的配置调整,能够测试TCP/UDP的最大带宽、延迟抖动、数据包丢失等统计信息,可以根据需求采用不同的参数从而达到不同的测试目的。iPerf基于Server/Client的工作模式,客户端向服务端发送一定数量的数据,服务端统计并计算带宽、延时抖动等信息。客户端将数据全部发送后,服务端会回复一个数据包给客户端,将测试数据反馈给客户端。如果网络较为拥塞或误码率较高,客户端无法收到服务端回复的数据包,则只能显示本地记录的部分测试结果,所以服务端和客户端的测试结果可能有所不同。iPerf工作模式如图1-8所示。

图1-8 iPerf工作模式
在命令提示符中输入iperf命令即可运行iPerf。iPerf命令语法格式和参数解释如下。
1. 命令格式。
iperf [-s|-c host] [options]
2. 参数配置如表1-3~表1-5所示。
表1-3 客户端/服务器端通用参数

表1-4 服务器端参数

表1-5 客户端参数

二 Netperf工具
Netperf是一种网络性能测量工具,主要用于测试TCP或UDP和Berkeley套接字接口的批量数据传输(Bulk Data Transfer)和请求/应答(Request/Reponse)性能。Netperf工具以Client/Server方式工作,服务端是netServer,用来侦听来自客户端的连接,客户端是Netperf,用来向服务发起网络测试。在客户端与服务端之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果。在控制连接建立并传递了测试配置信息以后,客户端与服务端之间再建立一个测试连接,用于来回传递特殊的流量,以测试网络的性能。Netperf工作模式如图1-9所示。

图1-9 Netperf工作模式
Netperf通过命令行参数来控制测试的类型和具体的测试选项,根据作用范围的不同,nNetperf的命令行参数可以分为全局命令行参数和测试相关的局部参数两大类,两者之间使用--分隔。Netperf命令语法格式和参数解释如下。
1. 命令格式。
netperf [global options] --[test-specific options]
2. [global options]可选参数,可选的参数如表1-6所示。
表1-6 局命令行参数

3. [test-specific options]可选参数,可选的参数如表1-7所示。
表1-7 测试相关的局部参数

三 网络性能指标
学习网络性能测试工具不仅要掌握基本使用方法,还要学会分析测试结果,常见的网络性能参数如下。
(1)网络吞吐量:单位时间内通过某个网络(信道或接口)的数据量,吞吐量受网络的带宽或者网络的额定速率限制,单位通常表示为bit/s。
(2)网络延时:一个数据包从用户的计算机发送到网站服务器,然后立即从网站服务器返回用户计算机的来回时间。影响网络延时的主要因素是路由的跳数和网络的流量。交换机延时(Latency)是指从交换机接收到数据包到开始向目的端口复制数据包之间的时间间隔。有许多因素会影响交换机延时大小,如转发技术等。
(3)抖动:用于描述包在网络中传输延时的变化,抖动越小,说明网络质量越稳定、越好。抖动是评价一个网络性能的最重要的因素。
(4)丢包率:理想状态下是发送了多少数据包就能接收到多少数据包,但是由于信号衰减、网络质量等诸多因素的影响并不能达到理想状态,而丢包率就是指测试中所丢失的数据包数量占所发送数据包的比率。
四 iPerf和Netperf比较
iPerf和Netperf是开源软件,都可以支持TCP、UDP,可以指定端口号、TCP发送缓冲区大小、测试时间,但两者在某些方面也是有区别的。表1-8对两者进行一些简单比较。
表1-8 iPerf和Netperf的比较

实验步骤
一 实验环境检查
步骤1 登录主机1,执行ifconfig命令查看主机1的IP地址,如下所示。

步骤2 登录主机2,执行ifconfig命令查看主机2的IP地址,如下所示。

步骤3 登录主机3,执行ifconfig命令查看主机3的IP地址,如下所示。

二 基于iPerf测试SDN网络
场景一 TCP测试
步骤1 在主机1上执行iperf -s命令,以主机1为服务器端进行TCP测试,如下所示。

说明:服务器端默认端口为5001,默认测试时间为10 s。
步骤2 在主机2上执行iperf -c 10.0.0.8命令,以主机2为客户端连接主机1,测试主机1与主机2之间的吞吐量,如下所示。

结果表明,主机1与主机2之间的带宽是874 Mbit/s。
步骤3 服务器端保持运行状态,在主机2上执行如下命令,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8 -t 32 -i 8
其中,“-t 32”表示测试时间为32 s,“-i 8”表示输出频率为8 s。该命令表示每8 s输出一次测试结果,直到达到32 s为止,结果如下所示。

输出5次测试结果,带宽基本在892 Mbit/s左右。
步骤4 在主机2上执行如下命令,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8-n 2000M -i 5
其中,“-n 2000M”表示传输的数据量为2 000 M,“-i 5”表示输出频率为5 s。该命令表示数据包总量为2 000 M,每5 s输出一次测试结果,到最接近总时间为止,最后输出总的测试结果,结果如下所示。

由上可知,带宽依旧稳定保持在892 Mbit/s左右。
步骤5 依旧将主机1作为服务器端,主机2、主机3作为客户端,分别登录主机2、主机3多次执行以下命令,测试主机1与主机2、主机1与主机3之间的带宽。并在主机1上查看最后的测试结果,如下所示。
# iperf -c 10.0.0.8

对比可以看出,同一时间段内主机1与主机2、主机1与主机3的带宽接近,但主机1与主机2、主机1与主机3之间的带宽都不稳定,不同时间段的带宽相差比较大。
场景二 UDP测试
步骤1 选择主机1,按Ctrl+C键,停止主机1上的iPerf服务。
步骤2 执行iperf -s -u命令,以主机1为服务器端进行UDP测试,如下所示。

步骤3 在主机2上执行如下命令,以主机2为客户端连接主机1,测试主机1与主机2之间的网络性能。
# iperf -c 10.0.0.8 -u -b 2000M -i 5 -l 1380
其中,“-b 2000M”指定客户端以2 000 Mbit/s为数据发送速率,“-i 5”表示输出频率为5 s,“-l 1380”表示数据包大小是1 380个字节,客户端测试结果如下所示。

输出两次测试结果,带宽是752 Mbit/s左右。
服务器端测试结果如下所示。

主机1与主机2之间带宽为519 Mbit/s,抖动(Jitter)为0.012 ms,丢包率(Lost/Total Datagrams)为32%。
说明:若发现Sever端收不到Client端发过来的包,即没有任何输出,请检查是不是Client端发的数据包大小大于Server端网卡设置的MTU值。当不设置“-l”时,Client端默认发送的数据包的大小为1 470。
步骤4 选择主机1,按Ctrl+C键,停止主机1上的iPerf服务。
三 基于Netperf测试SDN网络
场景一 TCP测试
步骤1 在主机1上执行以下命令运行服务器端,用-p指定监听端口为9991,如下所示。
# netserver -p 9991

步骤2 在主机2上运行客户端,执行以下命令指定服务器端的IP地址以及端口。缺省情况下Netperf进行TCP批量传输,即-t TCP_STREAM,如下所示。
# netperf -H 10.0.0.8 -p 9991

从测试结果可以看出,服务器端使用87 380 byte大小的socket接收缓冲,客户端使用16 384 byte大小的socket发送缓冲。缺省情况下,Netperf向服务器端发送的测试分组大小也是16 384 byte,用时10.03 s,吞吐量为888.57 Mbit/s。
步骤3 执行以下命令再次发起测试,-m设置客户端发送的数据为1 024 bit,如下所示。
# netperf -H 10.0.0.8 -p 9991 -- -m 1024

表示测试时间10.01 s,吞吐量871.29 Mbit/s。
场景二 UDP测试
在主机2上执行以下命令,测试主机1与主机2之间的网络性能,如下所示。
# netperf -t UDP_STREAM -H 10.0.0.8 -p 9991 -- -m 1024
说明:不同于iPerf,Netperf测试UDP数据包无需在服务器端指定参数,所以,不用重启服务器端,只需要在客户端加上-t UDP_STREAM。

由上可知,UDP测试结果有两行:第一行显示的是客户端的发送统计,这里的吞吐量表示Netperf向本地socket发送分组的能力;第二行显示的是服务器端接收的情况,由于UDP的不可靠性,远端系统的接收吞吐量要远小于发送吞吐量,只有791.85 Mbit/s。