iperf是linux下一款非常实用的测带宽工具,是C/S模型的,支持使用TCP和UDP测试,可以测试带宽,丢包(丢包指的是UDP的丢包,TCP丢包会重传)等信息。若想使用此工具必须服务端必须是公网可访问的机器。

iperf原理

服务端监听监听在某个端口,客户端对该端口发送流量,由此可以测的客户端带宽的相关信息。(由于一般都是测试服务器的带宽,因此测试的时候需要有两台拥有公网地址的机器)。

带宽换算

通信公司说的带宽一般为Gb/s 、Mb/s;而我们使用的带宽实际说的是GB/s、MB/s;所以通信公司所给的带宽需要除以8进行换算。

以下分别用两台带宽分别为5Mb与100Mb的的主机互相进行测试

ct5           代表带宽为5Mb的主机

ct100       代表带宽为100Mb的主机

一、安装

以Centos8为例

[root@01-0001 yum.repos.d]# wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/aarch64/Packages/e/epel-release-8-16.el8.noarch.rpm
[root@01-0001 yum.repos.d]# rpm -ivh epel-release-8-16.el8.noarch.rpm 
[root@01-0001 yum.repos.d]# yum install iperf

二、测试

测试5M带宽的主机,带宽是否为能达到5M
1.tcp方式
服务器端

[root@ecs-29d1 ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 57730 (peer 2.1.6)
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.4 sec  6.13 MBytes  4.95 Mbits/sec
[  4] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 57732 (peer 2.1.6)
[  4]  0.0-10.3 sec  6.00 MBytes  4.88 Mbits/sec

客户端:

[root@01-0001 ~]# iperf -c ct100 -t 10 -i 1
------------------------------------------------------------
Client connecting to ct100, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 192.168.0.215 port 57732 connected with 36.112.136.105 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-1.00 sec   768 KBytes  6.29 Mbits/sec
[  1] 1.00-2.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 2.00-3.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 3.00-4.00 sec   512 KBytes  4.19 Mbits/sec
[  1] 4.00-5.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 5.00-6.00 sec   384 KBytes  3.15 Mbits/sec
[  1] 6.00-7.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 7.00-8.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 8.00-9.00 sec   512 KBytes  4.19 Mbits/sec
[  1] 9.00-10.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 10.00-10.33 sec   128 KBytes  3.21 Mbits/sec
[  1] 0.00-10.33 sec  6.00 MBytes  4.87 Mbits/sec

2.udp方式
服务器端:

[root@ecs-29d1 ~]# iperf -s -u
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 44211 (peer 2.1.6)
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec   0.017 ms    1/  895 (0.11%)
[  4] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 55893 (peer 2.1.6)
[  4]  0.0-10.0 sec  6.04 MBytes  5.07 Mbits/sec   0.018 ms 4612/ 8920 (52%)
[  3] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 47713 (peer 2.1.6)
[  4] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 45984 (peer 2.1.6)
[  4]  0.0-30.1 sec  5.53 MBytes  1.54 Mbits/sec   0.030 ms 4973/ 8920 (56%)
[  5] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 44776 (peer 2.1.6)
[  5]  0.0-46.1 sec  5.75 MBytes  1.05 Mbits/sec   0.021 ms  360/ 4462 (8.1%)
[  4] local 192.168.1.77 port 5001 connected with 36.112.130.213 port 52849 (peer 2.1.6)
[  4]  0.0-59.5 sec  5.37 MBytes   757 Kbits/sec   0.050 ms  632/ 4462 (14%)

客户端:

//设置为10M带宽进行测试
[root@01-0001 ~]# iperf -c ct100 -t 10 -i 1 -u -b 10M
------------------------------------------------------------
Client connecting to ct100, UDP port 5001
Sending 1470 byte datagrams, IPG target: 1121.52 us (kalman adjust)
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  1] local 192.168.0.215 port 45984 connected with 36.112.136.105 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-1.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 1.00-2.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 2.00-3.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 3.00-4.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 4.00-5.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 5.00-6.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 6.00-7.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 7.00-8.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 8.00-9.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 9.00-10.00 sec  1.25 MBytes  10.5 Mbits/sec
[  1] 0.00-10.00 sec  12.5 MBytes  10.5 Mbits/sec
[  1] Sent 8921 datagrams
[  1] Server Report:
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  1] 0.00-0.00 sec  0.000 Bytes  -nan bits/sec  131.073 ms 4294966296/0 (inf%)


//设置为5M带宽进行测试
[root@01-0001 ~]# iperf -c ct100 -t 10 -i 1 -u -b 5M
------------------------------------------------------------
Client connecting to ct100, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2243.04 us (kalman adjust)
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  1] local 192.168.0.215 port 44776 connected with 36.112.136.105 port 5001
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-1.00 sec   642 KBytes  5.26 Mbits/sec
[  1] 1.00-2.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 2.00-3.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 3.00-4.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 4.00-5.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 5.00-6.00 sec   639 KBytes  5.23 Mbits/sec
[  1] 6.00-7.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 7.00-8.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 8.00-9.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 9.00-10.00 sec   640 KBytes  5.24 Mbits/sec
[  1] 0.00-10.00 sec  6.26 MBytes  5.25 Mbits/sec
[  1] Sent 4463 datagrams
[  1] Server Report:
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  1] 0.00-0.00 sec  0.000 Bytes  -nan bits/sec  131.073 ms 4294966296/0 (inf%)

用UDP测试时注意查看服务端的丢包情况,可以发现当设置带宽为10M,会有接近50%的丢包,而当带宽设置为5M,丢包显著下降只有10%左右,而带宽设置为1M的时候,丢包为0.11%,说明了客户端带宽为5M左右,同时也说明UDP本身传输就不可靠,即使带宽设置的很低也存在丢包。

同理测试100M主机的带宽

//服务端
[root@01-0001 ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  1] local 192.168.0.215 port 5001 connected with 36.112.136.105 port 52722
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-10.04 sec   104 MBytes  87.3 Mbits/sec
[  2] local 192.168.0.215 port 5001 connected with 36.112.136.105 port 52724
[ ID] Interval       Transfer     Bandwidth
[  2] 0.00-10.08 sec   109 MBytes  90.4 Mbits/sec


//客户端
[root@ecs-29d1 ~]# iperf -c ct5 -t 10 -i 1
------------------------------------------------------------
Client connecting to ct5, TCP port 5001
TCP window size:  374 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.77 port 52724 connected with 36.112.130.213 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  5.62 MBytes  47.2 Mbits/sec
[  3]  1.0- 2.0 sec  12.4 MBytes   104 Mbits/sec
[  3]  2.0- 3.0 sec  12.0 MBytes   101 Mbits/sec
[  3]  3.0- 4.0 sec  11.2 MBytes  94.4 Mbits/sec
[  3]  4.0- 5.0 sec  10.5 MBytes  88.1 Mbits/sec
[  3]  5.0- 6.0 sec  11.5 MBytes  96.5 Mbits/sec
[  3]  6.0- 7.0 sec  12.2 MBytes   103 Mbits/sec
[  3]  7.0- 8.0 sec  11.8 MBytes  98.6 Mbits/sec
[  3]  8.0- 9.0 sec  9.62 MBytes  80.7 Mbits/sec
[  3]  9.0-10.0 sec  11.8 MBytes  98.6 Mbits/sec
[  3]  0.0-10.1 sec   109 MBytes  90.6 Mbits/sec

iperf常用参数说明:

适用客户端/服务器:

-f --格式[k|m|K|M] 分别表示以Kbits、Mbits、KBytes、MBytes显示报告,默认是Mbits
-i 以秒为单位统计带宽值 
-l 读写缓冲区大小,默认是8KB
-m 显示最大的TCP数据段大小 (MTU - TCP/IP header)
-o 将报告和错误信息输出到文件
-p 指定服务器和客户端连接的端口
-u 使用udp协议
-w 指定TCP窗口大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包

适用服务器端:

-s 以服务器模式启动
-U 单线程UDP模式下运行
-D 以守护进程模式运行

适用客户端:

-b 指定客户端通过UDP协议发送信息的带宽,默认值为1Mbit/s
-c 指定服务器地址  
-d 同时进行双向传输测试
-n 指定传输的字节数
-r 单独进行双向传输测试
-t 指定Iperf测试时间,默认10秒
-F 指定需要传输的文件
-I 从标准输入(stdin)中读取要传输的数据 
-L 指定一个端口,服务器将利用这个端口与客户机连接
-P 客户端到服务器的连接数,默认值为1
-T 指定ttl值

带宽也可以配合scp进行快速测试,只需一个公网地址,节省资源


ct100为带宽100Mb/s的主机
[root@zyq tmp]# scp -P 5499 ct100:/boot/initramfs-0-rescue-6748d698cc244bdebd23ef4793c8dd1d.img /tmp/
initramfs-0-rescue-6748d698cc244bdebd23ef4793c8dd1d.img                            100%   56MB   8.5MB/s   00:06    

ct5为带宽5Mb/s的主机
[root@zyq tmp]# scp ct5:/boot/initramfs-4.18.0-240.el8.x86_64.img /tmp/
initramfs-4.18.0-240.el8.x86_64.img                                                100%   28MB 576.2KB/s   00:49    

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐