网络流量测试工具
网络流量测试工具
来源 https://www.cnblogs.com/qq952693358/p/7633259.html
评估测试的手段有以下这些(分类不完全科学,以尽量表现特点为主):
- 1.依赖内核协议栈的打流工具,如 iPerf、netperf 等;
- 2.依赖内核的打包工具,如 pktgen、hping、nping 等;
- 3.专业的测试仪表,例如思博伦、IXIA 等;
- 4.基于 dpdk 的打包工具如 dpdk-pktgen、moongen、trex 等。
其中:
- 1 的性能较弱,定制流的能力较差,难以反映准确结果;
- 2 的灵活性比较一般,难以超出其本身 scpoe 灵活打流,统计功能一般,性能也无法达到专业需求;
- 3 在各方面都是最佳之选,无奈价格昂贵,一般厂商难以承担,而且测试仪使用繁琐,效率不高;
- 4 我们测试过 moongen 和 trex,moongen 在测试过程中经常出现流打不稳的问题,而且统计功能一般,最终我们选择了 trex,并已经投入生产研发。
摘自:Neutron 网络的计算资源隔离与通过 TRex 测试网络性能。
使用dperf测试网络带宽 https://github.com/baidu/dperf/blob/main/test/performance/bandwidth/README.md
Trex--高性能压测的dream tools
来源 https://zhuanlan.zhihu.com/p/381938148
在对高性能转发设备测试时,一款好用的高性能压测工具必不可少,考虑被测设备一般也基于dpdk实现,而压测工具的性能理论上是需要能榨干被测设备的,传统的一些压测工具,iperf/wrk/ab等出于性能方面就被pass了。dpdk-pktgen在性能方面基本能满足述求,但是灵活性极差,不改源码的情况下,甚至连tcp flag都无法设置。
那么有没有一款压测设备即基于dpdk实现,在保持高性能的同时,又能提供高度自由的包编辑能力呢,Cisco在18年开源的trex就是这么一款dream tools,且提供的能力远不止这些。
介绍trex前,可以先介绍一款python的数据包操纵程序scapy,scapy中允许按layers来逐级构包,比如基于如下代码,可构造出一个vxlan的ipv6 syn包。
pkt = Ether()/IP()/UDP(dport=4789)/VXLAN()/IPV6()/TCP(flags="S")
事实上scapy可以发出任意想发的包(不符合协议也允许),通过自定义layers,可以很方便的插一些自定义协议进去,比如自定义的tcp options,自定义的proxy protocol、nsh之类的。
而trex 通过python sdk中的STLPktBuilder,是可以支持scapy构包的。
Trex 数据面基于DPDK实现,通过json-rpc的方式对外暴露控制接口,client端支持CLI/PYTHON SDK/Gui三种方式,对程序员而言,python sdk肯定是首选,基于python sdk,包个自动化压测工具,自动为每个版本提供各种场景的性能测试数据还是挺爽的。
整体架构如下,trex官网帮助文档的图比较清晰(最良心的帮助文档了,讲的非常全面,且example极多)。
关于如何使用trex,官网的文档非常丰富,包括如何自动化测试也给了example,本文主要站在LB的角度,介绍一些实用的技巧。对LB测试而言,其实主要关注的点也就是 CPS、BPS、PPS,以及一些特殊报文的处理能力,比如session同步、NAT64等。
trex的无状态模式主要有以下的一些优势:
- 高性能,实测trex基于CX5网卡,单口小包发送性能到90Mpps毫无问题,发送时数据包的五元组也非常大,几个亿的量级(量小可以做cache,性能略高一些)。
- “简单的有状态”,比如对同个五元组,先通过SYN报文建连接,再持续打一段时间的ACK报文,最终发RST/SYN报文,trex的stream间可以有先后依赖关系,通过多条stream即可支持。
- 灵活的模板报文编辑,报文变量设置,stream级别带宽、pps可配置,支持上千个stream。
- 支持python sdk的方式控制trex,做自动化的压力测试,稳定性测试比较方便。
- trex支持intel/mlx的网卡,线下同集群找台其他设备做trex,简单配置一下即可变成测试仪,另外也支持virtio驱动,可部署在虚拟机上。
自动化的框架可以查看stl_bi_dir_flows.py。
流编排可参考burst_3st_loop_x_times.py。
报文变量设置可参考syn_attack_fix_cs_hw.py。
发包开源工具TREX在IPS测试中的应用
来源 http://blog.nsfocus.net/trex/
对于网络设备而言,一款好的发包工具至关重要,而目前像IXIA, Sprient等仪表厂商的发包仪表虽然好用,但是价格昂贵,那么是否有一款在功能和性能上能与仪表相当,却又是开源的工具呢,思科的TRex的给出了答案。
目前,路由器厂商测试用的都是商业的仪表,一般的性能衡量都是以PPS作为标准,而路由器很复杂,牵扯到7层的应用,而且希望能够提供一种更加真实的流场景测试,TRex应运而生,TRex是一款开源的发包工具,它跑在标准的intel处理芯片上,同时支持stateful和stateless模式,stateful可以描述L4~L7层的应用场景,而stateless主要用来进行定制包的发包。
TRex特性
1、TRex 功能性能
stateful
- 支持高达200Gb/s的流量测试,需要网卡及CPU支持,一般跟core个数有关
- 支持时延和抖动,支持NAT/PAT自动学习,支持L4~L7
stateless
- 轻易产生stateless traffic stream,支持大流量 20mpps,支持stream并发,支持更改报文字段范围
- 支持Continuous/Burst/Multi-burst support,支持console/GUI,支持每条流的统计
- 支持pythonAPI
2、思博伦L4-L7旗舰产品Avalanche与TRex的比较
3、TRex的安装对OS以及网卡有特殊的要求
TRex运行
1、Identify the ports(虚拟机环境采用E1000驱动)
注释:Active 端口作为管理端口,管理端口不能被绑定,否则不能管理linux, 其它二个网卡可以绑定
2、绑定端口
cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml,trex默认端口起动配置文件是/etc/trex_cfg.yaml,也可以自定义起动配置文件 “./t-rex-64 –cfg”
我们本地模拟采用的port 0: 00:08.0,port 1: 00:09.0,IP地址配置可根据实际测试需要修改,模拟配置的10.1.1.254和10.1.1.253
3、stateless模式进行验证
窗口1,启动服务
窗口2,启动终端
进入trex目录下进入service下进行ping操作
TRex-stateful介绍
Stateful模式指的是网络设备对每条流保存其五元组,TRex通常先录制一条流的一组报文,随后以这组报文为模板,在真正测试的时候,更改其src/dst IP和Port,TRex自身没有协议栈,却让网络设备有了状态,因此它可以测试L4~L7层的应用,重点是提前录制连接的过程。
stateful模式支持shell,也支持PythonAPI, 它由一个YAML文件组成,其中包含三部分:
duration(持续时间)、generator(操作选项)、cap_info(包信息、发送选项)
#通过修改cap_info下的-name:部分可指定多个组合,如IMIX组合
stateful操作几部曲(以dns为例)
- step 1 设置端口跟DUT相连(/etc/trex_cfg.yaml)
- step 2 录制DNS请求与应答包(./cap2/dns.pcap,目前开源的包包括../*/*.pcap)
- step 3 修改 yaml文件就是cap2/dns.yaml
主要修改执行时间,client和server的变化以及cap info的loop和cps等
- step 4 执行发包
./t-rex-64 -f cap2/dns.yaml -m 1 -d 10(m为复制几份,d为时间)
- step 5 在IPS上诊断抓包
- step7 查看发包统计states
执行命令的常用参数
TRex-stateful各种场景举例
1、IPv6场景模拟
2、GAV(Gateway Anti Virus)场景模拟
TRex-stateless介绍
Stateless是基于构包和发包两个阶段来完成, 构包完全基于python的scapy库,而发包则是其自开发的trex_stl_lib来完成。
特点:
Trex Objects
Simple Interactive Mode
TRex-stateless STLS框架
Trex的Stateless中的STLS框架,stateless由两部分组成,一部分是构包(Scapy), 另一方面是发包,这个由Trex框架完成,
### Scapy Scapy 是python用于发包的一个库,它通过layer的叠加从而达到构包的目的,如果你只需要构二层包,那么Ether()则构了, 如果你需要构三层IP包,则需要Ether()/IP(),同理L4~L7层的包都可以通过这种方式进行迭代,每个层里面都会有不同的协议,Scapy支持了目前的大多数协议,因此从理论上说,Scapy可以构造任意类型的包 。
TRex用于VIPS场景测试
测试场景:
stateless模式测试
1) VIPS配置为虚拟线模式
2)TRex服务器上开启stateless模式
./t-rex-64 -i
3) TRex服务器上t-rex-console进行udp-simple.py测试
./trex-console
start -f ./stl/udp_1pkt_simple.py -d 200 -m 500mbps -p 0
4)设备上查看流量
5)TRex上可以通过stats和capture进行流量跟踪
采用实体机器配备DPDK网卡,可以达到20G的测试
stateless支持的py文件如下,分别用于各种报文类型测试,也可以通过python+scapy编辑和规划发送报文以及发送方式
stateful模式测试
1)配置需要运行的yaml文件,例如识别rstp和https
2) 运行stateful测试
./t-rex-64 -f cap2/test.yaml -m 1pps -d 20
3)查看设备上流量和应用识别情况
============ End