网络性能测试工具 iperf 的使用

作者: 王炳明 分类: 网络基础 发布时间: 2020-09-28 14:58 热度:53

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 经验总结

  1. 如果想要 测试吞吐量抖动丢包率 这三个指标,只能添加 -u 参数 使用UDP进行测试,并且使用 --get-server-output 获得 server端的报告。最后不断在client端增加带宽值,直到server端出现轻微的丢包为止,此时server端显示的带宽就是被测系统的吞吐量。
  2. 我们在做性能测试的时候需要指定包长,不同的包长会得到不同的吞吐量,通过-l指定,而使用-b指定带宽。
  3. 使用TCP来测试网络带宽,有一个参数需要特别注意,那就是TCP窗口大小,可以使用-w参数指定。网络通道的容量capacity = bandwidth * round-trip time。而理论TCP窗口的大小就是网络通道的容量。比如,网络带宽为40Mbit/s,回环路径消耗时间是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes,此时我们可以查询iperf默认的TCP窗口大小来决定是否需要设置此参数,在此例中,窗口大小应设计大于10Kbytes,当然,这仅仅是理论值,在实际测试中可能需要作出调整。

明哥写文章,辛苦了,请他喝杯咖啡吧?

发表评论

电子邮件地址不会被公开。 必填项已用*标注