TRex,一个基于DPDK的数据包发生器,测试仪
1. introduction
TRex是cisco基于Intel dpdk开发的软件程序。推荐在CentOS/RHEL 7.6, 64bits中运行,否则connectx-4网卡不可使用。
笔者在Ubuntu16.04中Intel-XL710网卡测试也成功。
使用中高端服务器和最新的Intel网卡,TRex的发包性能可达到200Gbps,使用某些类型的网卡还支持基于硬件的每流统计量汇报(Intel-XL710 支持255条独立流)。
2. installation
mkdir -p /opt/trex cd /opt/trex wget --no-cache https://trex-tgn.cisco.com/trex/release/latest tar -xzvf latest
至此就结束了安装,解压出来都是可执行文件。
另外,需要配置网卡设置:
sudo ./dpdk_setup_ports.py -s
# 查看网络接口配置
设置配置文件,例如:给DPDK驱动使用:
cp cfg/simple_cfg.yaml /etc/trex_cfg.yaml
#拷贝例子到默认配置文件路径
根据接口情况手动修改配置文件:
sudo vim /etc/trex_cfg.yaml
<none>
- port_limit : 2
version : 2
interfaces : ["03:00.0", "03:00.1"] #需要对此进行手动调整,填写网口pcie编号
port_info :
- ip : 1.1.1.1
default_gw : 2.2.2.2
- ip : 2.2.2.2
default_gw : 1.1.1.1
3. 配置多流流量
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- -i
# t-rex- 是可执行文件,在安装目录中
打开另外一个命令行终端,开启TRex客户端程序:
trex-console
在客户端程序中开启流量发送:
start -f stl/simple_3pkt.py -a
常用操作:
pause -a
#暂停所有发送 tui
#流量统计信息
另外一个比较有用的操作是可以根据流量配置文件生成对应的pcap文件,在流量发送之前,
通过视察pcap文件,我们可以测试配置脚本是否正确:
sudo ./stl-sim -f stl/udp_1pkt_range_clients_splita.py -o flow1a64Byte60000.pcap -l 60000
#-o 输出文件名 -l 总包数
5. 启动硬件每流测量
编写流量配置文件,其中需要设置流ID(pg_id = 7),以及打开统计功能(flow_stats) ,stl/4flow_stats.py:
from trex_stl_lib.api import *
class STLS1(object):
def __init__ (self):
self.fsize =128; # the size of the packet
def create_stream (self):
# Create base packet and pad it to size
size = self.fsize - 4; # HW will add 4 bytes ethernet FCS
base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025)
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)
base_pkt3 = Ether()/IP(src="16.0.0.4",dst="48.0.0.1")/UDP(dport=12,sport=1025)
pad = max(0, size - len(base_pkt)) * 'x'
return STLProfile( [ STLStream( isg = 1.0, # start in delay in usec
packet = STLPktBuilder(pkt = base_pkt/pad),
mode = STLTXCont( pps = 27500),
flow_stats = STLFlowStats(pg_id = 7),
),
STLStream( isg = 2.0,
packet = STLPktBuilder(pkt = base_pkt1/pad),
mode = STLTXCont( pps = 27500),
flow_stats = STLFlowStats(pg_id = 12),
),
STLStream( isg = 3.0,
packet = STLPktBuilder(pkt = base_pkt2/pad),
mode = STLTXCont( pps = 27500),
flow_stats = STLFlowStats(pg_id = 15),
),
STLStream( isg = 4.0,
packet = STLPktBuilder(pkt = base_pkt3/pad),
mode = STLTXCont( pps =27500),
flow_stats = STLFlowStats(pg_id = 17),
)
]).get_streams()
def get_streams (self, direction = 0, **kwargs):
# create 1 stream
return self.create_stream()
# dynamic load - used for trex console or simulator
def register():
return STLS1()
开始流量:
start -f stl/4flow_stats.py -a
打开监控:
tui
打开每流显示:
#对于版本不同可能采用不同方式, v2.6的打开方式如下:
# 先按下esc
# 再按下x,启动每流监控
TRex,一个基于DPDK的数据包发生器,测试仪的更多相关文章
- 基于DPDK的高效包处理系统
一.概念 Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用 ...
- scapy - 基于python的数据包操作库
简介 地址:https://github.com/secdev/scapy scapy是一个基于python的交互式数据包操作程序和库. 它能够伪造或者解码多种协议的数据包,通过使用pcap文件对他们 ...
- 一个基于图的数据管理系统-gStore
gStore是遵循 BSD协议的一个开源项目.一个基于图的 RDF 三元组存储的数据管理系统.该项目是北京大学.滑铁卢大学.香港科技大学的联合研究项目.中国北京大学计算机科学与技术研究所的数据库组对该 ...
- 基于IPv6的数据包分析(第三组)
一.实验拓扑 二.配置过程 本处提供R1.R2.R4的详细配置过程(包含静态路由的配置) 1) R1: R1(config)#int e1/0 R1(config-if)#ipv6 addr ...
- 基于IPV6的数据包分析(GNS3)
1.拓扑图 2.配置ipv6地址.使路由器之间可互ping,用ospf配置.(R5为例) 查看路由表 试R5 ping 到R4 R4 ping到 R1 3.开始抓包分析 128返回请求(Echo Re ...
- 基于IPV6的数据包分析(更新拓扑加入了linux主机和抓取133icmp包)(第十三组)
1.拓扑图 2.配置ipv6地址,在拓扑图上对应位置标有对应网段,所在网段的端口按照网段配置,下图以r4为例 3.配置路由表,由于静态路由还要敲ip很麻烦所以使用ospf协议,下图为ospf配置以r5 ...
- 基于IPv6的数据包分析
1.首先我们来构建拓扑:如下所示 2.对各个路由器进行配置使得网络ping通:命令如下 a)配置各路由器接口的IPv6地址,可由上图注释配置 b)配置各路由器的静态路由(此处举例R4) (global ...
- 基于IPv6的数据包抓包分析(GNS3)
一.实验拓扑 二.路由配置 路由R1.R2.R3.R4.R5详细配置: 1.配置R1: R1(config)#interface fastEthernet 0/1 R1(config-if)#ipv6 ...
- 多CPU下基于e1000e驱动的数据包以及网卡中断流程分析.doc
http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WD ...
随机推荐
- alpine使用的避坑指南
alpine,是一个重量仅为5 MB的最小Linux发行版.它还有基本的linux工具和一个不错的包管理器APK.APK非常稳定,有相当数量的包.由于体积小,在容器中很受欢迎,但是使用上坑也很多,大部 ...
- C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法
一 HttpWebReques1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();2,其Method指定了请求类型,这里用的GET,还 ...
- ElasticSearch 查询索引
GET iis_qr_2019-07/_search #查询iis_qr_2019-07索引下的所有日志 GET iis_qr_2019-07/_search?_source=c-ip,time #只 ...
- P2995 [USACO10NOV]牛的照片(树状数组,逆序对)
题目: P2995 [USACO10NOV]牛的照片Cow Photographs P4545 [USACO10NOV]奶牛的图片Cow Photographs SP7809 COWPIC - Cow ...
- iis url 重写
1.选择网站-找到有测url 重写 :2:选中它,在右上角有一个打开功能,点击打开 3.依然在右上角,点击添加规则 4:选择第一个,空白规则 名称随便输入,我们通常有这样一个需求,就是.aspx 后缀 ...
- iOS11里判断Safari浏览器是无痕模式还是正常模式?
var isPrivate = false; try { window.openDatabase(null, null, null, null); } catch (_) { isPrivate = ...
- 路由拨号上网过Drcom
学校校园宽带是Drcom认证的 ,一人一号一设备.用着难受就决定想破解. 开始想着用软路由,但是感觉对电脑不友好,所以就决定买个路由器来搞. 一丶环境说明 学校使用的是Drcom 6.0 P版客户端. ...
- 易语言网页登录 POST
使用精易模块 打开网页登录窗口 抓取数据 输入用户名密码,抓包 保存抓到的数据 包含post地址和数据信息 易语言代码 解决乱码
- 在小程序中实现 Mixins 方案
摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...
- Linux从入门到放弃、零基础入门Linux(第一篇):计算机操作系统简介、linux介绍
一.计算机操作系统简介 操作系统的定义: 操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. 操作系统的内核的定义: 操作系统的内核是一个管理和控制程序,负责 ...