zoukankan      html  css  js  c++  java
  • IPerf——网络测试工具介绍与源码解析(1)

    IPerf是一个开源的测试网络宽带并能统计并报告延迟抖动、数据包丢失率信息的控制台命令程序,通过参数选项可以方便地看出,通过设置不同的选项值对网络带宽的影响,对于学习网络编程还是有一定的借鉴意义,至少可以玩上一段时间。

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

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

    IPerf的一些特性:

    •  开源,每个版本的源码都能进行下载和研习;
    • 跨平台,支持Windows Linux MacOS Android,现有支持不同平台的IPerf版本,UWP,Docker...很早之前就出来了一个JPerf(在IPerf的基础上添加了界面),有兴趣的同学可以找来看看;
    • 支持TCP、UDP协议,包括IPV4和IPV6,最新的IPerf还支持SCTP协
      • TCP
        • 测试网络带宽;
        • 报告MSS(最大报文段长度)、MTU(最大传输单元)的大小,在Windows上不支持;
        • 支持通过套接字缓冲区修改TCP窗口大小;
        • 支持多线程并发;
      • UDP
        • 客户端可创建指定大小的带宽流;
        • 统计数据包丢失、延迟抖动率等信息

     IPerf的简单使用示例:

    IPerf通过选项 -c 和 -s 决定其当前是作为客户端程序还是作为服务端程序运行,当作为客户端程序运行时,-c 后面必须带所连接对端服务器的IP地址或域名

    上面图片显示三种信息:本地设置信息,连接信息,传输信息,究竟其在程序设计中是如何打印出来的,看完接下来的源码解析希望你能够明白其中的原理 :)

     下面列举一些比较常用的选项参数,想要知道更多的选项参数,请查看官方网站的文档说明

    选项参数  说明

    [客户端]

    -c host  以客户端模式运行,连接到IPerf服务端运行的主机IP地址或域名

    -t ; -i    -t(timing)测试的时长;-i(interval)带宽报告周期性显示的间隔时间

    -n  设置测试所发送的数据总量,#[KM] 覆盖-t选项

    -d, -L  双向测试模式,客户端与服务端建立双向连接,并相互发送数据进行测试

    -r, -L  交易模式,在客户端到服务端的测试结束后,执行服务端到客户端的测试

    -P  设置客户端同时连接到服务端的并发数(在多线程允许的条件下)

    [服务端]

    -s  以服务端模式运行,等待客户端的连接请求

    -D  Unix平台以后台守护程序运行;Windows平台下以服务形式运行

    -w  设置TCP窗口大小或UDP接收缓冲区大小为其指定的值

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/5426290.html
Copyright © 2011-2022 走看看