Linux Command iperf3网络测速工具
1. 简介
Iperf
是一款基于TCP/IP和UDP/IP的网络性能测试工具,可以用来测量网络带宽和网络质量,提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。
Iperf 是一款基于命令行模式的网络性能测试工具,是跨平台的,提供横跨Windows、Linux、Mac的全平台支持。iperf 全程使用内存作为发送/接收缓冲区,不受磁盘性能的影响,对于机器配置要求很低。不过由于是命令行工具, iperf 不支持输出测试图形。
Iperf可以测试TCP和UDP带宽质量,具有多种参数和UDP特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能
2. 安装
iperf3安装iperf3下载:https://iperf.fr/iperf-download.php#fedora
[root@xiexianbin-cn ~]# rpm -ivh iperf3-3.1.3-1.fc24.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:iperf3-3.1.3-1.fc24 ################################# [100%]
3. 功能
(1)TCP方面
① 测量网络带宽
② 报告MSS/MTU值的大小和观测值
③ 支持TCP窗口值通过套接字缓冲
④ 当P线程或Win32线程可用时,支持多线程。客户端与服务端支持同时多重连接
(2)UDP方面
① 客户端可以创建指定带宽的UDP流
② 测量丢包
③ 测量延迟
④ 支持多播
⑤ 当P线程可用时,支持多线程。客户端与服务端支持同时多重连接(不支持Windows)
(3)其他方面
① 在适当的地方,选项中可以使用K(kilo-)和M(mega-)。例如131072字节可以用128K代替。
② 可以指定运行的总时间,甚至可以设置传输的数据总量。
③ 在报告中,为数据选用最合适的单位。
④ 服务器支持多重连接,而不是等待一个单线程测试。
⑤ 在指定时间间隔重复显示网络带宽,波动和丢包情况。
⑥ 服务器端可作为后台程序运行。
⑦ 服务器端可作为Windows 服务运行。
⑧ 使用典型数据流来测试链接层压缩对于可用带宽的影响。
4. 参数
4.1通用参数(Server端和Client端共用)
(1)-f,–farmat [k|m|g|K|M|G]:指定带宽输出单位,“[k|m|g|K|M|G]”分别表示以Kbits, Mbits, Gbits, KBytes, MBytes,GBytes显示输出结果,默认Mbits,eg:iperf3 -c 192.168.12.168 -f M
(2)-p,–port:指定服务器端监听的端口或客户端所连接的端口,默认是5001端口。
(3)-i,–interval:指定每次报告之间的时间间隔,单位为秒,eg:iperf3 -c 192.168.12.168 -i 2
(4)-F:指定文件作为数据流进行带宽测试。例如:iperf3 -c 192.168.12.168 -F web-ixdba.tar.gz
4.2、Server端专用参数
(1)-s,–server:iperf服务器模式,默认启动的监听端口为5201,eg:iperf -s
(2)-c,–client host:如果iperf运行在服务器模式,并且用-c参数指定一个主机,那么iperf将只接受指定主机的连接。此参数不能工作于UDP模式。
(3)-D:Unix平台下将Iperf作为后台守护进程运行。在Win32平台下,Iperf将作为服务运行。
(4)-R:卸载Iperf服务(仅用于Windows)。
(5)-o:重定向输出到指定文件(仅用于Windows)。
(6)-P,–parallel:服务器关闭之前保持的连接数。默认是0,这意味着永远接受连接。
4.3 Client端专用参数
(
1)-c,–client host:iperf客户端模式,host是server端地址,eg:iperf -c 222.35.11.23
(2)-u,–udp:表示采用UDP协议发送报文,不带该参数表示采用TCP协议。
(3)-b,–bandwidth [K|M|G]:指定UDP模式使用的带宽,单位bits/sec,默认值是1 Mbit/sec。
(4)-t,–time:指定数据传输的总时间,即在指定的时间内,重复发送指定长度的数据包。默认10秒。
(5)-l,–len:设置读写缓冲区的长度,单位为 Byte。TCP默认为8KB,UDP默认为1470字节。通常测试 PPS 的时候该值为16,测试BPS时该值为1400。
(6)-n,–num [K|M|G]:指定传输数据包的字节数,例如:iperf3 -c 192.168.12.168 –n 100M
(7)-P,–parallel:指定客户端与服务端之间使用的线程数。默认是1个线程。需要客户端与服务器端同时使用此参数。
(8)-w,–window:指定套接字缓冲区大小,在TCP方式下,此设置为TCP窗口的大小。在UDP方式下,此设置为接受UDP数据包的缓冲区大小,用来限制可以接收数据包的最大值
(9)-B,–bind:用来绑定一个主机地址或接口,这个参数仅用于具有多个网络接口的主机。在UDP模式下,此参数用于绑定和加入一个多播组。
(10)-M,–mss:设置TCP最大信息段的值
(11)-N,–nodelay:设置TCP无延时
(12)-V:绑定一个IPv6地址。
(13)-d,–dualtest:运行双测试模式。将使服务器端反向连接到客户端,使用-L参数中指定的端口(或默认使用客户端连接到服务器端的端口)。使用参数-r以运行交互模式。
(14)-L,–listenport:指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。
(15)-r,–tradeoff:往复测试模式。当客户端到服务器端的测试结束时,服务器端反向连接至客户端。当客户端连接终止时,反向连接随即开始。如果需要同时进行双向测试,请尝试-d参数。
4.4 其他参数
(1)-h,–help:显示命令行参考并退出。
[root]# iperf3 -h
Usage: iperf3 [-s|-c host] [options] iperf3 [-h|--help] [-v|--version]
(2)-v,–version:显示版本信息和编译信息并退出。
5. 示例
环境准备:
(1)Server端IP地址:192.168.211.40
(2)Server端IP地址:192.168.211.41
5.1 测试TCP吞吐量
Server端开启iperf的服务器模式,指定TCP端口:
root@master:~# iperf3 -s -i 1 -p 5201
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Client端启动iperf的客户端模式,连接服务端
root@node1:~# iperf3 -c 192.168.211.40 -i 1 -t 60 -p 5201
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 50818 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 176 MBytes 1.47 Gbits/sec 89 1.49 MBytes
[ 4] 1.00-2.01 sec 135 MBytes 1.13 Gbits/sec 0 1.63 MBytes
[ 4] 2.01-3.00 sec 160 MBytes 1.35 Gbits/sec 0 1.73 MBytes
[ 4] 3.00-4.00 sec 172 MBytes 1.44 Gbits/sec 15 1.28 MBytes
[ 4] 4.00-5.00 sec 154 MBytes 1.29 Gbits/sec 0 1.36 MBytes
[ 4] 5.00-6.00 sec 162 MBytes 1.36 Gbits/sec 0 1.43 MBytes
[ 4] 6.00-7.01 sec 164 MBytes 1.37 Gbits/sec 0 1.49 MBytes
Server端监听结果
root@master:~# iperf3 -s -i 1 -p 5201
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.211.41, port 50816
[ 5] local 192.168.211.40 port 5201 connected to 192.168.211.41 port 50818
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 168 MBytes 1.41 Gbits/sec
[ 5] 1.00-2.00 sec 136 MBytes 1.14 Gbits/sec
[ 5] 2.00-3.00 sec 158 MBytes 1.33 Gbits/sec
[ 5] 3.00-4.00 sec 174 MBytes 1.46 Gbits/sec
[ 5] 4.00-5.01 sec 154 MBytes 1.28 Gbits/sec
参数说明: ① Interval表示时间间隔。
② Transfer表示时间间隔里面转输的数据量。
③ Bandwidth是时间间隔里的传输速率。
执行20秒,每5秒执行一次
root@node1:~# iperf3 -c 192.168.211.40 -t 20 -i 5
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 51392 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-5.00 sec 700 MBytes 1.17 Gbits/sec 75 1.32 MBytes
[ 4] 5.00-10.00 sec 738 MBytes 1.24 Gbits/sec 0 1.59 MBytes
[ 4] 10.00-15.00 sec 729 MBytes 1.22 Gbits/sec 17 1.47 MBytes
[ 4] 15.00-20.00 sec 834 MBytes 1.40 Gbits/sec 249 1.25 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-20.00 sec 2.93 GBytes 1.26 Gbits/sec 341 sender
[ 4] 0.00-20.00 sec 2.93 GBytes 1.26 Gbits/sec receiver
iperf Done.
传输数据包5G,每10秒显示一次
root@node1:~# iperf3 -c 192.168.211.40 -i 10 -n 5G
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 51786 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-10.00 sec 988 MBytes 829 Mbits/sec 301 1.49 MBytes
[ 4] 10.00-20.00 sec 1.23 GBytes 1.06 Gbits/sec 18 1.65 MBytes
[ 4] 20.00-30.00 sec 1.39 GBytes 1.20 Gbits/sec 1 1.63 MBytes
[ 4] 30.00-40.00 sec 989 MBytes 829 Mbits/sec 18 1.74 MBytes
[ 4] 40.00-45.88 sec 459 MBytes 655 Mbits/sec 7 1.47 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-45.88 sec 5.00 GBytes 936 Mbits/sec 345 sender
[ 4] 0.00-45.88 sec 5.00 GBytes 936 Mbits/sec receiver
iperf Done.
-F指定文件,传输
root@node1:~# iperf3 -c 192.168.211.40 -i 2 -F hello-world.tar -t 20
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 52192 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-2.00 sec 187 MBytes 785 Mbits/sec 63 1.36 MBytes
[ 4] 2.00-3.29 sec 105 MBytes 684 Mbits/sec 0 1.53 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-3.29 sec 292 MBytes 746 Mbits/sec 63 sender
Sent 292 MByte / 293 MByte (99%) of hello-world.tar
[ 4] 0.00-3.29 sec 290 MBytes 741 Mbits/sec receiver
iperf Done.
“-P”参数开启了2个多线程
root@node1:~# iperf3 -c 192.168.211.40 -i 2 -P 2 -F hello-world.tar -t 20
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 52368 connected to 192.168.211.40 port 5201
[ 7] local 192.168.211.41 port 52370 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-2.00 sec 139 MBytes 583 Mbits/sec 41 650 KBytes
[ 7] 0.00-2.00 sec 174 MBytes 731 Mbits/sec 108 1.02 MBytes
[SUM] 0.00-2.00 sec 314 MBytes 1.31 Gbits/sec 149
- - - - - - - - - - - - - - - - - - - - - - - - -
[ 4] 2.00-3.64 sec 81.7 MBytes 417 Mbits/sec 0 731 KBytes
[ 7] 2.00-3.64 sec 112 MBytes 574 Mbits/sec 16 666 KBytes
[SUM] 2.00-3.64 sec 194 MBytes 991 Mbits/sec 16
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-3.64 sec 221 MBytes 508 Mbits/sec 41 sender
Sent 221 MByte / 293 MByte (75%) of hello-world.tar
[ 4] 0.00-3.64 sec 218 MBytes 502 Mbits/sec receiver
[ 7] 0.00-3.64 sec 287 MBytes 660 Mbits/sec 124 sender
Sent 287 MByte / 293 MByte (97%) of hello-world.tar
[ 7] 0.00-3.64 sec 285 MBytes 655 Mbits/sec receiver
[SUM] 0.00-3.64 sec 508 MBytes 1.17 Gbits/sec 165 sender
[SUM] 0.00-3.64 sec 503 MBytes 1.16 Gbits/sec receiver
iperf Done.
5.2 测试UDP吞吐量
带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用-b 100M进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。
root@node1:~# iperf3 -u -c 192.168.211.40 -b 100m -t 5 -p 5201
Connecting to host 192.168.211.40, port 5201
[ 4] local 192.168.211.41 port 56642 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 11.2 MBytes 94.2 Mbits/sec 1439
[ 4] 1.00-2.00 sec 12.2 MBytes 103 Mbits/sec 1564
[ 4] 2.00-3.00 sec 11.7 MBytes 97.9 Mbits/sec 1498
[ 4] 3.00-4.00 sec 11.7 MBytes 98.5 Mbits/sec 1499
[ 4] 4.00-5.00 sec 11.8 MBytes 98.9 Mbits/sec 1514
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 58.7 MBytes 98.4 Mbits/sec 0.283 ms 260/7514 (3.5%)
[ 4] Sent 7514 datagrams
iperf Done.
进行上下行带宽测试(双向传输)
root@node1:~# iperf3 -u -c 192.168.211.40 -b 100M -d -t 5
send_parameters:
{
"udp": true,
"omit": 0,
"time": 5,
"parallel": 1,
"len": 8192,
"bandwidth": 100000000,
"client_version": "3.1.3"
}
Connecting to host 192.168.211.40, port 5201
Setting fair-queue socket pacing to 12500000
[ 4] local 192.168.211.41 port 35492 connected to 192.168.211.40 port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 11.1 MBytes 92.6 Mbits/sec 1415
[ 4] 1.00-2.00 sec 11.7 MBytes 98.4 Mbits/sec 1501
[ 4] 2.00-3.00 sec 12.5 MBytes 105 Mbits/sec 1604
[ 4] 3.00-4.00 sec 11.9 MBytes 100 Mbits/sec 1529
send_results
{
"cpu_util_total": 33.363549,
"cpu_util_user": 0.629773,
"cpu_util_system": 32.748183,
"sender_has_retransmits": 0,
"streams": [{
"id": 1,
"bytes": 62136320,
"retransmits": -1,
"jitter": 0,
"errors": 0,
"packets": 7585
}]
}
get_results
{
"cpu_util_total": 7.860842,
"cpu_util_user": 0.309339,
"cpu_util_system": 7.578802,
"sender_has_retransmits": -1,
"streams": [{
"id": 1,
"bytes": 58638336,
"retransmits": -1,
"jitter": 0.000264,
"errors": 427,
"packets": 7585
}]
}
[ 4] 4.00-5.00 sec 12.0 MBytes 101 Mbits/sec 1536
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-5.00 sec 59.3 MBytes 99.4 Mbits/sec 0.264 ms 427/7585 (5.6%)
[ 4] Sent 7585 datagrams
iperf Done.
更多阅读: