【工具】Trex使用教程
簡介
TRex 是一種高性能的網(wǎng)絡(luò)流量生成工具,它通過創(chuàng)新和可擴(kuò)展的軟件實(shí)現(xiàn),
利用標(biāo)準(zhǔn)和開放的軟件以及x86/UCS硬件,解決了傳統(tǒng)商業(yè)狀態(tài)感知流量生成器的問題。
TRex 的關(guān)鍵特點(diǎn)包括:
生成和分析L4-7流量:TRex 能夠模擬傳輸層到應(yīng)用層的流量,為網(wǎng)絡(luò)性能測試提供全面的解決方案。
一體化商業(yè)L7工具能力:在一個軟件包中集成了商業(yè)級L7工具的功能,提供成本效益高的測試解決方案。
基于預(yù)處理和智能重放的狀態(tài)流量生成器:使用真實(shí)流量模板進(jìn)行預(yù)處理和智能重放,以生成狀態(tài)流量。
生成和放大客戶端和服務(wù)器端流量:能夠同時生成和放大客戶端請求和服務(wù)器響應(yīng)流量,模擬真實(shí)的網(wǎng)絡(luò)交互。
可定制的功能:用戶可以根據(jù)需要添加自定義功能,以適應(yīng)特定的測試需求。
擴(kuò)展性強(qiáng):能夠擴(kuò)展到200Gb/sec的速率,適用于單個UCS系統(tǒng)(使用Intel 40Gb/sec NICs)。
低成本:與商業(yè)流量生成器相比,TRex 提供了成本效益更高的選擇。
易于安裝和部署:作為一個自包含的軟件包,TRex 可以輕松地安裝和部署在多種環(huán)境中。
支持虛擬接口:TRex 支持在完全虛擬化的環(huán)境中使用,無需物理 NICs。
這使得 TRex 可以在多種虛擬化場景下使用。
使用示例:
Amazon AWS:在云環(huán)境中使用 TRex 進(jìn)行網(wǎng)絡(luò)性能測試。
Cisco LaaS:作為服務(wù)的一部分,使用 TRex 來提供網(wǎng)絡(luò)測試能力。
TRex on your laptop:在個人筆記本電腦上部署 TRex,進(jìn)行本地網(wǎng)絡(luò)性能測試和學(xué)習(xí)。
TRex 的靈活性和高性能使其成為網(wǎng)絡(luò)工程師和研究人員在進(jìn)行網(wǎng)絡(luò)性能測試和分析時的
理想選擇。通過模擬復(fù)雜的網(wǎng)絡(luò)流量,TRex 幫助用戶發(fā)現(xiàn)潛在的性能瓶頸和安全問題,優(yōu)化網(wǎng)絡(luò)設(shè)計(jì)和配置。下面來介紹一下 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發(fā)布文檔
安裝包解壓:tar -xzvf latest 或 tar -xzvf vX.XX.tar.gz
進(jìn)入解壓后的目錄,對幾個主要文件夾做一個說明:
├─astf
├─automation
├─avl
├─bird
├─cap2
├─cfg // TRex 提供的配置文件示例
├─emu
├─exp
├─external_libs // 引用的外部庫
├─generated
├─ko
├─so
├─stl // 使用Python Scapy 庫構(gòu)造各類報(bào)文的示例
├─trex_emu
└─x710_ddp
首次運(yùn)行步驟
確認(rèn)使用的網(wǎng)卡信息
TRex 是一款 Linux 應(yīng)用程序,與 Linux 內(nèi)核模塊交互。它使用 DPDK(無需作為庫安裝 DPDK)。
TRex 應(yīng)該能夠在任何商用現(xiàn)貨 (COTS) x86 服務(wù)器上運(yùn)行。運(yùn)行 TRex 的另一種選擇是使用內(nèi)核接口
以原始套接字模式運(yùn)行,適用于低性能和低占用需求(由于內(nèi)核限制,大約限制在 1MPPs)。
本文涉及的內(nèi)容是基于 CentOS 進(jìn)行描述的,收發(fā)包網(wǎng)卡使用DPDK驅(qū)動接管的方式
(無需手動綁定,TRex 運(yùn)行會自動執(zhí)行綁定)。
進(jìn)入安裝包所在目錄,執(zhí)行 sudo ./dpdk_setup_ports.py -s 查看網(wǎng)卡信息,執(zhí)行完會看到類似如下信息:
[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支持的網(wǎng)卡類型:官網(wǎng)鏈接
配置文件修改
默認(rèn)配置文件路徑:/etc/trex-cfg.yaml,有兩種方式生成配置文件。
TRex提供了配置文件的demo,在此基礎(chǔ)上進(jìn)行修改,示例存放路徑:cfg/ ,以 simple_cfg.yaml 文件為例,對各配置參數(shù)進(jìn)行說明。
- 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:端口數(shù)量,必須等于 interfaces 中列出的接口數(shù)量
version:必須設(shè)置為2
interfaces:要使用的接口列表。運(yùn)行 sudo ./dpdk_setup_ports.py -s 來查看可選列表
port_info:端口信息。TRex 需要知道每個端口對應(yīng)的目的 MAC 地址,可以通過兩種方式指定:
直接指定 dest_mac
指定 default_gw,TRex 將向此 IP 發(fā)出 ARP 請求,并使用結(jié)果作為目的 MAC
使用 dpdk_setup_ports.py 腳本生成,腳本提供了交互模式來生成配置文件,命令:sudo ./dpdk_setup_ports.py -i,根據(jù)提示信息選擇要使用的網(wǎng)卡,生成的配置文件如下所示:
### 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:定義了接口對的信息(依據(jù)interfaces列表中的順序)。每個部分,從- socket開始,為不同的接口對指定配置。
socket:為接口對分配使用的內(nèi)存的 NUMA 節(jié)點(diǎn)
threads:發(fā)包線程使用的 CPU 核列表,列表里所有的 CPU 要?dú)w屬于socket指定的 NUMA 節(jié)點(diǎn)
查看 CPU 信息的命令:lscpu,可查看有幾個NUMA節(jié)點(diǎn),各NUMA節(jié)點(diǎn)上有哪些 CPU。
# 兩個 NUMA節(jié)點(diǎn),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架構(gòu)簡單來說就是,系統(tǒng)有多個CPU處理器,每個處理器有自己的獨(dú)立內(nèi)存,CPU訪問自己的內(nèi)存,速度會更快,所以上述配置中,指定的CPU要?dú)w屬于同一個NUMA節(jié)點(diǎn)。
運(yùn)行
TRex 支持兩種運(yùn)行模式:stateful 和 stateless,可簡單理解為,stateless 支持基本的 L2/L3 層測試,沒有保存流中間狀態(tài)的情況(如tcp流)。Stateful 模式的基礎(chǔ)是由多個報(bào)文組成的流。Stateless 理解與使用起來比較簡單,下文主要說明這種模式的運(yùn)行。
stateless 模式(命令執(zhí)行均在解壓后的 TRex 安裝包目錄下)
把 TRex 作為 server 啟動
[bash]>sudo ./t-rex-64 -i -c 4
#配置文件中指定的發(fā)包核個數(shù)是固定的,可以通過 -c 參數(shù)來指定實(shí)際使用幾個核,若不指定,則使用全部
等server完全運(yùn)行起來后,在本機(jī)另外打開一個終端,通過 trex-console 連接到 TRex,進(jìn)入到 console 界面后,就可以通過各種命令進(jìn)行發(fā)包測試了。
Stateless 模式下的發(fā)包主要使用 python scapy 庫來構(gòu)造報(bào)文的,基礎(chǔ)報(bào)文構(gòu)造腳本示例位于目錄 stl/ 下。發(fā)包命令:
# 指定 port 0 發(fā)送 udp 報(bào)文,發(fā)包速率為 10kbps
trex> start -f stl/udp_1pkt_simple.py -p 0 -m 10kbps
# 指定 port 1 發(fā)送 udp 報(bào)文,發(fā)包速率為 10Mbps
trex> start -f stl/udp_1pkt_simple_1.py -p 1 -m 10Mbps
-p :指定發(fā)包網(wǎng)卡,不指定則使用配置文件指定的所有網(wǎng)卡
-f:構(gòu)造發(fā)包的腳本路徑及文件名
-m MULT:發(fā)包速率,指定格式:[number][<empty> | bps | kbps | mbps | gbps | pps | kpps | mpps | %],%代表占網(wǎng)卡帶寬的百分比,即10Gbps的網(wǎng)卡,-m 10% 則代表1Gbps。
發(fā)包過程中可通過命令來更新發(fā)包速率
#更新所有網(wǎng)卡發(fā)包速率
update -m <參數(shù)>
#更新指定網(wǎng)卡發(fā)包速率
update -p <port_id> -m <參數(shù)>
其他常用命令:
# pause the traffic on all port
>pause -a
# resume the traffic on all port
>resume -a
# stop traffic on all port
>stop -a
查看實(shí)時統(tǒng)計(jì)信息
>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 機(jī)器上,遠(yuǎn)程連接到 TRex 所在的 Linux 機(jī)器上,圖形化界面上查看實(shí)時收發(fā)包流量統(tǒng)計(jì),更為直觀。
下載地址:https://github.com/cisco-system-traffic-generator/trex-stateless-gui
TRex 仿真
TRex 提供了仿真工具,可執(zhí)行py腳本(使用scapy構(gòu)造報(bào)文的腳本),然后以抓包格式輸出,可用來驗(yàn)證構(gòu)造的報(bào)文是否符合預(yù)期
./stl-sim -f stl/udp_1pkt_simple.py -o udp_test.pcap -l 500
1
-l :生成的報(bào)文個數(shù),默認(rèn)是5000
-o:若不指定絕對路徑,生成的抓包文件位于當(dāng)前目錄
TRex 抓包
Service mode 下可以抓包,在console界面輸入service就進(jìn)入了service mode,抓包命令:
trex(service)> capture record start --rx port_id[ port_id ...]
1
--rx:抓收到的報(bào)文
--tx:抓發(fā)出的報(bào)文
若不指定 rx tx,收發(fā)的報(bào)文都抓
可指定抓某個port或某幾個port的報(bào)文,不指定則全部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 ***
根據(jù)開始抓包后界面回顯的提示,停止抓包
*** 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 指定保存抓包文件的路徑,應(yīng)使用絕對路徑
TRex arp 學(xué)習(xí)
TRex 可自動獲取對端 mac,cfg yaml文件內(nèi)若指定的是IP,即default_gw,可指示 TRex 學(xué)習(xí)對端mac。以下命令均在service mode下執(zhí)行。
打開混雜模式(確保網(wǎng)卡可以收到廣播包)
trex(service)> portattr --prom on
1
使用arp命令使 TRex 主動發(fā) arp 請求,獲取對端 mac
trex(service)> arp -p port_id[port_id port_id...] -r <cnt>
1
-p 指定port
-r 指定重復(fù)次數(shù)
舉例:
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]
關(guān)閉service mode
service --off
————————————————
原文鏈接:https://blog.csdn.net/Wendy1226/article/details/133211803
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。