Linux网络安全运维:网络性能评估工具iperf 测试带宽
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率低。要找到网络带宽利用率低的原因,可以对网络传输进行监控,此时就需要用到一些网络性能评估工具,而iperf就是这样一个网络带宽测试工具。.........
带宽
在计算机网络中,网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量,比如说你家的电信网络是100兆比特,意思是,一秒内最大的传输速率是100兆比特。
在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s,即 “比特每秒”。
也就是说,一条通信链路的“带宽”越宽,其所能传输的“最高数据率”也越高。
速率带宽区别
这个带宽呢,就是这个网卡的最高的传输速率,就跟一个马路一样啊,这个马路最高啊,每秒钟过100辆车啊,这是带宽的意思啊,然后速率呢,比方说每秒钟,现在他虽然可以过100辆,但是现在呢,每秒钟就过了五辆,那就相当于速率。
吞吐量
吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。
以上三点,我们举个案例:
- 一条路每秒最多能过100辆车(宽带就相当于100辆/秒)。
- 而并不是每秒都会有100辆车过,假如第一秒有0辆,第二秒有10辆...,(但是最多不能超过100辆)。所以有第1秒0辆/秒,第2秒10辆/秒,第3秒30辆/秒,这不能说带宽多少吧,于是就用吞吐量表示具体时间通过的量有多少(也有可能等于带宽的量)。
- 由此可知带宽是说的是最大值速率,吞吐量说的是某时刻速率。但吞吐量不能超过最大速率。
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率低。要找到网络带宽利用率低的原因,可以对网络传输进行监控,此时就需要用到一些网络性能评估工具,而iperf就是这样一个网络带宽测试工具。
对于分析业务系统的时候,最关键的是识别出是在哪出现了问题。
有了top命令就可以大概知道哪方面性能不够
如果使用iperf测试离10G比较远就说明网络有问题。虚拟机是用ethtool看不到带宽的,可以在boss上面查看实际的带宽
比如上面图片的例子虚拟机的带宽是1.5G,如果使用iperf去跑跑不到1.5G说明这个虚拟机的网络不正常。
1、iperf能做什么
iperf是一个基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。
下面介绍iperf的主要功能。
1)TCP方面
● 测试网络带宽。
● 支持多线程,在客户端与服务器端支持多重连接。
● 报告MSS/MTU值的大小。
● 支持TCP窗口值自定义并可通过套接字缓冲。
(2)UDP方面
● 可以设置指定带宽的UDP数据流。
● 可以测试网络抖动值、丢包数。
● 支持多播测试。
● 支持多线程,在客户端与服务器端支持多重连接。
2、iperf的安装与使用
iperf可以运行在任何IP网络上,包括本地以太网、接入因特网、Wi-Fi网络等。在工作模式上,iperf运行于服务器端、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起连接会话,因此要使用iperf,需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。
1)安装iperf
iperf支持Win32、Linux、FreeBSD、Mac OS X、OpenBSD和Solaris等多种操作系统平台。可以从iperf官方网站:http://iperf.fr/下载各种版本,这里下载的软件包为iperf-3.0.tar.gz,安装过程如下:
[root@ networkserver ~]# tar zxvf iperf-3.0.tar.gz
[root@ networkserver ~]# cd iperf
[root@ networkserver iperf]# make
[root@ networkserver iperf]# make install
或者 用yum软件仓库安装
yum -y install epel-release
yum install iperf -y
这样,iperf就安装完成了。
(2)iperf参数介绍
在完成iperf安装后,执行“iperf3-h”即可显示iperf的详细用法。iperf的命令行选项共分为三类,分别是客户端与服务器端公用选项、服务器端专用选项和客户端专用选项,下面对常用的选项进行介绍。
服务器端专用选项的含义如表1所示。
- -s 以server模式启动。#iperf -s
- -c host以client模式启动。host是server端地址。#iperf -c server_ip
[root@master ~]# iperf -v
iperf version 2.0.13 (21 Jan 2019) pthreads
[root@master ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
^C[root@master ~]# iperf -s -D
Running Iperf Server as a daemon
表1 服务器端专用选项的含义
客户端专用选项的含义如表2所示。
表2 客户端专用选项的含义
客户端与服务器端公用选项的含义如表3所示。
表3 客户端与服务器端公用选项的含义
3、iperf应用实例
要使用iperf,首先启动一个服务器端,这里假定服务器端的IP地址为192.168.12.168,在此服务器上运行“iperf3-s”即可开启iperf的服务器端模式。在默认情况下,iperf3将在服务器端打开一个5201监听端口,此时就可以将另一台服务器作为客户端执行iperf功能测试。
(1)测试TCP吞吐量
为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf将尝试从客户端尽可能快地向服务器端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图1展示了通过一个最简单的带宽测试命令的输出结果。
服务端 192.168.0.6
[root@node1 ~]# iperf -s -D
Running Iperf Server as a daemon
客户端 192.168.0.5
[root@master ~]# iperf -c 192.168.0.6
------------------------------------------------------------
Client connecting to 192.168.0.6, TCP port 5001
TCP window size: 202 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.5 port 39596 connected with 192.168.0.6 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.1 sec 667 MBytes 554 Mbits/sec
[root@master ~]# iperf -c 192.168.0.6
------------------------------------------------------------
Client connecting to 192.168.0.6, TCP port 5001
TCP window size: 140 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.5 port 39440 connected with 192.168.0.6 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.2 sec 672 MBytes 554 Mbits/sec
图1 通过iperf测试网络带宽利用率
从图1可以看出,iperf默认的运行时间是10s,每隔1s输出一次传输状态,同时还可以看到每秒传输的数据量在112MB左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在941Mbits/sec左右,而测试的服务器是千兆网卡,这个测试值也基本合理。在输出的最后,iperf还给出了总的数据发送、接收量,以及带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。
iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现,如图2所示。
[root@master ~]# iperf -c 192.168.0.6 -i 1 -t 5
------------------------------------------------------------
Client connecting to 192.168.0.6, TCP port 5001
TCP window size: 598 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.5 port 57640 connected with 192.168.0.6 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 116 MBytes 976 Mbits/sec
[ 3] 1.0- 2.0 sec 69.5 MBytes 583 Mbits/sec
[ 3] 2.0- 3.0 sec 61.8 MBytes 518 Mbits/sec
[ 3] 3.0- 4.0 sec 53.5 MBytes 449 Mbits/sec
[ 3] 4.0- 5.0 sec 63.1 MBytes 530 Mbits/sec
[ 3] 0.0- 5.1 sec 364 MBytes 598 Mbits/sec
图2 添加“-t”和“-i”参数后的iperf输出
从图2可以看出,输出状态的间隔变为每5s一次,总共执行测试时间为20s,测试的带宽速率仍然保持在941Mbits/sec左右,唯一变化的是失败重传次数增加了。
为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后,自动结束,如图3所示。
[root@master ~]# iperf -c 192.168.0.6 -i 20 -n 5000000000
------------------------------------------------------------
Client connecting to 192.168.0.6, TCP port 5001
TCP window size: 266 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.5 port 58492 connected with 192.168.0.6 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-20.0 sec 1.24 GBytes 533 Mbits/sec
[ 3] 20.0-40.0 sec 1.20 GBytes 515 Mbits/sec
[ 3] 40.0-60.0 sec 1.19 GBytes 511 Mbits/sec
[ 3] 0.0-77.5 sec 4.66 GBytes 516 Mbits/sec
图3 iperf客户端通过“-n”参数指定要传输的数据量
图3的例子是指定发送一个5GB左右的数据包,并且每隔10s输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速率急速下降。
有时候,为了模拟更真实的TCP应用,iperf客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现,如图4所示。
图4 iperf客户端通过“-F”参数指定文件来发送数据
在图4的例子中,通过“-F”参数指定了一个webdata.tar.gz文件作为iperf要传输的数据。在使用此参数时,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间10s内,这个文件可能还没有传完。
在使用iperf进行网络带宽测试时,如果没有指定发送方式,iperf客户端只会使用单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。
下面通过两个例子进行简单对比,图5是iperf使用单线程传输1.86GB数据所消耗的时间和带宽使用情况。为了速率单位统一,这里使用“-f”参数将输出结果都通过MBytes/sec来显示。
图5 iperf在单线程模式下的传输时间和传输速率
从图5中可以看出,传输1.86GB的数据消耗了17s的时间,平均带宽速率为112MBytes/sec(注意单位)。下面再看看使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速率,如图6所示。
图6 iperf使用多线程后的数据传输状态
这里通过“-P”参数开启了2个多线程,从传输时间上看,传输1.86GB的数据,消耗时间为10.79s,比之前单线程的传输时间少了近7s,在平均带宽速率上,从之前单线程的112MBytes/sec提高到177MBytes/sec,从这个结果可以看出,多线程对网络传输性能的提高不小。
基础网络VM之间网络性能测试
测试方法和步骤:
步骤一:创建基础网络虚机VM1和VM2,修改防火墙
步骤二:在VM1和VM2上部署iperf
步骤三:在VM1上启动iperf server端
步骤四:在VM2启动iperf client,进行测试
测试结果
iperf server 端 192.168.81.9 ↓
iperf client 端 192.168.81.10 ↓
iperf server端 192.168.81.10 ↓
iperf client 端 192.168.81.9 ↓
更多推荐
所有评论(0)