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.

更多阅读:

Copyright © ghostwritten 浙ICP备2020032454号 2022 all right reserved,powered by Gitbook该文件修订时间: 2022-06-14 05:17:02

results matching ""

    No results matching ""