网络性能测试工具 iperf 的使用
本文目录
1. 带宽的单位说明
带宽,英文名 Bandwidth,在不同领域的含义各不相同,而在网络服务中,带宽是指单位时间内的流经数据量。
数据量的单位一般有两种:bit 和 Byte。
因此,带宽的单位也有两种:b/s 或者 B/s,如果数值较大,可以使用 K 表示千(Kb/s 或者 KB/s),M 表示 百万(Mb/s 或者 MB/s)。
- Mb/s:Million bits per second的缩写,是一种传输速率单位,指每秒传输的位(比特)数量。通常用于运营商带宽速率的计量。
-
MB/s:Million Bytes per second的缩写,是一种传输速率单位,指每秒传输的字节数量。即是我们平时说的下载速度。
Byte 和 bit 是不一样的,Byte = 8 bit,而不同的地方单位不同,需要进行换算,下表整理了在 VMP 中的各个位置的单位
2. 带宽测试工具
测试带宽工具,一般有如下几种:
- iperf 或者 iperf3
- wget
- scp
我选择的是专业的压测工具 iperf3 。
Iperf3 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失.对于每个测试,它都会报告带宽,丢包和其他参数,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。
2.1 CentOS 7.2 安装 iperf3
安装方式有两种:
1、使用 rpm 包安装(推荐)
rpm -ih ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/24/x86_64/i/iperf3-3.1.3-1.fc24.x86_64.rpm
2、使用源码编译安装(较麻烦,不推荐)
yum -y install gcc make wget
cd /tmp
wget https://iperf.fr/download/source/iperf-3.1.3-source.tar.gz
tar zxvf iperf-3.1.3-source.tar.gz
cd iperf-3.1.3
./configure
make
make install
iperf 的使用需要关闭防火墙
systemctl stop firewalld``$ systemctl stop iptables
2.2 Window10 安装 iperf3
可用的 iperf3 安装包都可以从这个页面下载:https://iperf.fr/iperf-download.php
这里直接给出两个 windows 常用的
- windows 10 64位:https://iperf.fr/download/windows/iperf-3.1.3-win64.zip
- windows 10 32 位:https://iperf.fr/download/windows/iperf-3.1.3-win32.zip
下载到电脑到,并解压后,会得到两个文件:cygwin1.dll 和 iperf3.exe,将这两个文件拷贝到 c:\windows 目录下。
最后打开 cmd,执行 iperf3 –version ,若安装成功,会打印出版本信息。
最后要在使用前,关闭防火墙
2.3 iperf3 的使用
iperf3 有客户端 和 服务端之别:
- 服务端:收包,使用
-s
参数指定, iperf3 -s -
客户端:发包,使用
-c xx.xx.xx.xx
来指定要往哪个服务端发包, iperf3 -c 172.20.20.200
iperf3 还有更多的参数,其中有一些是客户端专用的,有一些是服务端专用的,也有一些是二者共用的。
具体可以前往这个地址,进行查阅:https://www.cnblogs.com/yingsong/p/5682080.html
常用的参数有
-u
:发送 UDP 包,仅客户端可用,服务端默认 tcp udp 都可以接收-b
:指定发送速率(比如 100M),发送端不受限速影响,如果有限速,也只是接收端有影响-p
:后接服务端监听的端口-i
:设置带宽报告的时间间隔,单位为秒-t
:设置测试的时长,单位为秒-w
:设置tcp窗口大小,一般可以不用设置,默认即可-B
:绑定客户端的ip地址-4
:指定 ipv4-n
:指定传输的字节数-f
:格式化带宽数输出,后接单位,比如 K,M--get-server-output
:在客户端直接获取服务端输出的结果
2.4 iperf3 的结果
iperf3 的输出结果可以分为两类
- 一类是,详细的带宽数据
- 一类是,最终的带宽数据
如果你像我一样加上 --get-server-output
,可以看到服务端输出的报告。
接下来看一下,输出的报告有哪些内容。
- 第一列 Interval:测试的时长
- 第二列 Transfer:在 Interval 时长里,传输的数据量
- 第三列 Bitrate:传输速率
- 第四列 Jitter:网络抖动,连续发送数据包时延差值的平均值,越小说明网络质量越好
- 第五列 Lost/Total Datagrams:丢失的数据包与发送的总数据包
2.5 经验总结
- 如果想要
测试吞吐量
,抖动
和丢包率
这三个指标,只能添加-u
参数 使用UDP进行测试,并且使用--get-server-output
获得 server端的报告。最后不断在client端增加带宽值,直到server端出现轻微的丢包为止,此时server端显示的带宽就是被测系统的吞吐量。 - 我们在做性能测试的时候需要指定包长,不同的包长会得到不同的吞吐量,通过-l指定,而使用-b指定带宽。
- 使用TCP来测试网络带宽,有一个参数需要特别注意,那就是TCP窗口大小,可以使用-w参数指定。网络通道的容量capacity = bandwidth * round-trip time。而理论TCP窗口的大小就是网络通道的容量。比如,网络带宽为40Mbit/s,回环路径消耗时间是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes,此时我们可以查询iperf默认的TCP窗口大小来决定是否需要设置此参数,在此例中,窗口大小应设计大于10Kbytes,当然,这仅仅是理论值,在实际测试中可能需要作出调整。