TRex是一种快速、真实的开源流量生成工具,运行在基于DPDK的标准Intel处理器上。它支持有状态和无状态流量生成模式。
有状态和无状态的操作模式是什么?
“Stateful”模式用于测试网络设备,它可以保存每个流的状态(5元组)。通常,这是通过在被测设备的成对接口上注入预先记录的捕获文件,并动态更改src/dst IP/端口来实现的。在高级状态模式下,它通过在TCP/UDP协议之上注入L7数据来完成。
“无状态”模式旨在测试不管理每个流的任何状态(而是基于每个数据包操作)的网络设备。这通常通过向被测设备注入定制的数据包流来实现。
传统上,网络基础设施设备使用商业流量生成器进行测试,而性能则使用诸如每秒数据包数(PPS)和无丢弃率(NDR)等指标进行测量。随着网络基础设施功能变得越来越复杂,有状态流量生成器变得非常必要,以便使用更真实的应用程序流量模式场景进行测试。需要现实且有状态的流量生成器,以便:
1、测试并提供更真实的性能数字。
2、基于实际用例的软件和硬件的设计和架构。
当前的挑战:
成本:商用全流量发电机价格昂贵
扩展:带宽不能很好地随功能复杂性扩展
标准化:缺乏交通模式和方法的标准化
灵活性:当需要灵活性和更改时,商业工具不允许灵活性
价值:
不同团队的资本支出(capEx)较高
低规模的测试和外推成为一种常见的实践,它是不准确的,隐藏了现实生活中的瓶颈和质量问题。
不同功能/平台团队的基准测试和结果方法论。
由于测试工具特性依赖而导致的开发和测试延迟。
在开发不同的特别工具和测试方法上投入资源和精力。
TRex通过创新和可扩展的软件实现解决了这些问题,利用了标准和开放的软件,并在COTS x86/ARM服务器上工作。
TRex 简介:
TRex是一个开源、低成本、有状态和无状态的流量生成器,由DPDK提供支持。它生成L3-7流量,并提供商业工具提供的一体化工具功能。
TRex无状态功能包括支持多个流、更改任何数据包字段的能力,并提供每个流/组的统计信息、延迟和抖动。
高级有状态功能包括对模拟L7流量的支持,以及功能齐全的可扩展TCP/UDP支持。
TRex仿真功能包括客户端协议,即ARP、IPv6、ND、MLD、IGMP、ICMP、DOT1X、DCHPv4、DHCPv6、DNS,以模拟客户端和服务器的规模。
TRex可以在一台服务器上扩展到200Gb/s。
Python自动化API。
低成本。
虚拟化支持,使TRex能够在没有物理NIC的完全虚拟环境中使用,并提供以下示例用例:
亚马逊AWS
笔记本电脑上的TRex
docker
TRex能否在具有虚拟NIC的虚拟机监控程序上运行?
对,目前需要2-3核和4GB内存。对于VM用例,如果需要(以支持较少并发流为代价),可以通过使用以下配置显著减少内存需求
限制:
使用vSwitch将最大PPS限制在1MPPS左右(DPDK-OVS/VPP可以解决此问题)
延迟结果将不准确。
对于高性能设置(多rx队列),最好在trexd_cfg中添加 rx_desc: 4096。yaml请参阅platform\u yaml\u cfg\u参数和软件模式
当前支持的TRex DPDK接口:
支持物理DPDK 1/2.5/10/25/50/40/100Gbps接口(Broadcom/Intel/Mellanox/Cisco VIC/Napatech/Amazon ENA)
虚拟化接口支持(virtio/VMXNET3/E1000)
SR-IOV 支持实现最佳性能
有状态TRex功能集(STF)
此功能用于检查流量的有状态功能。
高规模的实际流量(客户端数量、服务器数量、带宽)
延迟/抖动测量
流量排序检查
NAT、PAT动态翻译学习
了解TCP SYN序列随机化-vASA/火力用例
控制器测试的群集模式
IPV6内联替换
一些跨流支持(例如RTSP/SIP)
无状态模式-STL 功能集
此功能用于执行路由/交换的无状态功能,例如Cisco VPP/OVS。它基于数据包。
大规模—每个核心支持大约每秒1000-3000万个数据包(Mpps),可根据核心数进行扩展。
配置文件可支持多个流,可扩展到10K并行流。
每个流支持:
数据包模板-能够使用Scapy构建任何数据包(包括格式错误的数据包,例如:MPLS/IPv4/Ipv6/GRE/VXLAN/NSH)
更改数据包内任何字段的能力(例如:src\u ip=10.0.0.1-10.0.0.255)
更改数据包大小的能力(例如:随机数据包大小64-9K)
模式-连续/突发/多突发支持
速率,pps中的速率规范、线路速率百分比或L1/L2带宽,可以指定为:
每秒数据包数(例如:14MPPS)
一级/二级带宽(例如:500Mb/s)
接口链接百分比(例如:10%)
支持基本的类似HLT API的概要文件定义
操作-流可以触发流
交互式支持-快速控制台、GUI
每个接口的统计信息
硬件/软件支持的每个接口或每个流的统计信息
每个流的延迟和抖动
速度极快的Python自动化API
L2仿真Python事件驱动框架,包括ARP/ICMP/ICMPv6/IPv6ND/DHCP等示例。
该框架可以通过新协议进行扩展
使用BPF过滤器捕获/监控流量-无需Wireshark
通过将流量重定向到Wireshark捕获网络流量
PCAP文件导入/导出,支持DPI的巨大PCAP文件传输(例如1TB PCAP文件)
多用户支持
使用BIRD集成的路由协议支持BGP/OSPF/RIP
以下示例显示了为连续、突发和多突发流量配置的三个流。
新的JSON-RPC2体系结构支持交互模式

更多信息可在此处找到:
TRex Documentation (cisco.com)
高级有状态模式-ASTF 功能集
通过新的高级可伸缩TCP/UDP支持,TRex使用TCP/UDP层生成L7数据,模拟L7应用程序,例如HTTP/HTTPS/Citrix。
多配置文件支持和分组流的能力。
准确的TCP实现。
能够更改L7应用程序中的字段-例如,更改HTTP用户代理字段。
这将打开以下新功能:
DUT终止TCP堆栈时的工作能力(例如压缩/解压缩)。
在这种情况下,每侧都有不同的TCP会话,但L7数据几乎相同。
能够在客户端模式或服务器模式下工作。
这样,TRex客户端可以安装在网络上的一个物理位置,TRex服务器可以安装在另一个物理位置。
性能和规模:
高带宽-200gb/s,具有许多实际流(不是一个大象流)
高连接率-MCP订单
扩展到数百万个活跃的既定流量
更多信息可在此处找到:
TRex upcoming Stateful scalable TCP support - Cisco Community
TRex Advance stateful support (cisco.com)
https://trex-tgn.cisco.com/trex/doc/trex_astf_vs_nginx.html
你能用它做什么
有状态:
支持基准测试和压力特性/设备:
NAT
DPI
负载平衡器
网络缓存设备
防火墙
IP/ID
混合应用程序级流量/配置文件(HTTP/SIP/视频)
无限并发流,仅受内存限制
无状态的:
基准/应力vSwitch RFC2544
TRex仿真服务器 EMU
模拟协议的客户端,以模拟客户端的规模。
能实现客户端L3协议,如ARP, IPv6, ND, MLD, IGMP,以模拟大规模的客户端和服务器。
这个项目不局限于客户端协议,但它是一个良好的开端,该项目提供了一个框架来实现和使用客户端协议。
该框架对于控制平面协议来说足够快,并将与TRex服务器一起工作。
在TRex服务器上运行非常快的L7应用程序(基于TCP/UDP),一个线程的TRex-EMU可以实现高速率的客户端创建/删除。
前面提到的每个协议都是作为插件实现的。这些插件是自包含的,可以使用事件总线将事件发送给另一个,或者发送给框架 (例如,DHCP信号表示它有一个新的IPv6地址)。
这个框架有一个事件驱动的架构,这样它就可以扩展,该框架还提供了一个协议插件基础设施,例如RPC、计时器、包解析器、仿真等。
主要特性:
快速创建客户机/拆卸,一个线程3~5K/秒。每个线程以每秒约3K个客户端的速度快速创建/卸载客户端。
活动客户机/命名空间的数量仅受服务器上内存的限制。
PPS (Packet per second)的取值范围为3 ~ 5 MPPS。
通过JSON-RPC公开的Python客户端API。
交互式支持-与TRex控制台集成。
模块化设计。每个插件都是独立的,可以单独测试。
基于BSD和UDP的用户空间TCP。
TRex-EMU支持以下协议:
| Plug-in | Description |
|---|---|
| ARP | RFC 826 |
| ICMP | RFC 777 |
| DHCPv4 | RFC 2131 client side |
| IGMP | IGMP v3/v2/v1 RFC3376 |
| IPv6 | IPv6 ND, RFC 4443, RFC 4861, RFC 4862 and MLD and MLDv2 RFC 3810 |
| DHCPv6 | RFC 8415 client side |
TRex BIRD集成
Bird是一个开源实现,用于在类Unix操作系统上路由Internet协议包。
Bird Internet路由守护程序是一个旨在开发功能齐全的linux动态IP路由守护程序的项目。它被集成到TRex中并与之并行运行,以便与Python自动化API一起利用其功能。
几秒钟内数百万条路由的规模(取决于协议规模,如BGP)
与Multi-RX软件模型集成,支持BIRD协议的动态过滤器,同时保持高流量。
最多可支持10K veth(虚拟接口),每个接口具有不同的QinQ/VLAN配置。
用于推送配置和读取统计信息的简单自动化Python API。
除其他功能外,BIRD还支持:
IPv4和IPv6(使用内核veth)
BGP(eBGP/iBGP)、RPKI(RFC 6480)/RFC 6483记录类型为pv4、ipv6、vpn4、vpn6、多播、flow4、flow6
RFC 4271-边界网关协议4(BGP)
RFC 1997-BGP社区属性
RFC 2385-通过TCP MD5签名保护BGP会话
RFC 2545-对IPv6使用BGP多协议扩展
RFC 2918-路由刷新功能
RFC 3107-在BGP中携带标签信息
RFC 4360-BGP扩展社区属性
RFC 4364-BGP/MPLS IPv4虚拟专用网络
RFC 4456-BGP路由反射
RFC 4486-BGP停止通知消息的子代码
RFC 4659-BGP/MPLS IPv6虚拟专用网络
RFC 4724-BGP的优雅重启机制
RFC 4760-BGP的多协议扩展
RFC 4798-通过IPv4 MPLS连接IPv6孤岛
RFC 5065-作为BGP的联合会
RFC 5082-通用TTL安全机制
RFC 5492-使用BGP发布功能
RFC 5549-使用IPv6下一跳播发IPv4 NLRI
RFC 5575-流量规范规则的传播
RFC 5668-4-八位字节作为特定BGP扩展社区
RFC 6286-作为宽唯一BGP标识符
RFC 6608-BGP有限状态机错误的子代码
RFC 6793-BGP支持4个八位组作为数字
RFC 7311-BGP的累积IGP度量属性
RFC 7313-增强的BGP路由刷新功能
RFC 7606-修订了BGP更新消息的错误处理
RFC 7911-BGP中多路径的播发
RFC 7947-Internet Exchange BGP路由服务器
RFC 8092-BGP大型社区属性
RFC 8203-BGP管理关机通信
RFC 8212-无策略的默认EBGP路由传播行为
OSPF(v2/v3)RFC 2328/RFC 5340 开放最短路径优先协议
RIP-RIPv1(RFC 1058)、RIPv2(RFC 2453)、RIPng(RFC 2080)和RIP加密身份验证(RFC 4822)。 路由信息协议
双向转发检测(BFD)
IPv6路由器播发
静态路由
表间协议
软重构