前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用iPerf进行网络吞吐量测试

使用iPerf进行网络吞吐量测试

作者头像
胡齐
发布2019-10-28 18:02:38
6.4K0
发布2019-10-28 18:02:38
举报
文章被收录于专栏:运维猫运维猫运维猫

iperf是一种命令行工具,用于通过测量服务器可以处理的最大网络吞吐量来诊断网络速度问题。它在遇到网络速度问题时特别有用,通过该工具可以确定哪个服务器无法达到最大吞吐量。

IPerf开始出现的时候是在03年,版本是基于1.7.0 进行介绍和解析的,貌似1.7.0还是使用C++编写比较多,后面到了IPerf2版本,C++和C结合,现在出来一个法国人团队另起炉灶重构出不向下兼容的IPerf3,他们开了一个论坛专门讨论维护,但因为是法语所以跟我也无法沟通,所以也没怎么上去看,一开始入门的时候就只能上处链接的文章,还好有所帮助。

现在IPerf的官方网站为:https://iperf.fr/

iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。

1、Centos安装iperf

 [root@docker-02 ~]# yum install iperf

2、如何使用iperf

1、必须在测试的两台计算机上同时安装iPerf。如果在个人计算机上使用基于Unix或 Linux的操作系统,则可以在本地计算机上安装iPerf。

2、但是,如果要测试网络提供商的吞吐量,最好使用另一台服务器作为终点,因为本地ISP可能会施加影响测试结果的网络限制。

3、TCP客户端和服务器

iperf需要两个系统,因为一个系统必须充当服务端,另外一个系统充当客户端,客户端连接到需要测试速度的服务端。

3.1在需要测试的两台电脑上,以服务器模式启动iperf

 #iperf -s
 ------------------------------------------------------------
 Server listening on TCP port 5001
 TCP window size: 85.3 KByte (default)
 ------------------------------------------------------------

3.2在第二台电脑上,以客户端模式启动iperf连接到第一台电脑,替换198.51.100.5为本地电脑的ip地址

 #iperf -c 198.51.100.5
 ------------------------------------------------------------
 Client connecting to 198.51.100.5, TCP port 5001
 TCP window size: 45.0 KByte (default)
 ------------------------------------------------------------
 [ 3] local 198.51.100.6 port 50616connected with 198.51.100.5 port 5001
 [ ID] Interval Transfer Bandwidth
 [ 3] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec

3.3这时可以在第一步中的服务端终端看到连接和结果

 ------------------------------------------------------------
 Server listening on TCP port 5001
 TCP window size: 85.3 KByte (default)
 ------------------------------------------------------------
 [ 4] local 198.51.100.5 port 5001connected with 198.51.100.6 port 50616
 [ ID] Interval Transfer Bandwidth
 [ 4] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec

要停止iperf服务进程,请按CTRL+c

4、UDP客户端和服务器

使用iperf,还可以测试通过UDP连接实现的最大吞吐量,这里我用两台linux服务器做实验。

4.1启动UDP iperf服务

 [root@docker-02 ~]# iperf -s -u
 ------------------------------------------------------------
 Server listening on UDP port 5001
 Receiving 1470byte datagrams
 UDP buffer size: 8.00 MByte (default)
 ------------------------------------------------------------

4.2将客户端连接到iperf UDP服务器

 [root@docker-02 ~]# iperf -c 172.17.120.50 -u
 ------------------------------------------------------------
 Client connecting to 172.17.120.50, UDP port 5001
 Sending 1470byte datagrams, IPG target: 11215.21 us (kalman adjust)
 UDP buffer size: 8.00 MByte (default)
 ------------------------------------------------------------
 [  3] local 172.17.120.51 port 41017connected with 172.17.120.50 port 5001
 read failed: Connection refused
 [  3] WARNING: did not receive ack of last datagram after 1tries.
 [ ID] Interval       Transfer     Bandwidth
 [  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
 [  3] Sent 892datagrams

1.05Mbits/sec远低于TCP测试中观察到的值,它也远远低于1GB 的最大出站贷款上限,这是因为默认情况下,iperf讲UDP客户端的贷款限制为每秒1Mbit。

可以用-b标志更改此值,将数字替换为要测试的最大带宽速率。如果需要测试网络速度,可以将数字设置为高于网络提供商提供的最大带宽上线:

 [root@docker-02 ~]# iperf -c 172.17.120.50 -u -b 1000m
 ------------------------------------------------------------
 Client connecting to 172.17.120.50, UDP port 5001
 Sending 1470byte datagrams, IPG target: 11.76 us (kalman adjust)
 UDP buffer size: 8.00 MByte (default)
 ------------------------------------------------------------
 [  3] local 172.17.120.51 port 46870connected with 172.17.120.50 port 5001
 read failed: Connection refused
 [  3] WARNING: did not receive ack of last datagram after 5tries.
 [ ID] Interval       Transfer     Bandwidth
 [  3]  0.0-10.0 sec  1.16 GBytes  1000Mbits/sec
 [  3] Sent 850341datagrams

这将告诉客户端我们希望尽可能达到每秒1000Mbits的最大值,该-b标志仅在使用UDP连接时有效,因为iperf未在TCP客户端上设置带宽限制。

5、双向测试

在某些情况下,可能希望测试两台服务器以获得最大吞吐量。使用iperf提供的内置双向测试功能可以轻松完成此测试。

5.1要测试两个连接,从客户端运行一下命令,替换ip为服务端ip地址

 #iperf -c 198.51.100.5 -d
 ------------------------------------------------------------
 Server listening on TCP port 5001
 TCP window size: 85.3 KByte (default)
 ------------------------------------------------------------
 ------------------------------------------------------------
 Client connecting to 198.51.100.5, TCP port 5001
 TCP window size: 351KByte (default)
 ------------------------------------------------------------
 [ 3] local 198.51.100.6 port 50618connected with 198.51.100.5 port 5001
 [ 5] local 198.51.100.6 port 5001connected with 198.51.100.5 port 58650
 [ ID] Interval Transfer Bandwidth
 [ 5] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec
 [ 3] 0.0-10.2 sec 1.28 GBytes 1.08 Gbits/sec

结果是iperf将在客户端服务器上启动服务器和客客户端(198.51.100.6)连接。完成此操作后,iperf会将iperf服务器连接到客户端,该连接现在既充当服务器连接又充当客户端连接。

5.2在服务器是哪个,可以看到

 ------------------------------------------------------------
 Client connecting to 198.51.100.6, TCP port 5001
 TCP window size: 153KByte (default)
 ------------------------------------------------------------
 [ 6] local 198.51.100.5 port 58650connected with 198.51.100.6 port 5001
 [ 6] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec
 [ 5] 0.0-10.2 sec 1.28 GBytes 1.08 Gbits/sec

6、常用选项

选项

描述

-F

更改运行测试的格式。例如,您可以使用-f k以每秒Kbits而不是每秒Mbits的速度获得结果。有效选项包括m(Mbits,默认),k(Kbits),K(KBytes)和M(MBytes)。

-V

强制iPerf使用IPv6而不是IPv4。

-i

更改带宽测试之间的间隔。例如,-i 60将每60秒生成一个新的带宽报告。默认值为零,执行一次带宽测试。

-p

更改端口。未指定时,默认端口为5001.您必须在客户端和服务器上都使用此标志。

-B

将iPerf绑定到特定的接口或地址。如果通过server命令传递,则将设置传入接口。如果通过client命令传递,则将设置传出接口。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Centos安装iperf
  • 2、如何使用iperf
  • 3、TCP客户端和服务器
    • 3.1在需要测试的两台电脑上,以服务器模式启动iperf
      • 3.2在第二台电脑上,以客户端模式启动iperf连接到第一台电脑,替换198.51.100.5为本地电脑的ip地址
        • 3.3这时可以在第一步中的服务端终端看到连接和结果
        • 4、UDP客户端和服务器
          • 4.1启动UDP iperf服务
            • 4.2将客户端连接到iperf UDP服务器
            • 5、双向测试
              • 5.1要测试两个连接,从客户端运行一下命令,替换ip为服务端ip地址
                • 5.2在服务器是哪个,可以看到
                • 6、常用选项
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档