1.初始化mininet最小拓扑结构。

sudo mn

2.在mininet的CLI中,xterm打开主机终端(无输出要安装xterm)。

xterm h1 h2

3.在h2的终端中,将h2设为服务器server,设置端口为5566,间隔时间1s,并将结果保存到文件result中。

iperf -s -p 5566 -i 1 > result

4.在h1的终端中,将h1作为客户机client,连接到h2(ip地址为10.0.0.2),目标端口为5566,连接时间默认为10秒,可通过参数-t指定参数。

iperf -c 10.0.0.2 -p 5566

5.经过10秒后,在h2自动生成了文件result,存储了此次连接的信息。在h2终端中,查看result内容。

cat result

6.将result中我们感兴趣的信息提取到新的文件new_result中。

cat result | grep sec | head -10 | tr - " " | awk '{print $4,$8}' > new_result

7.查看new_result内容。时间和对应的带宽信息已被提取到新文件中。

8.接下来使用gnuplot画图(如果你没有安装gnuplot,使用命令sudo apt-get install gnuplot-x11安装)。在h2终端中进入gnuplot。

gnuplot

9.在gnuplot命令行中,将刚才得到的文件new_result画图。

plot "new_result" title "tcp flow" with linespoints

将纵坐标范围改为40-60,添加横纵坐标标签,并重新生成图。

set yrang [40:60]

set xlabel "time (sec)"

set ylabel "tcp throughput (Mbps)"

replot

10.刚才是tcp,若要测UDP,只需在末加上-u;若要测ipv6,只需加上-V,如:

iperf -c 59.125.103.56 -f K -i 2 -w 300K –u

“Jitter”列表示抖动时间,也称为传输延迟,“Lost/Total Datagrams”列表示丢失的数据包和数据包数量,0%是平均丢包率。-b:UDP模式使用的带宽,单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。

11.iperf的其他参数如下:

11.1.iperf服务器选项

-s 以server模式启动,eg:iperf –s 。Server端为数据的接收端

-D 以服务方式运行ipserf,eg:iperf -s -D

-R 停止iperf服务,针对-D,eg:iperf -s -R

-o 重定向输出到指定文件

-c,--client 如果Iperf运行为服务器模式,则可利用-c参数指定一个客户端,本机将接受指定客户端的连接,但不支持UDP协议

-P,--parallel #  设置Iperf服务模式下的最大连接数,默认值为0,表示不限制连接数量

11.2.iperf客户端选项

-b,--bandwidth 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s

-c,--client 指定Iperf服务器的主机名和IP地址

-d,--dualtest 同时进行双向传输测试

-n,--num 指定传输的字节数,eg:iperf -c 222.35.11.23 -n 100000

-r,--tradeoff 单独进行双向传输测试

-t,--time 指定Iperf测试时间,默认10秒,eg:iperf -c 222.35.11.23 -t 5

-L,--listenport 指定一个端口,服务器将利用这个端口与客户机连接

-P, --parallel 设置Iperf客户端至Iperf服务器的连接数,默认值为1

-S, --tos 设置发出包的类型,具体类型请参阅man文档

-F 指定需要传输的文件

-T 指定ttl值

11.3.通用参数

-f [kmKM] 分别表示以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

-l 缓冲区大小,默认是8KB,eg:iperf -c 222.35.11.23 -l 16

-m 显示tcp最大mtu

-o 将报告和错误信息输出到文件eg:iperf -c 222.35.11.23 -o ciperflog.txt

-p 指定服务器端使用的端口或客户端所连接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

-u 使用udp协议

-w 指定TCP窗口大小,默认是8KB

-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)

-C 兼容旧版本(当server端和client端版本不一样时使用)

-M 设定TCP数据包的最大mtu值

-N 设定TCP不延时

-V 传输ipv6数据包

12.其他应用

12.1测单线程TCP吞吐量

可以看到Iperf默认的运行时间在10秒左右,网卡的带宽速率1.79Gbits/sec。

步骤2:“-t”和“-i”参数后的Iperf输出

iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变Iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现,如下图所示:

可以看到传输时间为30秒,输出频率为5秒的结果。带宽仍然保存在1.81Gbits/sec左右。

步骤3:“-n”参数指定要传输的数据量

为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,Iperf在传输完毕指定大小的数据包后,自动结束。

12.2测多线程TCP吞吐量

进行多线程测试的时候,需多核CPU才能看出实验效果。测试单线程TCP吞吐量,结果如下。

步骤2:测试多线程吞吐量,这里线程数设置为2。

对比得知:传输相同的5000M数据,多线程下消耗了39秒左右,单线程下消耗了18秒左右,由此可知,采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。而多线程的传输速率为2.1Gbits/sec左右,低于单线程的2.2Gbits/sec左右,从这个结果看,多线程对网络传输性能没有提高。理论上多线程的传输性能应该比单线程的要好,但是也受具体的网络环境影响。

13.测试UDP丢包和延迟

由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此,对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过Iperf的“-u”参数即可测试UDP应用的传输性能。

这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在Iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态。

图中,“Jitter”列表示抖动时间,也称为传输延迟,“Lost/Total Datagrams”列表示丢失的数据包和数据包数量,0%是平均丢包率。

14.测试拓扑中主机间的带宽情况