【工具】Trex使用教程

简介

TRex 是一种高性能的网络流量生成工具,它通过创新和可扩展的软件实现,利用标准和开放的软件以及x86/UCS硬件,解决了传统商业状态感知流量生成器的问题。

TRex 的关键特点包括

  • 生成和分析L4-7流量:TRex 能够模拟传输层到应用层的流量,为网络性能测试提供全面的解决方案。
  • 一体化商业L7工具能力:在一个软件包中集成了商业级L7工具的功能,提供成本效益高的测试解决方案。
  • 基于预处理和智能重放的状态流量生成器:使用真实流量模板进行预处理和智能重放,以生成状态流量。
  • 生成和放大客户端和服务器端流量:能够同时生成和放大客户端请求和服务器响应流量,模拟真实的网络交互。
  • 可定制的功能:用户可以根据需要添加自定义功能,以适应特定的测试需求。
  • 扩展性强:能够扩展到200Gb/sec的速率,适用于单个UCS系统(使用Intel 40Gb/sec NICs)。
  • 低成本:与商业流量生成器相比,TRex 提供了成本效益更高的选择。
  • 易于安装和部署:作为一个自包含的软件包,TRex 可以轻松地安装和部署在多种环境中。
  • 支持虚拟接口:TRex 支持在完全虚拟化的环境中使用,无需物理 NICs。这使得 TRex 可以在多种虚拟化场景下使用。

使用示例:

  • Amazon AWS:在云环境中使用 TRex 进行网络性能测试。
  • Cisco LaaS:作为服务的一部分,使用 TRex 来提供网络测试能力。
  • TRex on your laptop:在个人笔记本电脑上部署 TRex,进行本地网络性能测试和学习。

TRex 的灵活性和高性能使其成为网络工程师和研究人员在进行网络性能测试和分析时的理想选择。通过模拟复杂的网络流量,TRex 帮助用户发现潜在的性能瓶颈和安全问题,优化网络设计和配置。下面来介绍一下 TRex 的安装与使用。

下载安装

获取 TRex 最新版本安装包

wget --no-cache https://trex-tgn.cisco.com/trex/release/latest

获取 TRex 指定版本安装包

wget --no-cache https://trex-tgn.cisco.com/trex/release/vX.XX.tar.gz

版本号查询 TRex发布文档

安装包解压:tar -xzvf latesttar -xzvf vX.XX.tar.gz

进入解压后的目录,对几个主要文件夹做一个说明:

├─astf
├─automation
├─avl
├─bird
├─cap2
├─cfg             // TRex 提供的配置文件示例
├─emu
├─exp
├─external_libs  // 引用的外部库
├─generated
├─ko
├─so
├─stl            // 使用Python Scapy 库构造各类报文的示例
├─trex_emu
└─x710_ddp

首次运行步骤

确认使用的网卡信息

TRex 是一款 Linux 应用程序,与 Linux 内核模块交互。它使用 DPDK(无需作为库安装 DPDK)。TRex 应该能够在任何商用现货 (COTS) x86 服务器上运行。运行 TRex 的另一种选择是使用内核接口以原始套接字模式运行,适用于低性能和低占用需求(由于内核限制,大约限制在 1MPPs)。本文涉及的内容是基于 CentOS 进行描述的,收发包网卡使用DPDK驱动接管的方式(无需手动绑定,TRex 运行会自动执行绑定)。

进入安装包所在目录,执行 sudo ./dpdk_setup_ports.py -s 查看网卡信息,执行完会看到类似如下信息:

[bash]>sudo ./dpdk_setup_ports.py -s

 Network devices using DPDK-compatible driver
 ============================================

 Network devices using kernel driver
 ===================================
 0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb #1
 0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:13:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv= unused=ixgb
 0000:02:00.0 '82545EM Gigabit Ethernet Controller (Copper)' if=eth2 drv=e1000 unused=igb_uio *Active* #2

 Other network devices
 =====================
 <none>

查看DPDK支持的网卡类型:官网链接

配置文件修改

默认配置文件路径:/etc/trex-cfg.yaml,有两种方式生成配置文件。

  1. TRex提供了配置文件的demo,在此基础上进行修改,示例存放路径:cfg/ ,以 simple_cfg.yaml 文件为例,对各配置参数进行说明。
- port_limit      : 2
  version         : 2
#List of interfaces. Change to suit your setup. Use ./dpdk_setup_ports.py -s to see available options
  interfaces    : ["03:00.0","03:00.1"]
  port_info       :
            # Either default_gw or dest_mac is mandatory
          - ip         : 1.1.1.1    # port 0 src_ip
            default_gw : 2.2.2.2    # dst_ip
          - ip         : 2.2.2.2    # port 1
            default_gw : 1.1.1.1

          - dest_mac   : '00:00:00:01:00:00'  # port 0
            src_mac    : '00:00:00:02:00:00'
          - dest_mac   : '00:00:00:03:00:00'  # port 1
            src_mac    : '00:00:00:04:00:00'
  • port_limit:端口数量,必须等于 interfaces 中列出的接口数量
  • version:必须设置为2
  • interfaces:要使用的接口列表。运行 sudo ./dpdk_setup_ports.py -s 来查看可选列表
  • port_info:端口信息。TRex 需要知道每个端口对应的目的 MAC 地址,可以通过两种方式指定:
    • 直接指定 dest_mac
    • 指定 default_gw,TRex 将向此 IP 发出 ARP 请求,并使用结果作为目的 MAC
  1. 使用 dpdk_setup_ports.py 脚本生成,脚本提供了交互模式来生成配置文件,命令:sudo ./dpdk_setup_ports.py -i,根据提示信息选择要使用的网卡,生成的配置文件如下所示:
### Config file generated by dpdk_setup_ports.py ###

- version: 2
  interfaces: ['03:00.0', '03:00.1']
  port_info:
      - dest_mac: 00:bb:12:34:56:02 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  00:bb:12:34:56:01
      - dest_mac: 00:bb:12:34:56:01 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  00:bb:12:34:56:02

  platform:
      master_thread_id: 0                             #1
      latency_thread_id: 1                            #2
      dual_if:                                        
        - socket: 0                                   #3
          threads: [2,3,4,5,6]                        #4
  • master_thread_id:控制线程使用的 CPU 核
  • latency_thread_id:收包线程使用的 CPU 核
  • dual_if:定义了接口对的信息(依据interfaces列表中的顺序)。每个部分,从- socket开始,为不同的接口对指定配置。
  • socket:为接口对分配使用的内存的 NUMA 节点
  • threads:发包线程使用的 CPU 核列表,列表里所有的 CPU 要归属于socket指定的 NUMA 节点

查看 CPU 信息的命令:lscpu,可查看有几个NUMA节点,各NUMA节点上有哪些 CPU。

# 两个 NUMA节点,cpu 0-31 属于 NUMA node0,cpu 32-63 属于 NUMA node1
[root] lscpu
......
NUMA node0 CPU(s):   0-31
NUMA node1 CPU(s):   32-63
......

NUMA架构简单来说就是,系统有多个CPU处理器,每个处理器有自己的独立内存,CPU访问自己的内存,速度会更快,所以上述配置中,指定的CPU要归属于同一个NUMA节点。

运行

TRex 支持两种运行模式:stateful 和 stateless,可简单理解为,stateless 支持基本的 L2/L3 层测试,没有保存流中间状态的情况(如tcp流)。Stateful 模式的基础是由多个报文组成的流。Stateless 理解与使用起来比较简单,下文主要说明这种模式的运行。

stateless 模式(命令执行均在解压后的 TRex 安装包目录下)

把 TRex 作为 server 启动

[bash]>sudo ./t-rex-64 -i -c 4
#配置文件中指定的发包核个数是固定的,可以通过 -c 参数来指定实际使用几个核,若不指定,则使用全部

等server完全运行起来后,在本机另外打开一个终端,通过 trex-console 连接到 TRex,进入到 console 界面后,就可以通过各种命令进行发包测试了。

Stateless 模式下的发包主要使用 python scapy 库来构造报文的,基础报文构造脚本示例位于目录 stl/ 下。发包命令:

# 指定 port 0 发送 udp 报文,发包速率为 10kbps
trex> start -f stl/udp_1pkt_simple.py -p 0 -m 10kbps

# 指定 port 1 发送 udp 报文,发包速率为 10Mbps
trex> start -f stl/udp_1pkt_simple_1.py -p 1 -m 10Mbps
  • -p :指定发包网卡,不指定则使用配置文件指定的所有网卡
  • -f:构造发包的脚本路径及文件名
  • -m MULT:发包速率,指定格式:[number][<empty> | bps | kbps | mbps | gbps | pps | kpps | mpps | %]%代表占网卡带宽的百分比,即10Gbps的网卡,-m 10% 则代表1Gbps。

发包过程中可通过命令来更新发包速率

#更新所有网卡发包速率
update -m <参数>

#更新指定网卡发包速率
update -p <port_id> -m <参数>

其他常用命令:

# pause the traffic on all port
>pause -a                                                              

# resume the traffic on all port
>resume -a                                                             

# stop traffic on all port
>stop -a                                                              

查看实时统计信息

>tui
Global Statistics

Connection  : localhost, Port 4501
Version     : v3.04, UUID: N/A
Cpu Util    : 0.2%
            :
Total Tx L2 : 40.01 Mb/sec
Total Tx L1 : 52.51 Mb/sec
Total Rx    : 40.01 Mb/sec
Total Pps   : 78.14 Kpkt/sec
            :
Drop Rate   : 0.00 b/sec
Queue Full  : 0 pkts

Port Statistics

   port    |         0          |         1          |
 --------------------------------------------------------
 owner      |             hhaim |             hhaim |
 state      |            ACTIVE |            ACTIVE |
 --         |                   |                   |
 Tx bps L2  |        10.00 Mbps |        10.00 Mbps |
 Tx bps L1  |        13.13 Mbps |        13.13 Mbps |
 Tx pps     |        19.54 Kpps |        19.54 Kpps |
 Line Util. |            0.13 % |            0.13 % |
 ---        |                   |                   |
 Rx bps     |        10.00 Mbps |        10.00 Mbps |
 Rx pps     |        19.54 Kpps |        19.54 Kpps |
 ----       |                   |                   |
 opackets   |           1725794 |           1725794 |
 ipackets   |           1725794 |           1725794 |
 obytes     |         110450816 |         110450816 |
 ibytes     |         110450816 |         110450816 |
 tx-bytes   |         110.45 MB |         110.45 MB |
 rx-bytes   |         110.45 MB |         110.45 MB |
 tx-pkts    |        1.73 Mpkts |        1.73 Mpkts |
 rx-pkts    |        1.73 Mpkts |        1.73 Mpkts |
 -----      |                   |                   |
 oerrors    |                 0 |                 0 |
 ierrors    |                 0 |                 0 |

 status:  /

 browse:     'q' - quit, 'g' - dashboard, '0-3' - port display
 dashboard:  'p' - pause, 'c' - clear, '-' - low 5%, '+' - up 5%,

stateless GUI

TRex 提供了图形化界面工具,可以安装在 Windows 机器上,远程连接到 TRex 所在的 Linux 机器上,图形化界面上查看实时收发包流量统计,更为直观。
下载地址:https://github.com/cisco-system-traffic-generator/trex-stateless-gui

TRex 仿真

TRex 提供了仿真工具,可执行py脚本(使用scapy构造报文的脚本),然后以抓包格式输出,可用来验证构造的报文是否符合预期

./stl-sim -f stl/udp_1pkt_simple.py -o udp_test.pcap -l 500
  • -l :生成的报文个数,默认是5000
  • -o:若不指定绝对路径,生成的抓包文件位于当前目录
TRex 抓包

Service mode 下可以抓包,在console界面输入service就进入了service mode,抓包命令:

trex(service)> capture record start --rx port_id[ port_id ...]
  • --rx:抓收到的报文
  • --tx:抓发出的报文
  • 若不指定 rx tx,收发的报文都抓
  • 可指定抓某个port或某几个port的报文,不指定则全部port

举例说明:

trex(service)>capture record start --rx 0 1

Starting packet capturing up to 1000 packets                 [SUCCESS]

*** Capturing ID is set to '19' ***
*** Please call 'capture record stop --id 19 -o <out.pcap>' when done ***

根据开始抓包后界面回显的提示,停止抓包

*** Capturing ID is set to '19' ***
*** Please call 'capture record stop --id 19 -o <out.pcap>' when done ***

trex(service)> capture record stop --id 19 -o <out.pcap>

注:-o 指定保存抓包文件的路径,应使用绝对路径

TRex arp 学习

TRex 可自动获取对端 mac,cfg yaml文件内若指定的是IP,即default_gw,可指示 TRex 学习对端mac。以下命令均在service mode下执行。

  1. 打开混杂模式(确保网卡可以收到广播包)
trex(service)> portattr --prom on
  1. 使用arp命令使 TRex 主动发 arp 请求,获取对端 mac
trex(service)> arp -p port_id[port_id port_id...] -r <cnt>
  • -p 指定port
  • -r 指定重复次数

举例:

trex(service)>arp -p 0 1 -r 3

Resolving destination on port(s) [0, 1]:                     [SUCCESS]

Port 0 - Recieved ARP reply from: 49.0.0.3, hw: 50:7c:6f:14:67:79
Port 1 - Recieved ARP reply from: 48.0.0.2, hw: 50:7c:6f:14:67:78

285.42 [ms]

关闭service mode
service --off

TREX说明书: 命令名称: Z1 简便找盘 XINXI 查看硬盘信息 chkresfall检测固件 smt 查看SMART表 csmt 清SMART表 svmod 0x.. 单个备份模块 wrmod 0x.. 写入备份好的单个模块 pg 合并GP pgn 立即合并pg CGLIST 清G CFILE 0X33 清P Depophd 1,X关头 DM 内部低格 rdfl 2;edit 编辑ID wrdir 写01扇区 GSGJQ 格式化固件区 QLGJQ固件区清零 clribilog 清E0-E6 F0-F1的LOG HEADTEST 自动测试当前所有磁头好坏,好的返回OK,坏的返回BAD。 getPEDATA 自动获取PE bin 读E8 E9 E10 tp 校准指针 sf1 从0x01自动开自校准(范围S53. S58) 处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次,校准即开启。校准时候用 POLL 0 命令实时查看进程。 sf2 从0x0e自动开自校准(若sf失败,则用这个跑(范围S53. S58)) 处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次, 校准即开启。校准时候用POLL 0命令实时查看进程。 stop 强制停校准(盘在IDE 1,不是IDE0) rdTRK 自动备份全固件磁道 (范围S53. S58) wrTRKa 自动写全固件磁道 (范围S53. S58) swap58 自动全换SABRE58系列固件(范围S53. S58) swap53 自动全换SABRE53系列固件(范围S53. S58) wr58 自动全写S58系列固件(范围S53. S58) wr53 自动全写S53系列固件(范围S53. S58) sv58 自动全备份S58系列固件(范围S53. S58) sv53 自动全备份S53系列固件(范围S53. S58) wrdir 写dir wrrplist 写35模块 re47 自动配47适配器模块(范围S53. S58) re40 自动配40适配器模块(范围S53. S58) SVLROM 保存128K ROM WRROML 写128K ROM CLRCOLOR 修护色块和坏道的命令 CLR0 清零 CLRPW 解密 setPWD 加密 disablePWD 禁用密码 unlockUnit SECURITY UNLOCK Macro erasePrep SECURITY ERASE PREPARE Macro eraseUnit SECURITY ERASE UNIT Macro SMARTSTAT SMART归位 smtRdData SMART数据读取 htl L板测磁头 hlr换L板ROM AdpL自适配L板47 KadpL headnum 砍L板所选磁头适配 svtl uhead 保存L板所选磁头磁道 wrtl uhead 写所选磁头磁道 SVALL 存全固件RPM wrall 写全固件RPM svhawk保存HAWK全固件 wrhawk写HAWK全固件 svthawk保存HAWK磁道 wrthawk写HAWK磁道 initall初始化三项 getadpfrom40 从40拷贝MR适配进47 getadpfrom41 从41拷贝MR适配进47 raidergetadpfrom40 raider系列从40拷贝MR适配进47 raidergetadpfrom41 raider系列从41拷贝MR适配进47 svseqfull SEQ保存全固件 wrseqfull SEQ写全固件 SVBUC BUC保存全固件 WRBUC BUC写全固件 SVRAIDER RAIDER保存全固件 WRRAIDER RAIDER写全固件 kill headnum 这几个系列的砍头 adujst40 调整40模块 fmtcover 格式覆盖 SVORION ORION保存全固件 WRORION ORION写全固件 ORIONadp47 ORION配47 ROYL tp32 32位校准指针 ROYSF 自动开ROYL系列校准(从01开始跑,即第一个DC)处理完后,出现COMPLETELY(完成)此时需要手工断电通电一次,校准即开启。 校准时候用POLL 0命令实时查看进程。 STOPROY 强制停ROY校准 ROYHEADTEST ROY测试磁头 ROYRE47 ROY配ROM ROYMAKEROM ROY配ROM BAKpermovl 备份11号ATA模块 新命令: SF、SFP校准 LDR自动加载11 tpseq 设置校准起始指针 Get_adp_info 获取适配信息 Get_adp_new_info 获取适配信息(新) displayheadmap、hdmap 显示磁头映射 AAJSre40 AAJS盘从47拷贝MR到40 AAJSre47 AAJS盘从40拷贝MR到47 adjust_40(微代码,调用时加.)适配40 adjust_47(微代码,调用时加.)适配47 Adpzeus自适配ZEUS系列47 AdpR R系自适配47 K47 umaxhead UHEAD 砍头且设置47 kadpzeus headnum砍ZEUS所选磁头适配 cutmap uhead 关要砍的头的映射 SETPARM uhead设置所需磁头数的TPI和CAP getflash读取ROY备份ROM SA并保存 peirom配ROM svall 存全固件RPM,并存ROM.BIN, 11 PERMOVL.BIN, 35 RPLIST.BIN SVFW 保存全固件 SVBASE 存33 40 41 SVROM 保存192K ROM SV2ROM 保存256K ROM SVROMMOD 保存A 47 SVT UHEAD 保存所选磁头磁道 SVMOD OverlayNum 保存单个模块 WRBASE 写33 40 41 WRROMMOD 写A 47 WRROM 写192K ROM WR2ROM 写256K ROM WRALL 全写固件RPM RWRFW 自读自写全固件RPM wrFW 全写固件RPM WRT UHEAD 写入所选磁头磁道 WRTL UHEAD 写入所选磁头磁道 WrMOD BinFileNum 写入单个模块 SETHQ ULCAP设置HQ自定义CAP SETTAG ULCAP设置TAG自定义CAP scap显示CAP STPI显示TPI dpst、dpst1显示流程 EMDL编辑磁盘型号 HT测试头 HDT UHEAD测试所选头 SETLBA ULBA设置自定义LBA setdcm udcm设置自定义DCM setTPI为全部磁头设置TPI setCap为全部磁头设置CAP ST0 UTPI为0头设置TPI ST1 UTPI为1头设置TPI ST2 UTPI为2头设置TPI ST3 UTPI为3头设置TPI ST4 UTPI为4头设置TPI ST5 UTPI为5头设置TPI ST6 UTPI为6头设置TPI ST7 UTPI为7头设置TPI SC0 UCAP为0头设置CAP SC1 UCAP为1头设置CAP SC2 UCAP为2头设置CAP SC3 UCAP为3头设置CAP SC4 UCAP为4头设置CAP SC5 UCAP为5头设置CAP SC6 UCAP为6头设置CAP SC7 UCAP为7头设置CAP RADP读103并重新适配47 REPAIR重建DIR SFLOG查校准LOG CM对比47和103 ClrRES prmFileID、ClrR prmFileID、Clrbinfile binfile清空所选模块 CLEARFILE UFILEID清空所选ID模块 CLRPSTLOG清除SPTLOG CLRLIST清除所有缺陷表 kadp3 headnum、kadp2 headnum、kNEW2ROM headnum、knew3 headnum砍所选磁头适配 k0 headnum、k1 headnum、k3 headnum砍头 vp1、vp显示P表 VG显示G表 c4改28走C4 FmtR格式化固件区 cf清空缺陷 sz显示ZONE kz uznum ulba砍所选段位LBA SHOWZONE显示ZONE kZONE uzone砍所选段位 hr换ROM gb搞0B模块 h40换40 固件区 允许输入拉丁字符的拼音 Firmware District 常用指令 1、 关头 Depophd 1,X 2、 配47 Re47 3、 格式化 Fmtunit 4、 启动自校 Sf 5、 备份固件 Sv53,sv58 6、 写全部固件 Wr53,wr58 7、 自动更换替换固件 Swap53,swap58 8、 写01扇区 wrdir 9、 格式化固件区 fmtrsvd 10、 固件区清零 zrcyls 11、 清LOG clribilog sv109t wr109t wr083j sv083j sv218b wr218b adp0 adp1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值