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