流量发生器 (Traffic Generator) 是用来检测网络性能,进行网络相关研究的一个很重要的工具。大家可能用过Iperf或者IxChariot,前者是类UNIX环境下的一个免费、开源的网络性能测试工具,主要用来测试链路速率;后者则是一个非常专业的商业工具,拥有非常友好的图形界面。

作为网络工程师和研究人员,有时我们可能会需要一些具有特定功能的流量发生器,但是目前网络上可以找到的相关工具非常之多,各个软件的使用方式有怎样的不同,到底哪个才是符合自己的要求的呢?这里,我们对目前网络上能够找到的免费的流量发生器进行一个综合性的介绍,希望能够对读者有所帮助。

我们将考察的流量发生器包括以下这些:

  • Mtools
  • MGEN
  • RUDE & CRUDE
  • UDPgen
  • Iperf
  • D-ITG
  • UDP Generator
  • Network Traffic Generator
  • MxTraf
  • NTGen
  • Netperf
  • Traffic Generator Tool
  • TfGen
  • Packet Shell
  • Real-Time Voice Traffic Generator
  • Self Similar Traffic Generator
  • PacGen
  • IPGen
  • IP-Packet
  • GenSyn
  • Netspec
  • Surge
  • Poisson Traffic Generator
  • FTP traffic Generator
  • Brawny and Rough Udp Traffic Engine
  • Jugi’s Traffic Generator (jtg)
  • TrafGen
  • SPAK, Packet Generator
  • TTCP, Test TCP
  • PIM-SM, Protocol Independent Multicast Packet Generator
  • KUTE – Kernel-based Traffic Engine
  • GEIST – Generator of E-commerce and Internet server Traffic
  • Ostinato
  • Trafgen (part of netsniff-ng)
  • epb – Ethernet Packet Bombardier

为了防止链接今后失效,我所有的软件都存储到了个人的百度网盘分享目录里(http://pan.baidu.com/share/home?uk=3976462948),各位读者可以前往下载。

1. Mtools


基本信息

  • 软件名称:Mtools
  • 软件定位:UDP流量发生器
  • 软件主页:http://www.grid.unina.it/grid/mtools/
  • 最新版本:1.12
  • 最后更新时间:2002年8月
  • 操作系统:Linux / FreeBSD
  • 操作界面:命令行

Mtools有两种基本的工作模式:单向时延测量 (One-way-delay Meter, OWDM) 和往返时延测量 (Rount-trip-time Meter, RTTM)。两种工作模式都很简单:

  • 在单向时延测量模式中,发送者发送一个UDP报文,并且记录下发送的时间,接收者在收到UDP报文后,也记录下当前的系统时间,两者之差就是单向时延
  • 在往返时延测量模式中,发送者发送一个UDP报文,并且记录下发送的时间,接受者在收到UDP报文后,什么也不记录,但是回传一个报文,发送者在收到该回传报文后记录下当前的系统时间,两者之差就是往返时延 (Rount-trip-time, RTT)

Mtools支持不同的随机分布,相邻两个报文之间的发送间隔可以是一个常量,也可以服从均匀分布、指数分布、帕累托 (Pateto) 分布;此外UDP报文的有效负荷大小 (payload) 也可以是一个常量,或者符合均匀分布或者指数分布。

由于发布时间比较早,目前Mtools已经不能在较新的Linux环境 (如 Ubuntu 10.04 / gcc 4.4) 下直接编译通过了,需要进行一定的修改,因此这里就不放出相关的截图了。

2. MGEN


基本信息

  • 软件名称:MGEN
  • 软件定位:综合流量发生器
  • 软件主页:http://cs.itd.nrl.navy.mil/work/mgen/ (大陆用户需要翻墙)
  • 最新版本:5.02
  • 最后更新时间:2011年4月
  • 操作系统:Windows / Linux / Mac OS
  • 操作界面:命令行 / 脚本

MGEN (Multi-Generator) 是由美国海军实验室 (United States Naval Research Laboratory) 开发的一款功能强大的开源流量发生器,通过产生TCP / UDP流量测试网络的性能。

MGEN同时支持TCP和UDP、单播和组播、IPv4和IPv6,用户通过编写脚本控制流量发生器的运行,运行完成后产生的日志可以用于进一步的分析,用于计算时延、吞吐量、丢包率等参数。此外,MGEN还支持像ns-2、OPNET这样的仿真环境。在ns-2环境中,用户可以建立MGEN Agent,并且使用TCL脚本对其进行配置。

对于一个流量发生器,通常用户最关心的是它可以产生什么样的流量。在MGEN发布的可执行文件压缩包 (如win32-mgen-5.02.zip中) 里面有一份详细的文档:MGEN User’s and Reference Guide Version 5.0,里面有详细的描述。

根据这个文档,MGEN支持的流量模式 (Pattern)有以下几种:

  • Periodic: 恒定速率数据流,每秒发送n个消息,每个消息的大小为c字节
  • Poisson: 泊松数据流,以随机变化的间隔发送消息,每个消息的大小为c字节,发送的平均速率为n 消息/s,间隔时间符合泊松分布
  • Burst: 组合数据流,该模式以指定的间隔,如每隔2秒,或者指数分布平均5秒,启动另一个数据流 (Pattern),并且可以指定子数据流的持续时间
  • Jitter: 抖动数据流,发送大小为c字节的消息,平均发送速率为 n 消息/s,另外还有一个抖动参数j,其值在0.0 到 0.5 之间,当值为0.5的时候,发送间隔会在平均间隔的 [50%, 150%] 间浮动
  • Clone: 克隆数据流,读取tcpdump格式的文件,并且按照文件指定的间隔和大小发送消息

我们新建一个最简单的脚本文件,发送者向127.0.0.1地址的5000端口发送大小为512字节的报文,每秒发送一个,总共持续3秒,文件名为 simple.mgn,如下所示 (注意最后必须加一个换行符)

# Sender
0.0 ON 1 UDP SRC 5001 DST 127.0.0.1/5000 PERIODIC [1 512]
3.0 OFF 1 # Receiver
0.0 LISTEN UDP 5000

然后执行该脚本:

mgen txlog input simple.mgn

然后就可以看到执行结果了。默认情况下MGEN是不输出SEND消息的,txlog参数保证所有的SEND消息都在日志中进行输出。对MGEN的介绍到此为止,更复杂的功能就有待读者自己尝试了。

3. RUDE & CRUDE


基本信息

  • 软件名称:RUDE & CRUDE
  • 软件定位:实时UDP流量发生器
  • 软件主页:http://rude.sourceforge.net/
  • 最新版本:0.70
  • 最后更新时间:2002年9月
  • 操作系统:Linux
  • 操作界面:命令行 / 脚本

RUDE 的全称是 Real-time UDP Data Emitter,CRUDE 的全称是 Collector for RUDE,因此实际上RUDE和CRUDE分别是流量发生器的发送端和接收端,并且只支持UDP数据。

RUDE / CRUDE 的配置和操作和MGEN有些类似,但是并没有使用MGEN的代码。RUDE / CRUDE 设计的初衷是解决MGEN中存在的操作精度问题。在x86 Linux下,通常时间片的取值为10ms,因此定时操作的精度是非常有限的,而该软件通过特殊的设计避免了这个问题。

虽然发布时间比较久远了,但是 rude-0.70 依然能够在 Ubuntu 10.04 下编译成功,但是图形界面不能用了。编译安装完成后,执行rude会看到以下的提示:

执行 crude –h 则会看到以下的提示:

在RUDE源码压缩包的 rude/DOC 目录下有一份示例脚本 example.cfg,我们还是把它精简精简,建立一个最简单的测试脚本,命名为 simple.cfg:

START NOW
1000 0030 ON 5001 127.0.0.1:5000 CONSTANT 1 512
3000 0030 OFF

首先打开接收端CRUDE:

crude -p 5000

然后打开发送端:

rude -s simple.cfg

随后就可以看到执行结果了:

4. UDPgen


UDPgen的官方网站 http://www.fokus.fhg.de/usr/sebastian.zander/private/udpgen 目前已经无法访问了,然而目前GitHub上存在名称同为udpgen的项目,其网址为 https://github.com/steerapi/udpgen,该项目仅包含两个文件:udpgen.c 和 README,最后更新时间为2011年。其中README的内容如下所示:

 Description:

 A simple  UDP TRAFFIC GENERATOR
Evaluate % of successful packets compared to transmitted packets Compilation: gcc udpgen.c -o udpgen -O3 There are two types of unsuccessful packages
1. Loss or drop by lower layers.
2. Fail the checksum.
This program counts both losses. Usage: ./udpgen [-v] -[s|c] [-n NUM_PACKET] [-l PACKET_LENGTH_IN_BYTES] [-b BANDWIDTH_IN_BYTES_PER_SEC] IPADDRESS PORT
-v means verbose
-s means server
-c means client e.g.
./udpgen -vcl 1000 -b 10000 127.0.0.1 5556
./udpgen -vsl 1000 127.0.0.1 5556

这里就不再对其进行介绍了。

5. Iperf


基本信息

  • 软件名称:Iperf
  • 软件定位:TCP / UDP 带宽测试工具
  • 软件主页:http://iperf.fr/
  • 最新版本:2.0.5
  • 最后更新时间:2010年7月
  • 操作系统:Windows / Linux / Mac OS / Solaris
  • 操作界面:命令行 /

Iperf 直到今天仍然是一个非常常用的工具,几乎所有的Linux发行版,包括OpenWRT等嵌入式Linux发行版都对其提供支持,Linux之外的Windows、Mac OS等平台上当然也能够运行。Iperf还有一个基于Java的图形界面版本,叫Jperf,后者基本上就是命令行的简单封装,特别需要直接观察速率曲线的用户可以试试。

Iperf 最常见的应用就是测量链路带宽。比如说当买了个千兆以太网卡,或者新的802.11ac路由器时,使用 Iperf 能够快速地对网络的吞吐性能进行评估。

Iperf 有两种工作模式:TCP 和 UDP。Iperf 的默认工作模式为TCP,当在这个模式下工作时,Iperf 客户端会试图以最大的速率向服务器发送数据,用户可以指定一些常见的参数,如窗口大小等。

在下面的例子中,我们首先在路由器中启动 Iperf 服务器,并将TCP窗口大小设置为1MB:

iperf -s -w 1M

然后在PC上启动 Iperf 客户端,并设置统计的间隔为一秒钟:

iperf -c 192.168.1.1 -w 1M -i 1

按下回车后,带宽测试就开始了,运行结果如下图所示:

客户端会每隔一秒汇报一下测量所得的带宽值,而服务器则是在整个测试完成后汇报平均值。

如果工作模式为UDP,那么运行服务器时需要指定-u参数:

iperf -u -s

客户端除了-u参数之外,还需要指定发送的速率,否则会以1Mbps的默认速率发送,这也意味着此时会产生一个基于UDP的CBR数据流:

iperf -u -c 192.168.1.1 -b 3M -i 1

在UDP模式下,Iperf 会额外汇报整个测试的时延、丢包率等情况,这里就不再展示了。

6. D-ITG


基本信息

  • 软件名称:D-ITG (Distributed Internet Traffic Generator)
  • 软件定位:综合流量发生器
  • 软件主页:http://traffic.comics.unina.it/software/ITG/
  • 最新版本:2.8.1
  • 最后更新时间:2013年7月
  • 操作系统:Windows / Linux / Mac OS / FreeBSD
  • 操作界面:命令行 / 脚本

D-ITG是意大利某大学(Universita' degli Studi di Napoli ''Federico II'')的一个小组开发的一个功能强大的流量发生器。通过对报文大小(Packet Size)、报文间隔(Inter Departure Time)的随机模型进行建模,D-ITG可以产生不同特征的流量。一些预置的类型包括:

  • Telnet
  • VoIP (G.711, G.723, G.729)
  • Voice Activity Detection
  • Compressed RTP – DNS
  • 网络游戏

D-ITG支持的传输协议包括:

  • TCP
  • UDP
  • SCTP (Stream Control Transmission Protocol)
  • DCCP (Datagram Congestion Control Protocol)
  • ICMP

D-ITG支持类似FTP中的“被动模式”,因此可以用于存在NAT的环境中。此外,D-ITG还支持设置IP报文中的TOS和TTL字段。

D-ITG的总体架构如下图所示:

其中的每一个组件实际上都是一个可执行文件。ITGSend程序用于发送数据;ITGRecv用于接收数据;ITGLog用于记录流量日志;ITGDec用于对日志进行分析,对吞吐量、时延等参数进行分析,作者称之为解码(Decode);ITGManager与远程控制ITGSend相关,作用大概类似于IxChariot Console。

D-ITG的编译过程非常简单,进入src目录然后直接执行make即可,生成的文件将出现在bin目录下。下面我们以一个最简单的例子看看D-ITG的运行流程。

首先进入bin目录,运行如下的指令:

feng32@feng32-desktop:~/Downloads/D-ITG/bin$ ./ITGRecv
ITGRecv version 2.8.1 (r1023)
Compile-time options: bursty multiport
Press Ctrl-C to terminate

D-ITG的接收端将开始监听。然后运行如下的指令打开发送端。注意下面的命令行参数中,-a代表目标地址,-c表示报文的大小是100字节,-C代表报文间隔(Inter Departure Time)是一个常数,后面的参数表示每秒钟发送的报文的个数。

feng32@feng32-desktop:~/Downloads/D-ITG/bin$ ./ITGSend -T UDP -a 127.0.0.1 -c 100 -C 10 -t 15000 -l sender.log -x receiver.log
ITGSend version 2.8.1 (r1023)
Compile-time options: bursty multiport
Started sending packets of flow ID: 1
Finished sending packets of flow ID: 1

最后即可使用ITGDec对产生的日志文件进行分析。

更详细的使用信息请参考D-ITG的官方使用手册。

[编辑中] 免费的Internet流量发生器 | Free Internet Traffic Generators的更多相关文章

  1. google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益。)

    google analytics是什么(免费的网站流量分析服务:比如分析有多少个人来了你的网站,告诉你怎么样才能在网站上面实现最大收益.) 一.总结 免费的网站流量分析服务:比如分析有多少个人来了你的 ...

  2. java有关 String char 常见问题 编辑中

    1 输入输出有关 Scanner 的next()方法 返回值是String 所以尝试获得char时 应该用input.next().charAt[0] 2 空值 String 中null是指 对象引用 ...

  3. easyui datagrid行编辑中数据联动

    easyui的datagrid中行内编辑使用数据联动.即:当编辑产品编号时,该行的产品名称自动根据产品编号显示出来. 在编辑中获取当前行的索引 function getRowIndex(target) ...

  4. 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...

  5. OpenGL 实现视频编辑中的转场效果

    转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...

  6. javascript 中的 bind (编辑中。。。。)

    这篇文章说的非常好!http://my.oschina.net/blogshi/blog/265415 我的体会就是,函数中的this,指的是运行时,它是被哪个对象调用的.因为javascrpit的函 ...

  7. 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发

    以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066      13726230503  ...

  8. 如何从Linux系统中获取带宽、流量网络数据

    引入 国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片: 从上图来看,其取值方式为 每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes) 带宽与流量 我 ...

  9. NC 6.X笔记(编辑中)

    1.参照多选 写在编辑前事件中 ((UIRefPane) editor.getBillCardPanel().getBodyItem("pk_wa_item").getCompon ...

随机推荐

  1. 异步socket大并发实现

    using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.So ...

  2. 你好,C++(24)好大一个箱子!5.1.1 函数的声明和定义

    第5章 用函数封装程序功能 在完成功能强大的工资程序V1.0之后,我们信心倍增,开始向C++世界的更深远处探索. 现在,我们可以用各种数据类型定义变量来表达问题中所涉及的各种数据:用操作符连接这些变量 ...

  3. UVA 305 Joseph (约瑟夫环 打表)

     Joseph  The Joseph's problem is notoriously known. For those who are not familiar with the original ...

  4. JavaScript forEach方法

    最近看了一些html5和js方面的书,受益匪浅,因为看的东西比较多,却都没有怎么静心来做整理,慢慢来吧,可能最近自己有点儿小紧张.今天跟大家分享下JavaScript的forEach方法(其实是从&l ...

  5. Oracle数据库之数据类型

    Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.L ...

  6. Struts2 文件下载

    使用Struts2做一个简单的文件下载. 首先,导包,写配置文件就不说了. 进入主题. 文件下载操作类:FileDownload.java import java.io.InputStream; im ...

  7. PHPCMS V9二次开发]自定义字段模型-文本组

    phpcms v9,我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但phpcms并未提供该模型.如下图所示效果: 展示效果如下: 步骤/方法 打开phpcms\modules\conte ...

  8. phpmyadmin密码字段加密方法

    UPDATE member SET password=md5('password')

  9. phpcms 2008和discuz X3.1实现同步登陆退出论坛(已实现)

    网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了.       以下网络上抄 ...

  10. ARM汇编指令(未完待续)

    ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...