Trex

1. 环境准备

 OS选择和安装

根据说明,trex支持常用的linux系统,本次使用的是ubuntu 16.04.1。

虚拟机配置需要能上网(虚拟机桥接到真实电脑物理网卡上网,此部分不赘述)

Trex环境安装

         1、新建trex工作目录  :mkdir trex

         2、进入trex工作目录  :cd trex

         3、下载安装包  :wget --no-cache http://trex-tgn.cisco.com/trex/release/latest

         4、解压文件  :tar -zxvf latest

         5、进入相应工作目录  :cd trex

2. Trex环境调试 - stateless模式

2.1 stateless  模式配置和启动

  1.  ./dpdk_setup_ports.py  -h, --help       //查看这个命令使用帮助

  2.  sudo ./dpdk_set_ports.py -t                 //以table的形式打印所有网络接口的num/pcie/MAC

  3. sudo ./dpdk_set_ports.py -s                 //显示接口的状态,是否被dpdk bind使用,xinzhuang的dpdk下没有任何接口

  4. sudo ./dpdk_setup_ports.py -c 02:06.0 02:07.0 -o /etc/trex_cfg.yaml     //绑定相应的借口给dpdk使用,并替换/etc/下的trex端口配置,这样如果打流的时候没有主动添加cfg yaml,就会默认用这个yaml,这样下面就不会下一步了。

      

     5. 复制配置文件到/etc下:root@ubuntu:/home/test/trex/v2.57#cp  cfg/simple_cfg.yaml  /etc/trex_cfg.yaml

     6. 修改接口配置文件和自己的拓扑相符合:

      修改如下两个部分,修改了两个接口,实际只使用一个也可以。只修改一个只有一个方向的流,回不来。

       ip是当前使用的网口的ip,gw是与此接口相连的网口的ip地址。需要对应修改。在同一个子网内即可。

      

   

3.How to use trex stateless?

可以通过client的方式来使用trex,也可以直接通过pcap回放的方式来使用。

   3.1. 启动stateless服务器:

root@ubuntu:/home/test/trex/v2.57#./t-rex-64 -i     

服务器启动后,可以监听各个端口的收发包情况

  console连接环境确认

1、打开控制台、进入servicee模式,执行ping命令,确认环境:

 配置多流流量

    sudo vim /opt/trex/v2.61/stl/simple_3pkt.py

def create_stream (self):

        # create a base packet and pad it to size
        size = self.fsize - 4 # no FCS
        base_pkt =  Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)       1
        base_pkt1 =  Ether()/IP(src="16.0.0.2",dst="48.0.0.1")/UDP(dport=12,sport=1025)
        base_pkt2 =  Ether()/IP(src="16.0.0.3",dst="48.0.0.1")/UDP(dport=12,sport=1025)
        pad = max(0, size - len(base_pkt)) * 'x'


        return STLProfile( [ STLStream( isg = 0.0,
                                        packet = STLPktBuilder(pkt = base_pkt/pad),
                                        mode = STLTXCont( pps = 10),                         2
                                        ),

                             STLStream( isg = 25000.0, #defined in usec, 25 msec
                                        packet  = STLPktBuilder(pkt = base_pkt1/pad),
                                        mode    = STLTXCont( pps = 20),                      3
                                        ),

                             STLStream(  isg = 50000.0,#defined in usec, 50 msec
                                         packet = STLPktBuilder(pkt = base_pkt2/pad),
                                         mode    = STLTXCont( pps = 40)                      4

                                        )
                            ]).get_streams()

  可分别对三种流量包头配置(IP),速度配置(PPS),启动时间配置(isg)。

4. 启动TRex,测试双网口网卡回环。

  将光线两端分别接入网卡的两个口。

  打开命令行终端,并开启TRex服务端程序:

sudo ./t-rex-64 -i 
# t-rex-64 是可执行文件,在安装目录中

  打开另外一个命令行终端,开启TRex客户端程序:

trex-console  

  在客户端程序中开启流量发送:

start -f stl/simple_3pkt.py -a

  常用操作:

pause -a 
#暂停所有发送

tui
#流量统计信息

 

4. pcap数据包回放发包 - stateful模式

4.1 pcap准备

此部分使用安装文件自带的例子,/home/trex/trex/v2.62/avl 在目录下有很多的pcap,我们可以通过在yaml中配置多种不通的pcap和client/server的ip范围来增加我们打流的丰富程度。一般测performance也会需要各种不通的配置文件。

sfr_delay_10.yaml

 duration : 0.1
  generator :
          distribution : "seq"
          clients_start : "16.0.0.1"
          clients_end   : "16.0.1.255"
          servers_start : "48.0.0.1"
          servers_end   : "48.0.21.245"
          clients_per_gb : 201
          min_clients    : 101
          dual_port_mask : "1.0.0.0"
          tcp_aging      : 0
          udp_aging      : 0
  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]
  #vlan       : { enable : 1  ,  vlan0 : 100 , vlan1 : 200 }
  #mac_override_by_ip : true
  cap_ipg    : true
  #cap_ipg_min    : 30
  #cap_override_ipg    : 200
  wlength    : 107
  cap_info :
     - name: avl/delay_10_http_get_0.pcap
       cps : 102.0
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_post_0.pcap
       cps : 102.0
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_https_0.pcap
       cps : 33.0
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_http_browsing_0.pcap
       cps : 179.0
       ipg : 10000
       rtt : 10000
       w   : 1
     - name: avl/delay_10_exchange_0.pcap
       cps : 64.0
       ipg : 10000
       rtt : 10000
       w   : 1
 

4.2 修改文件、回放脚本

1、修改配置文件:

Yaml文件包括两部分,generator部分是关于更换数据包中五元组等信息的统一操作;cap_info部分是使用的数据包,需要回放哪些数据包及内容。可以列很多出来。

 

2、脚本回放:./t-rex-64 -f cap2/dns.yaml -m 1 -d 10 (m为复制几份,可以通过这个控制流量的大小,d为持续时间)

执行脚本回放后,对端虚拟机内,可以查看到收到的数据包,其中原地址、目的地址等是按照配置,自行修改的。

这中是默认用/etc/下的端口配置yaml,我们也可以在后面自己指定对应的cfg yaml,这样就不用关注/etc/下的配置。

 

3.sudo ./t-rex-64 -f avl/sfr_delay_10_1g.yaml   --cfg  /home/cisco/v2.46/pigeon/trex_cfg.yaml -c 5 -m 5 -d 3000 这条是带 stream yaml和cfg yaml的命令。

4.回放一个flow一次:

只打一条流打一次,利用一个pcap文件,这样发送和接收多少个包都是一定的。如果我们对flow进行相应的测试和monitor,这里就会帮助我们分析问题。如果要测performance,可以打大流量,修改m值即可调流量大小,在页面会显示出来。

sudo ./t-rex-64 -f pigeon/sfr_delay_10_1g.yaml --cfg /home/trex/v2.58/pigeon/port_cfg.yaml.1 -c 1 -d 1 -e -m 1 --active-flows 1

sfr_delay_10_1g.yaml 改成下面这样即可:

- duration : 0.1

  generator :

          distribution : "seq"

          clients_start : "67.0.0.1"

          clients_end   : "67.0.1.255"

          servers_start : "98.0.0.1"

          servers_end   : "98.0.21.245"

          clients_per_gb : 201

          min_clients    : 101

          dual_port_mask : "1.0.0.0"

          tcp_aging      : 0

          udp_aging      : 0

  mac        : [0x0,0x0,0x0,0x1,0x0,0x00]

  cap_ipg    : true

  #cap_ipg_min    : 30

  #cap_override_ipg    : 200

  cap_info :

     - name: avl/delay_10_http_get_0.pcap

       cps : 1

       ipg : 10000

       rtt : 10000

       w   : 1

 

小结:这里都是关于ipv4的操作,对于ipv6的操作,只需要修改流的yaml文件,然后在命令后加参数--ipv6,但是必须要保证是ipv6的网络,路由都是有的。一般我们打流只是打出去,如果我们要收到,必须要在连接的路由器上设置相应的ip route。

 

duration : 0.1

#vlan : { enable : 1 , vlan0 : 100 , vlan1 : 200 }

src_ipv6 : [0x2001,0x0DB8,0x0003,0x0004,0x0000,0x0000]

dst_ipv6 : [0x2001,0x0DB8,0x0003,0x0004,0x0000,0x0000]

generator :

distribution : "seq"

clients_start : "16.0.0.1"

clients_end : "16.0.21.255"

servers_start : "48.0.0.1"

servers_end : "48.0.21.255"

clients_per_gb : 201

min_clients : 201

dual_port_mask : "1.0.0.0"

tcp_aging : 0

udp_aging : 0

mac : [0x0,0x0,0x0,0x1,0x0,0x00]

 

 

参考:

https://www.cnblogs.com/pandaroll/p/11617801.html

https://blog.csdn.net/haozi87/article/details/93762153

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值