jjzjj

iperf3网络测试工具

新猿异码 2023-12-10 原文

一、iperf能用来做什么

  1. 测量网络带宽和网络质量
  2. 提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息

二、iperf3主要功能介绍

TCP

  • 测试网络带宽
  • 支持多线程,在客户端与服务端支持多重连接
  • 报告MSS/MTU值的大小
  • 支持TCP窗口值自定义

UDP

  • 可以设置指定带宽的UDP数据流
  • 可以测试传输延时、丢包数
  • 支持多播测试
  • 支持多线程,在客户端与服务端支持多重连接

三、iperf3下载安装

官网下载链接:

四、iperf3参数说明

  • 通用参数
    • -p, --port #,Server 端监听、Client 端连接的端口号;
    • -f, --format [KMG],报告中所用的数据单位,Kbits, Mbits, KBytes, Mbytes;
    • -i, --interval #,每次报告的间隔,单位为秒;
    • -F, --file name,测试所用文件的文件名。如果使用在 Client 端,发送该文件用作测试;如果使用在 Server 端,则是将数据写入该文件,而不是丢弃;
    • -V, --verbose,运行时输出更多细节;
    • -J, --json,运行时以 JSON 格式输出结果;
    • -logfile f,输出到文件;
    • -d, --debug,以 debug 模式输出结果;
    • -v, --version,显示版本信息并退出;
    • -h, --help,显示帮助信息并退出。
  • Server 端参数:
    • -s, --server,以 Server 模式运行;
    • -D, --daemon,在后台以守护进程运行;
    • -I, --pidfile file,指定 pid 文件;
    • -1, --one-off,只接受 1 次来自 Client 端的测试,然后退出。
  • Client 端参数
    • -c, --client ,以 Client 模式运行,并指定 Server 端的地址
    • -u, --udp,以 UDP 协议进行测试
    • -b, --bandwidth #[KMG][/#],限制测试带宽。UDP 默认为 1Mbit/秒,TCP 默认无限制
    • -t, --time #,以时间为测试结束条件进行测试,默认为 10 秒
    • -n, --bytes #[KMG],以数据传输大小为测试结束条件进行测试
    • -k, --blockcount #[KMG],以传输数据包数量为测试结束条件进行测试;
    • -l, --len #[KMG],读写缓冲区的长度,TCP 默认为 128K,UDP 默认为 8K;
    • --cport ,指定 Client 端运行所使用的 TCP 或 UDP 端口,默认为临时端口;
    • -P, --parallel #,测试数据流并发数量;(多线程)
    • -R, --reverse,反向模式运行(Server 端发送,Client 端接收)
    • -w, --window #[KMG],设置套接字缓冲区大小,TCP 模式下为窗口大小;
    • -C, --congestion ,设置 TCP 拥塞控制算法(仅支持 Linux 和 FreeBSD );
    • -M, --set-mss #,设置 TCP/SCTP 最大分段长度(MSS,MTU 减 40 字节);
    • -N, --no-delay,设置 TCP/SCTP no delay,屏蔽 Nagle 算法;
    • -4, --version4,仅使用 IPv4;
    • -6, --version6,仅使用 IPv6;
    • -S, --tos N,设置 IP 服务类型(TOS,Type Of Service);
    • -L, --flowlabel N,设置 IPv6 流标签(仅支持 Linux);
    • -Z, --zerocopy,使用 “zero copy”(零拷贝)方法发送数据;
    • -O, --omit N,忽略前 n 秒的测试;
    • -T, --title str,设置每行测试结果的前缀;
    • --get-server-output,从 Server 端获取测试结果;
    • --udp-counters-64bit,在 UDP 测试包中使用 64 位计数器(防止计数器溢出)

五、iperf3的使用

 iperf服务端:iperf3 -s -p 8889,如下图则启动成功

 iperf3的TCP客户端:iperf3 -c 127.0.0.1 -p 8889 -b 30M -t 300

 iperf3的UDP客户端:iperf3 -u -c 127.0.0.1 -p 8889 -b 30M -t 300

在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据包和总的数据包数量 ,后面的0%是平均丢包的比率,“Datagrams”列显示的是总共传输数据包的数量。

 六、网络抖动和时延

网络延迟100ms以下算是正常的。

1、1~30ms:极快,几乎察觉不出有延迟,玩任何游戏速度专都特别顺畅。属

2、31~50ms:良好,可以正常游戏,没有明显的延迟情况。

3、51~100ms:普通,对抗类游戏能感觉出明显延迟,稍有停顿。

4、>100ms:差,无法正常游戏,有卡顿,丢包并掉线现象。

有关iperf3网络测试工具的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  10. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

随机推荐