前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >lperf3-网络测试工具

lperf3-网络测试工具

作者头像
胡齐
发布2019-11-19 20:02:29
7.3K0
发布2019-11-19 20:02:29
举报
文章被收录于专栏:运维猫运维猫

1、简介

Iperf3 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失.对于每个测试,它都会报告带宽,丢包和其他参数,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。

软件下载地址:https://iperf.fr/iperf-download.php

2、Iperf3的主要功能

TCP方面

1. 测试网络带宽。

2. 支持多线程,在客户端与服务端支持多重连接。

3. 报告MSS/MTU值的大小。

4.支持TCP窗口值自定义并可通过套接字缓冲。

UDP方面

1. 可以设置指定带宽的UDP数据流。

2. 可以测试网络抖动值、丢包数。

3. 支持多播测试。

4. 支持多线程,在客户端与服务端支持多重连接。

3、安装lperf3

 在CentOS 7上使用下列命令即可安装:
 # yum install iperf3
 
 在ubuntu 上使用下列命令安装:
 # apt-get install iperf3
 
 windows端安装:
 #下载解压安装包,进入dos切换到iperf3解压目录,执行iperf3即可运行.

4、Iperf应用实例

要使用iperf,首先要启用一个服务端,这里假定服务端的IP地址为172.17.120.13,在此服务器上运行“iperf3 -s”即可开启iperf的服务器模式。在默认情况下,iperf3将在服务端打开一个5201监听端口,此时就可以将另一台服务器作为客户端执行iperf功能测试了。

 [root@serverb ~]# iperf3 -s
 warning: this system does not seem to support IPv6 -trying IPv4
 -----------------------------------------------------------
 Server listening on 5201
 -----------------------------------------------------------

5、测试TCP吞吐量

1.为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图1是一个最简单的带宽测试命令。
 [root@servera ~]# iperf3 -c 172.17.120.13
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33842connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-1.00   sec   212MBytes  1.78 Gbits/sec  258   234KBytes       
 [  4]   1.00-2.00   sec   213MBytes  1.79 Gbits/sec  275   178KBytes       
 [  4]   2.00-3.00   sec   216MBytes  1.81 Gbits/sec  237   198KBytes       
 [  4]   3.00-4.00   sec   219MBytes  1.84 Gbits/sec  246   327KBytes       
 [  4]   4.00-5.00   sec   220MBytes  1.85 Gbits/sec  220   262KBytes       
 [  4]   5.00-6.00   sec   218MBytes  1.83 Gbits/sec  217   334KBytes       
 [  4]   6.00-7.00   sec   218MBytes  1.83 Gbits/sec  374   271KBytes       
 [  4]   7.00-8.00   sec   217MBytes  1.82 Gbits/sec  249   231KBytes       
 [  4]   8.00-9.00   sec   217MBytes  1.82 Gbits/sec  316   224KBytes       
 [  4]   9.00-10.00 sec   218MBytes  1.83 Gbits/sec  238   278KBytes       
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-10.00 sec  2.12 GBytes  1.82 Gbits/sec  2630            sender
 [  4]   0.00-10.00 sec  2.12 GBytes  1.82 Gbits/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##可以看出,iperf默认的运行时间是10秒钟,每隔一秒钟输出一次传输状态,同时还可以看到每秒钟传输的数据量在218MB左右,刚好与“Bandwidth”列的值对应起来,网卡的带宽速率维持在1.82 Gbits/sec左右,而测试的服务器是千兆网卡,这个测试值也基本合理。在输出的最后,iperf还给出了总的数据发送、接收量,并给出了带宽速率平均值,通过这些值,基本可以判断网络带宽是否正常,网络传输状态是否稳定。
2.iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现。
 [root@servera ~]# iperf3 -c 172.17.120.13 -t 20 -i 5
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33846connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-5.00   sec  1.05 GBytes  1.80 Gbits/sec  1192   250KBytes       
 [  4]   5.00-10.00 sec  1.06 GBytes  1.82 Gbits/sec  1219   182KBytes       
 [  4]  10.00-15.00 sec  1.06 GBytes  1.83 Gbits/sec  1012   191KBytes       
 [  4]  15.00-20.00 sec  1.06 GBytes  1.82 Gbits/sec  1237   254KBytes       
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-20.00 sec  4.23 GBytes  1.82 Gbits/sec  4660            sender
 [  4]   0.00-20.00 sec  4.23 GBytes  1.82 Gbits/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##可以看出,输出状态的间隔变为每5秒钟一次,总共执行测试时间为20秒,测试的带宽速率仍然保持在1.82 Gbits/sec左右,唯一变化的是失败重传次数增加了。
3.为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后,自动结束。
 [root@servera ~]# iperf3 -c 172.17.120.13 -i 10 -n 5000000000
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33850connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-10.00 sec  2.11 GBytes  1.81 Gbits/sec  2308   250KBytes       
 [  4]  10.00-20.00 sec  2.11 GBytes  1.81 Gbits/sec  2471   240KBytes       
 [  4]  20.00-22.08 sec   448MBytes  1.81 Gbits/sec  560   212KBytes       
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-22.08 sec  4.66 GBytes  1.81 Gbits/sec  5339            sender
 [  4]   0.00-22.08 sec  4.65 GBytes  1.81 Gbits/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##iperf客户端通过“-n”参数指定要传输的数据量。指定发送一个5GB左右的数据包,并且每隔10秒钟输出一次传输状态,从这个输出可以看出,当失败重传次数较多时,传输速率急速下降。
4.有时候,为了模拟更真实的TCP应用,iperf客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现。
 [root@servera opt]# iperf3 -c 172.17.120.13 -F jdk-8u91-linux-x64.tar.gz -i 5 -t 20
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33874connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-0.36   sec  73.6 MBytes  1.72 Gbits/sec   84   225KBytes       
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-0.36   sec  73.6 MBytes  1.72 Gbits/sec   84            sender
       Sent 73.6 MByte /  173MByte (42%) of jdk-8u91-linux-x64.tar.gz
 [  4]   0.00-0.36   sec  72.3 MBytes  1.69 Gbits/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##iperf客户端通过“-F”参数指定文件来发送数据。通过“-F”参数指定了一个jdk-8u91-linux-x64.tar.gz文件作为iperf要传输的数据,在使用此参数时,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间10秒内,这个文件可能还没有传完。
5.在使用iperf进行网络带宽测试时,如果没有指定发送方式,iperf客户端只会使用一个单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。
 [root@servera opt]# iperf3 -c 172.17.120.13 -n 2000000000 -i 5 -f M
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33878connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-5.00   sec  1.05 GBytes   216MBytes/sec  2370   272KBytes       
 [  4]   5.00-8.84   sec   830MBytes   216MBytes/sec  886   207KBytes       
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-8.84   sec  1.86 GBytes   216MBytes/sec  3256            sender
 [  4]   0.00-8.84   sec  1.86 GBytes   215MBytes/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##为了速率单位统一,这里使用“-f”参数将输出结果都通过MBytes来显示。传输1.86GBytes的数据消耗了8.84秒的时间,平均带宽速率为216 MBytes/sec(注意单位)。
6.使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速率。
 [root@servera opt]# iperf3 -c 172.17.120.13 -n 2000000000 -i 5 -P 2 -f M
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 33882connected to 172.17.120.13 port 5201
 [  6] local 172.17.120.12 port 33884connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Retr Cwnd
 [  4]   0.00-5.00   sec   531MBytes   106MBytes/sec  804   195KBytes       
 [  6]   0.00-5.00   sec   560MBytes   112MBytes/sec  846   265KBytes       
 [SUM]   0.00-5.00   sec  1.07 GBytes   218MBytes/sec  1650            
 -------------------------
 [  4]   5.00-8.71   sec   407MBytes   110MBytes/sec  639   170KBytes       
 [  6]   5.00-8.71   sec   410MBytes   111MBytes/sec  634   202KBytes       
 [SUM]   5.00-8.71   sec   817MBytes   220MBytes/sec  1273            
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Retr
 [  4]   0.00-8.71   sec   938MBytes   108MBytes/sec  1443            sender
 [  4]   0.00-8.71   sec   936MBytes   108MBytes/sec                 receiver
 [  6]   0.00-8.71   sec   970MBytes   111MBytes/sec  1480            sender
 [  6]   0.00-8.71   sec   968MBytes   111MBytes/sec                 receiver
 [SUM]   0.00-8.71   sec  1.86 GBytes   219MBytes/sec  2923            sender
 [SUM]   0.00-8.71   sec  1.86 GBytes   219MBytes/sec                 receiver
 
 iperf Done.
 --------------------------------------------------------------------------
 ##这里通过“-P”参数开启了2个多线程,从传输时间上看,传输1.86GBytes的数据,消耗时间为8.71秒,比之前单线程的传输时间少了近0.07秒钟,在平均带宽速率上,从之前单线程的216 MBytes/sec提高到219 MBytes/sec,从这个结果可以看出,多线程对网络传输性能的提高不小。

6、测试UDP丢包和延迟

1.iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能。
 [root@servera opt]# iperf3 -c 172.17.120.13 -u -b 100M -f M -i 3
 Connecting to host 172.17.120.13, port 5201
 [  4] local 172.17.120.12 port 50680connected to 172.17.120.13 port 5201
 [ ID] Interval           Transfer     Bandwidth       Total Datagrams
 [  4]   0.00-3.00   sec  34.6 MBytes  11.5 MBytes/sec  24875 
 [  4]   3.00-6.00   sec  35.8 MBytes  11.9 MBytes/sec  25738 
 [  4]   6.00-9.00   sec  35.7 MBytes  11.9 MBytes/sec  25633 
 [  4]   9.00-10.00 sec  11.9 MBytes  11.9 MBytes/sec  8561 
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Jitter   Lost/Total Datagrams
 [  4]   0.00-10.00 sec   118MBytes  11.8 MBytes/sec  0.053 ms  26431/84807 (31%)  
 [  4] Sent 84807datagrams
 
 iperf Done.
 --------------------------------------------------------------------------
 ##iperf传输100MB的UDP数据包的输出结果。重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据报和总的数据报数量,后面的31%是平均丢包的比率,“Datagrams”列显示的是总共传输数据报的数量。
2.这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态。
 [root@serverb ~]# iperf3 -s -i 3
 iperf3: OUT OF ORDER -incoming packet =84786and received packet =84793AND SP =5
 iperf3: OUT OF ORDER -incoming packet =84788and received packet =84793AND SP =5
 iperf3: OUT OF ORDER -incoming packet =84790and received packet =84793AND SP =5
 iperf3: OUT OF ORDER -incoming packet =84792and received packet =84793AND SP =5
 [  5]   9.00-10.04 sec  11.9 MBytes  96.1 Mbits/sec  0.009 ms  3682/8550 (43%)  
 -------------------------
 [ ID] Interval           Transfer     Bandwidth       Jitter   Lost/Total Datagrams
 [  5]   0.00-10.04 sec  0.00 Bytes  0.00 bits/sec  0.009 ms  31126/84793 (37%)  
 [SUM]  0.0-10.0 sec  31126datagrams received out-of-order
 -----------------------------------------------------------
 Server listening on 5201
 -----------------------------------------------------------
 --------------------------------------------------------------------------
 ##在这个输出中,详细记录了在传输过程中,每个阶段的传输延时和丢包率,在UDP应用中随着传输数据的增大,丢包率和延时也随之增加。对于延时和丢包可以通过改变应用程序来缓解或修复,例如视频流应用,可以通过缓存数据的方式而可以容忍更大的延时。

7、JSON 格式输出

如果需要做一些自动化方面测试和管理工作,需要读取格式化的测试结果,那可以选择-J参数,来输出JSON格式测试结果。

 [root@servera opt]# iperf3 -c 172.17.120.13 -J -t 2
 {
 "start":{
 "connected":[{
 "socket":4,
 "local_host":"172.17.120.12",
 "local_port":33892,
 "remote_host":"172.17.120.13",
 "remote_port":5201
 }],
 "version":"iperf 3.1.7",
 "system_info":"Linux servera 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64",
 "timestamp":{
 "time":"Mon, 18 Nov 2019 14:57:35 GMT",
 "timesecs":1574089055
 },
 "connecting_to":{
 "host":"172.17.120.13",
 "port":5201
 },
 "cookie":"servera.1574089055.168685.57df3fda7b",
 "tcp_mss_default":1460,
 "test_start":{
 "protocol":"TCP",
 "num_streams":1,
 "blksize":131072,
 "omit":0,
 "duration":2,
 "bytes":0,
 "blocks":0,
 "reverse":0
 }
 },
 "intervals":[{
 "streams":[{
 "socket":4,
 "start":0,
 "end":1.000089,
 "seconds":1.000089,
 "bytes":223387300,
 "bits_per_second":1.786939e+09,
 "retransmits":219,
 "snd_cwnd":309520,
 "rtt":1287,
 "omitted":false
 }],
 "sum":{
 "start":0,
 "end":1.000089,
 "seconds":1.000089,
 "bytes":223387300,
 "bits_per_second":1.786939e+09,
 "retransmits":219,
 "omitted":false
 }
 }, {
 "streams":[{
 "socket":4,
 "start":1.000089,
 "end":2.000118,
 "seconds":1.000029,
 "bytes":223362480,
 "bits_per_second":1.786848e+09,
 "retransmits":254,
 "snd_cwnd":194180,
 "rtt":757,
 "omitted":false
 }],
 "sum":{
 "start":1.000089,
 "end":2.000118,
 "seconds":1.000029,
 "bytes":223362480,
 "bits_per_second":1.786848e+09,
 "retransmits":254,
 "omitted":false
 }
 }],
 "end":{
 "streams":[{
 "sender":{
 "socket":4,
 "start":0,
 "end":2.000118,
 "seconds":2.000118,
 "bytes":446749780,
 "bits_per_second":1.786894e+09,
 "retransmits":473,
 "max_snd_cwnd":309520,
 "max_rtt":1287,
 "min_rtt":757,
 "mean_rtt":1022
 },
 "receiver":{
 "socket":4,
 "start":0,
 "end":2.000118,
 "seconds":2.000118,
 "bytes":445289780,
 "bits_per_second":1.781054e+09
 }
 }],
 "sum_sent":{
 "start":0,
 "end":2.000118,
 "seconds":2.000118,
 "bytes":446749780,
 "bits_per_second":1.786894e+09,
 "retransmits":473
 },
 "sum_received":{
 "start":0,
 "end":2.000118,
 "seconds":2.000118,
 "bytes":445289780,
 "bits_per_second":1.781054e+09
 },
 "cpu_utilization_percent":{
 "host_total":7.686052,
 "host_user":0.939716,
 "host_system":7.196450,
 "remote_total":0.152400,
 "remote_user":0.016691,
 "remote_system":0.137075
 },
 "sender_tcp_congestion":"cubic",
 "receiver_tcp_congestion":"cubic"
 }
 }

8、总结

缺省iperf3使用上传模式:Client负责发送数据,Server负责接收;如果需要测试下载速度,则在Client侧使用-R参数即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、简介
  • 2、Iperf3的主要功能
  • 3、安装lperf3
  • 4、Iperf应用实例
  • 5、测试TCP吞吐量
    • 1.为了确定网卡的最大吞吐量,可以在任意客户端运行iperf命令,iperf将尝试从客户端尽可能快地向服务端发送数据请求,并且会输出发送的数据量和网卡平均带宽值。图1是一个最简单的带宽测试命令。
      • 2.iperf提供很多参数,可以多角度、全方位地测试网络带宽利用率,例如,要改变iperf运行的时间和输出频率,可以通过“-t”和“-i”参数来实现。
        • 3.为了模拟大量的数据传输,也可以指定要发送的数据量,这可以通过“-n”参数来实现。在指定“-n”参数后,“-t”参数失效,iperf在传输完毕指定大小的数据包后,自动结束。
          • 4.有时候,为了模拟更真实的TCP应用,iperf客户端允许从一个特定的文件发送数据,这可以通过“-F”参数实现。
            • 5.在使用iperf进行网络带宽测试时,如果没有指定发送方式,iperf客户端只会使用一个单一的线程,而iperf是支持多线程的,可以使用iperf提供的“-P”参数来设置多线程的数目,通过使用多线程,可以在一定程度上增加网络的吞吐量。
              • 6.使用多线程后,iperf传输同样大小数据量所消耗的时间和平均带宽速率。
              • 6、测试UDP丢包和延迟
                • 1.iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能。
                  • 2.这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态。
                  • 7、JSON 格式输出
                  • 8、总结
                  相关产品与服务
                  数据传输服务
                  腾讯云数据传输服务(Data Transfer Service,DTS)可帮助用户在业务不停服的前提下轻松完成数据库迁移上云,利用实时同步通道轻松构建高可用的数据库多活架构,通过数据订阅来满足商业数据挖掘、业务异步解耦等场景需求。同时,DTS 还提供私有化独立输出版本 DTS-DBbridge,支持异构数据库和同构数据库之间迁移和同步,可以帮助企业实现完整数据库迁移(如 Oracle)。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档