• TRex学习之旅十


    高级功能

    • 大规模 - 每个核心支持大约 10-22 百万包每秒 (mpps),可随核心数量扩展

    • 支持 1、10、25、40 和 100 Gb/秒接口

    • 每个接口支持多个流量配置文件

    • Profile 可支持多流,可扩展至 10K 并行流

    • 每个流支持:

      • 数据包模板 - 使用Scapy 构建任何数据包(包括格式错误)的能力(例如:MPLS/IPv4/Ipv6/GRE/VXLAN/NSH)

      • 现场引擎程序

        • 能够更改数据包内的任何字段(例如:src_ip = 10.0.0.1-10.0.0.255)

        • 能够更改数据包大小(例如:随机数据包大小 64-9K)

      • 模式 - 连续/突发/多突发支持

      • 速率可以指定为:

        • 每秒数据包数(例如:14MPPS)

        • L1 带宽(例如:500Mb/秒)

        • L2 带宽(例如:500Mb/秒)

        • 接口链接百分比(示例:10%)

      • 支持类似 HLTAPI 的配置文件定义

      • 动作 - 流可以触发流

    • 交互式支持 - 快速控制台、GUI

    • 每个接口的统计信息

    • 在硬件中完成的每个流的统计信息

    • 每个流的延迟和抖动

    • 极快的自动化支持

      • Python 2.7/3.0 客户端 API

      • Python HLTAPI 客户端 API

    • 多用户支持 - 多个用户可以同时与同一个 TRex 实例交互

    • 路由协议支持——使用 BIRD 的 RIP/BGP/OSPF

    流量配置文件示例

    以下示例显示为连续、突发和多突发流量配置的三个流。

                                                                        图 1. 多流示例

    IXIA IXExplorer 与 TRex

    与 IXIA 相比,TRex 的功能有限,但有一些优势。下表总结了这些差异:

    表 1. TRex 与 IXExplorer

    线速

    支持

    10-24MPPS/核,取决于用例

    多流

    255

    软件限制在 ~20K

    数据包构建灵活性

    有限的

    Scapy - 无限

    示例:支持 GRE/VXLAN/NSH。可以扩展到未来的协议。

    包场引擎

    有限的

    无限

    发送模式

    连续/连发/多连发

    连续/连发/多连发

    ARP/IPv6 ND 仿真

    支持支持

    DHCP 客户端仿真

    支持支持

    可扩展的仿真框架

    支持

    自动化

    TCL/Python 包装器到 TCL

    本机 Python/Scapy

    自动化速度秒

    30 秒

    1 毫秒

    负载/启动/停止/获取计数器的测试

    HLTAPI

    全力支持。2000 页文档

    有限的。20 页文档

    每个流统计

    具有 4 个全局掩码的 255 个流

    82599/I350/X550 的 XL710/X710 硬件和软件 impl 的 128 条规则

    某些数据包类型限制适用于 XL710/X710。软件模式可以扩展到32K规则。

    延迟抖动

    支持。纳秒级分辨率(基于硬件)

    支持。微秒级分辨率(基于软件)

    多用户支持

    支持支持

    图形用户界面

    很好

    WIP、数据包生成器、现场引擎、全局端口统计、延迟、每个流统计。与 IXIA GUI 不同 - 有关详细信息,请参阅:trex-stateless-gui

    思科 pyATS 支持

    支持

    支持- Python 2.7/Python 3.4

    路由仿真

    支持支持

    RPC 架构

    TRex 控制平面核心中的 JSON-RPC2 线程提供对交互模式的支持。

                                                                     图 2. RPC 服务器组件

    Layers:

    • 控制传输协议:ZMQ 工作在 REQ/RES 模式。

    • 控制传输协议之上的 RPC 协议:JSON-RPC2。

    • 异步传输:ZMQ 工作在 SUB/PUB 模式(用于异步事件,如接口更改模式、计数器等)。

    接口:

    • 自动化 API:Python 是第一个实现 Python 自动化 API 的客户端。

    • 用户界面:控制台使用 Python API 为 TRex 实现用户界面。

    • GUI :GUI 工作在 JSON-RPC2 层之上。

    Rex 接口的控制

    • 许多用户可以从不同的界面一起控制单个 TRex 服务器。

    • 用户独家获得单独的 TRex 接口。示例:两个用户控制一个 4 端口的 TRex 服务器。用户A获取接口0和1;用户 B 获取接口 3 和 4。

    • 只有一个用户界面(控制台或 GUI)可以对特定界面进行读/写控制。这可以在客户端核心中缓存 TRex 服务器接口信息。示例:用户 A 有两个获取的接口,一次只能有一个读/写控制会话。

    • 用户可以在单个接口上设置多个只读客户端——例如,用于监控接口上的流量统计。

    • 处于读写模式的客户端可以实时获取统计信息(使用 ASYNC ZMQ)。这可以同时通过多个用户界面(控制台和 GUI)查看统计信息。

    同步

    • 客户端与 TRex 服务器同步以获取连接时间的状态,并在状态更改后将服务器信息缓存在本地。

    • 如果客户端崩溃或退出,它会在重新连接后再次同步。

                                                               图 3. 多个用户,每个界面

    有关 TRex RPC 服务器的详细信息,请参阅RPC 规范

    RPC 架构亮点

    RPC 架构提供以下优点:

    • 与 TRex 服务器的快速交互。加载、启动和停止接口的配置文件非常快 - 大约 2000 个周期/秒。

    • 利用 Python/ Scapy构建数据包/字段引擎。

    • HLTAPI 编译器复杂性在 Python 中处理。

    TRex 对象

     

    • TRex:每个 TRex 实例都支持许多接口。

    • 接口:每个接口支持一个或多个流量配置文件。

    • 流量配置文件:每个流量配置文件支持一个或多个流。

    • :每个流包括:

      • 数据包:数据包模板最大 9 KB

      • 字段引擎:确定要更改的字段以及是否更改数据包大小

      • Mode:指定如何发送数据包:Continuous/Burst/Multi-burst

      • Rx Stats:为每个流收集的统计信息

      • 速率:速率(每秒数据包或带宽)

      • 操作:指定当前流完成时要遵循的流(对连续或突发模式有效)

    有状态与无状态

    TRex 无状态支持支持基本的 L2/L3 测试,主要与交换机或路由器相关。在无状态模式下,可以使用一个数据包模板定义流,定义程序以更改数据包中的任何字段,并以下列模式之一运行流:

    • 连续的

    • 爆裂

    • 多突发

    无状态模式不支持学习 NAT 转换,因为没有流/客户端/服务器的上下文。

    • 在有状态模式下,基本构建块是流/应用程序(由许多数据包组成)。

    • 无状态模式更加灵活,使您能够定义任何类型的数据包,并构建一个简单的程序。

    表 2. 特性:有状态与无状态
    特征有状态的无状态

    每个流状态

    支持

    不支持

    NAT

    支持

    不支持

    隧道

    支持一些

    支持

    L7 应用仿真

    支持

    任何类型的数据包

    不支持

    支持

    延迟抖动

    全局/每个流

    每个流

    TRex 包文件夹

    LocationDescription

    /

    t-rex-64/dpdk_set_ports/stl-sim

    /stl

    无状态本机 (py) 配置文件

    /stl/hlt

    无状态 HLT 配置文件

    /ko

    DPDK 的内核模块

    /external_libs

    服务器/客户端使用的 Python 外部库

    /exp

    用于单元测试的黄金 PCAP 文件

    /cfg

    配置文件示例

    /cap2

    有状态的配置文件

    /avl

    有状态配置文件 - SFR 配置文件

    /automation

    有状态和无状态的 Python 客户端/服务器代码

    /automation/regression

    无状态和有状态的回归

    /automation/config

    回归设置配置文件

    /automation/trex_control_plane/interactive/trex

    无状态库和控制台

    /automation/trex_control_plane/interactive/trex/stl

    无状态库

    /automation/trex_control_plane/interactive/trex/examples/stl

    无状态示例

    使用无状态模式模仿有状态模式

    无状态模式可以模仿有状态模式的部分功能,但不是全部功能。例如,您可以将数据包数量作为流的链接加载一个 PCAP:
    a→b→c→d→ back to a
    然后您可以为每个流创建一个程序来更改:
    src_ip=10.0.0.1-10.0.0.254
    这会产生类似于有状态模式的流量,但基础完全不同。

    如果您感到困惑,您可能需要无状态。:-)

    有状态模式下模拟无状态流量

    TRex 还支持真正的无状态流量生成。

    使用此功能,您可以“重复”流并创建无状态的、类似于IXIA的流。在注入 定义的流数后limit,TRex 重复相同的流。如果所有模板都具有limitCPS 将在一段时间后为零,因为在第一次迭代后没有新流。

    IMIX 支持:

    例子:

    [bash]>sudo ./t-rex-64 -f cap2/imix_64.yaml  -d 1000 -m 40000  -c 4 -p

    -p 在这里用于从两个接口发送客户端数据包。(通常仅从客户端端口发送。)使用此选项,端口由客户端 IP 选择。一个流的所有数据包都是从同一个接口发送的。这可能会产生路由问题,因为客户端的 IP 将从服务器接口发送。PBR 路由器配置解决了这个问题,但不能在所有情况下都使用。因此请谨慎使用此-p选项。

    imix_64.yaml

    1. cap_info :
    2. - name: cap2/udp_64B.pcap
    3. cps : 1000.0
    4. ipg : 10000
    5. rtt : 10000
    6. w : 1
    7. limit : 1000

    说明:

    1、在循环中重复流,从该类型生成 1000 个流。在此示例中,udp_64B 仅包含一个数据包。

    cap文件“cap2/udp_64B.pcap”只包含一个64B的包。此配置文件创建 1000 个流程,这些流程将按如下方式重复: f1 、 f2 、 f3 ...。f1000 , f1 , f2 ... 其中 PPS == CPS for -m=1。在这种情况下,对于 -m==1,它的 PPS=1000 秒。可以混合使用无状态模板和有状态模板。

    Imix YAML cap2/imix_fast_1g.yaml示例

    1. - duration : 3
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.0.255"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.255.255"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 0
    12. udp_aging : 0
    13. mac : [0x0,0x0,0x0,0x1,0x0,0x00]
    14. cap_info :
    15. - name: cap2/udp_64B.pcap
    16. cps : 90615
    17. ipg : 10000
    18. rtt : 10000
    19. w : 1
    20. limit : 199
    21. - name: cap2/udp_576B.pcap
    22. cps : 64725
    23. ipg : 10000
    24. rtt : 10000
    25. w : 1
    26. limit : 199
    27. - name: cap2/udp_1500B.pcap
    28. cps : 12945
    29. ipg : 10000
    30. rtt : 10000
    31. w : 1
    32. limit : 199
    33. - name: cap2/udp_64B.pcap
    34. cps : 90615
    35. ipg : 10000
    36. rtt : 10000
    37. w : 1
    38. limit : 199
    39. - name: cap2/udp_576B.pcap
    40. cps : 64725
    41. ipg : 10000
    42. rtt : 10000
    43. w : 1
    44. limit : 199
    45. - name: cap2/udp_1500B.pcap
    46. cps : 12945
    47. ipg : 10000
    48. rtt : 10000
    49. w : 1
    50. limit : 199

    此处复制模板以更好地利用 DRAM 并获得更好的性能。

    Imix YAML cap2/imix_fast_1g_100k_flows.yaml 示例
    1. - duration : 3
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.0.255"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.255.255"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 0
    12. udp_aging : 0
    13. mac : [0x0,0x0,0x0,0x1,0x0,0x00]
    14. cap_info :
    15. - name: cap2/udp_64B.pcap
    16. cps : 90615
    17. ipg : 10000
    18. rtt : 10000
    19. w : 1
    20. limit : 16666
    21. - name: cap2/udp_576B.pcap
    22. cps : 64725
    23. ipg : 10000
    24. rtt : 10000
    25. w : 1
    26. limit : 16666
    27. - name: cap2/udp_1500B.pcap
    28. cps : 12945
    29. ipg : 10000
    30. rtt : 10000
    31. w : 1
    32. limit : 16667
    33. - name: cap2/udp_64B.pcap
    34. cps : 90615
    35. ipg : 10000
    36. rtt : 10000
    37. w : 1
    38. limit : 16667
    39. - name: cap2/udp_576B.pcap
    40. cps : 64725
    41. ipg : 10000
    42. rtt : 10000
    43. w : 1
    44. limit : 16667
    45. - name: cap2/udp_1500B.pcap
    46. cps : 12945
    47. ipg : 10000
    48. rtt : 10000
    49. w : 1
    50. limit : 16667

    以下简单模拟示例包括 3 个流程,CPS=10。

    1. $more cap2/imix_example.yaml
    2. #
    3. # Simple IMIX test (7x64B, 5x576B, 1x1500B)
    4. #
    5. - duration : 3
    6. generator :
    7. distribution : "seq"
    8. clients_start : "16.0.0.1"
    9. clients_end : "16.0.0.255"
    10. servers_start : "48.0.0.1"
    11. servers_end : "48.0.255.255"
    12. clients_per_gb : 201
    13. min_clients : 101
    14. dual_port_mask : "1.0.0.0"
    15. tcp_aging : 0
    16. udp_aging : 0
    17. mac : [0x0,0x0,0x0,0x1,0x0,0x00]
    18. cap_info :
    19. - name: cap2/udp_64B.pcap
    20. cps : 10.0
    21. ipg : 10000
    22. rtt : 10000
    23. w : 1
    24. limit : 3 1

    说明:

    1、流数:3

    [bash]>./bp-sim-64-debug -f cap2/imix_example.yaml  -o my.erf -v 3 > a.txt
    pkttime sectemplatefidflow-pkt-idclient_ipclient_portserver_ipdesc

    1

    0.010000

    0

    1

    1

    16.0.0.1

    1024

    48.0.0.1

    2

    0.210000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    3

    0.310000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    4

    0.310000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    5

    0.510000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    6

    0.610000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    7

    0.610000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    8

    0.810000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    9

    0.910000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    10

    0.910000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    11

    1.110000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    12

    1.210000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    13

    1.210000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    14

    1.410000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    15

    1.510000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    16

    1.510000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    17

    1.710000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    18

    1.810000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    19

    1.810000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    20

    2.010000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    21

    2.110000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    22

    2.110000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    23

    2.310000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    24

    2.410000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    25

    2.410000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    26

    2.610000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    27

    2.710000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

    28

    2.710000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    29

    2.910000

    0

    2

    0

    16.0.0.2

    1024

    48.0.0.2

    30

    3.010000

    0

    3

    0

    16.0.0.3

    1024

    48.0.0.3

    31

    3.010000

    0

    1

    0

    16.0.0.1

    1024

    48.0.0.1

                                                   表. IMIX 示例限制 = 3

    • 平均 CPS:每秒 10 个数据包(3 秒内 30 个数据包)。

    • 配置文件中指定的总共 3 个流。

    • 如配置文件中指定的那样,流以突发形式出现。

  • 相关阅读:
    c语言进阶篇:动态内存管理(相关函数、常见错误、笔试题)
    【多线程】常见面试题
    在数据增强、蒸馏剪枝下ERNIE3.0分类模型性能提升
    【从0到1设计一个网关】性能优化---Netty线程数配置与JVM参数配置
    【社区投稿】给 NdArray 装上 CUDA 的轮子
    宇视 EZView客户端是否支持接收VMS平台的报警
    火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?
    java-net-php-python-ssm高校综合素质测评系统计算机毕业设计程序
    第三十三篇 transition-group 列表过渡
    字节码进阶之JSR269详解
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/125427341