博客專欄

        EEPW首頁 > 博客 > 【工具】Trex使用教程

        【工具】Trex使用教程

        發(fā)布人:電子禪石 時間:2024-09-03 來源:工程師 發(fā)布文章

        簡介

        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)系工作人員刪除。



        關(guān)鍵詞: trex

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 和龙市| 寻甸| 郎溪县| 玉山县| 洪雅县| 清新县| 时尚| 玉环县| 措勤县| 正镶白旗| 永昌县| 曲阳县| 仙居县| 玉环县| 武义县| 舒城县| 新巴尔虎左旗| 伊川县| 万州区| 莒南县| 项城市| 宁城县| 临西县| 定边县| 松溪县| 台北市| 平邑县| 司法| 赣州市| 天峻县| 瑞昌市| 昭觉县| 和顺县| 汝州市| 永胜县| 和龙市| 富阳市| 新密市| 泌阳县| 吉水县| 繁昌县|