1 基本用法-DNS基本示例
以下是一个有助于理解 TRex 工作原理的简单示例,该示例使用 TRex 模拟器。该模拟器可以在任何 Cisco Linux 上运行,包括 TRex 本身。TRex 模拟客户端和服务器,并根据提供的 pcap 文件生成流量。

以下是一个示例 YAML 格式的流量配置文件 (cap2/dns_test.yaml),带有解释性说明。
- [bash]>cat cap2/dns_test.yaml
- - duration : 10.0
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1" 1
- clients_end : "16.0.0.255"
- servers_start : "48.0.0.1" 2
- servers_end : "48.0.0.255"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- cap_info :
- - name: cap2/dns.pcap 3
- cps : 1.0 4
- ipg : 10000 5
- rtt : 10000 6
- w : 1
说明:
1、客户端范围(IPv4 格式)。
2、服务器范围(IPv4 格式)。
3、pcap 文件,其中包含将用作模板的 DNS cap 文件。
4、每秒生成的连接数。在示例中,1.0 表示每秒 1 个连接。
5、包间间隙(微秒)。10,000 = 10 毫秒。
6、应该和ipg一样。
DNS 模板文件

DNS 模板文件包括:
一流 _
两包
第一个数据包:来自发起者(客户端→服务器)
第二个数据包:响应(服务器→客户端)
TRex 替换了 client_ip、client_port 和 server_ip。server_port 将保持不变。
- [bash]>./bp-sim-64-debug -f cap2/dns.yaml -o my.erf -v 3
- -- loading cap file cap2/dns.pcap
- id,name , tps, cps,f-pkts,f-bytes, duration, Mb/sec, MB/sec, #1
- 00, cap2/dns.pcap ,1.00,1.00, 2 , 170 , 0.02 , 0.00 , 0.00 ,
- 00, sum ,1.00,1.00, 2 , 170 , 0.00 , 0.00 , 0.00 ,
-
- Generating erf file ...
- pkt_id,time,fid,pkt_info,pkt,len,type,is_init,is_last,type,thread_id,src_ip,dest_ip,src_port #2
- 1 ,0.010000,1,0x9055598,1,77,0,1,0,0,0,10000001,30000001,1024
- 2 ,0.020000,1,0x9054760,2,93,0,0,1,0,0,10000001,30000001,1024
- 3 ,2.010000,2,0x9055598,1,77,0,1,0,0,0,10000002,30000002,1024
- 4 ,2.020000,2,0x9054760,2,93,0,0,1,0,0,10000002,30000002,1024
- 5 ,3.010000,3,0x9055598,1,77,0,1,0,0,0,10000003,30000003,1024
- 6 ,3.020000,3,0x9054760,2,93,0,0,1,0,0,10000003,30000003,1024
- 7 ,4.010000,4,0x9055598,1,77,0,1,0,0,0,10000004,30000004,1024
- 8 ,4.020000,4,0x9054760,2,93,0,0,1,0,0,10000004,30000004,1024
- 9 ,5.010000,5,0x9055598,1,77,0,1,0,0,0,10000005,30000005,1024
- 10 ,5.020000,5,0x9054760,2,93,0,0,1,0,0,10000005,30000005,1024
- 11 ,6.010000,6,0x9055598,1,77,0,1,0,0,0,10000006,30000006,1024
- 12 ,6.020000,6,0x9054760,2,93,0,0,1,0,0,10000006,30000006,1024
- 13 ,7.010000,7,0x9055598,1,77,0,1,0,0,0,10000007,30000007,1024
- 14 ,7.020000,7,0x9054760,2,93,0,0,1,0,0,10000007,30000007,1024
- 15 ,8.010000,8,0x9055598,1,77,0,1,0,0,0,10000008,30000008,1024
- 16 ,8.020000,8,0x9054760,2,93,0,0,1,0,0,10000008,30000008,1024
- 17 ,9.010000,9,0x9055598,1,77,0,1,0,0,0,10000009,30000009,1024
- 18 ,9.020000,9,0x9054760,2,93,0,0,1,0,0,10000009,30000009,1024
- 19 ,10.010000,a,0x9055598,1,77,0,1,0,0,0,1000000a,3000000a,1024
- 20 ,10.020000,a,0x9054760,2,93,0,0,1,0,0,1000000a,3000000a,1024
-
- file stats
- =================
- m_total_bytes : 1.66 Kbytes
- m_total_pkt : 20.00 pkt
- m_total_open_flows : 10.00 flows
- m_total_pkt : 20
- m_total_open_flows : 10
- m_total_close_flows : 10
- m_total_bytes : 1700
说明:
1、给定模板的全局统计信息。cps=每秒连接数。tps 是每秒模板。如果一个模板包含多个流的插件,它们可能会有所不同。例如 SFR 配置文件中的 RTP 流 (avl/delay_10_rtp_160k_full.pcap)。
2、输出。
TRex 每 1 秒生成一个新流。
客户端 IP 值取自客户端 IP 池。
服务器 IP 值取自服务器 IP 池。
IPG(包间间隙)值取自配置文件(10 毫秒)。
在基本用法中,TRex 不会等待接收到启动器数据包。响应数据包将仅基于超时触发(本例中为 IPG)。
在高级场景下(例如NAT),流的第一个包会被TRex处理,只有在收到包时才会发起响应包。
因此,有必要离线处理模板 pcap 文件,并确保客户端和服务器数据包之间有足够的往返延迟 (RTT)。
一种方法是将yaml ipg字段更改为足够高的值(大于 10msec )。
用于 pcap 修复的 ASTF 模拟器
如何使用 astf-sim 解决以下两个问题:
pcap 中的数据包太大
pcap中的时间差异太小
pcap 中的数据包太大
太大的数据包可能会导致 DUT 碎片(小于 9KB)甚至阻止 TRex 加载 pcap 文件(大于 9KB)
astf-sim 工具可以通过以下方式提供帮助:
TCP 流将被分段(离线)
UDP数据包将被修剪
可能碎片化的 pcap 示例(通过隧道等):

图 大型 TCP 数据包
将 MSS 降低到 1000:
- ./astf-sim -f cap2/http_get.pcap -o http_get_fixed.pcap --mss 1000
- WARNING: Enabling fix timing implicitly
- RTT is 21.49 msec
修复后:

图 已修复的大型 TCP 数据包
pcap中的时间差异太小
有时 pcap 在请求和响应之间的间隔太小。
例如,通过在端点设备或网络中以低延迟捕获。
这对 STF 行为不利,因为它根据 pcap 中写入的时间发送响应(不等待请求到达),因此响应可能更早到达 DUT。
注意:
目前,此修复仅适用于 TCP 流。
可以应用的两个改进:
将捕获点居中
更改捕获时间,就像在中间设备中完成捕获一样(假设 RTT 足够大)。
在客户端机器上完成的 pcap 捕获示例:

图 从客户端捕获
来自服务器的响应(数据包#2)与下一个客户端数据包(#3)的时间几乎相同。
- ./astf-sim -f cap2/http_get.pcap -o http_get_fixed.pcap --mss 1000
- WARNING: Enabling fix timing implicitly
- RTT is 21.49 msec

图 . 从客户端捕获已修复
时间是固定的,就像捕获是在客户端和服务器之间的中间完成的。
扩大整体 RTT。
有时网络太快,前面的部分不足以满足 STF 的需求。
在这种情况下,可以扩大 RTT(模拟较慢的网络)。
图 低延迟
上一节中的修复失败:
- > ./astf-sim -f cap2/190_packet.pcap -o 190_packet_fixed.pcap --fix-timing
- RTT is 0.245 msec
- Could not fix timing: RTT is less than 5msec, enlarge the RTT
放大 RTT 的工作原理:
- > ./astf-sim -f cap2/190_packet.pcap -o 190_packet_fixed.pcap --rtt 10
- WARNING: Enabling fix timing implicitly
- RTT is 10.005 msec
结果:

图 . 低延迟已修复
转换模拟器文本会生成类似于以下内容的表:

其中: fid:: Flow ID - 每个流的不同 ID。
low-pkt-id:流中的数据包 ID,编号从 1 开始。
client_ip:客户端 IP 地址。
lient_port:客户端 IP 端口。
server_ip:服务器的IP地址。
direction:方向。“→”是客户端到服务器;“←”是服务器到客户端。
下面放大 CPS 并缩短持续时间。
- [bash]>more cap2/dns_test.yaml
- - duration : 1.0 1
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1"
- clients_end : "16.0.0.255"
- servers_start : "48.0.0.1"
- servers_end : "48.0.0.255"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_info :
- - name: cap2/dns.pcap
- cps : 10.0 2
- ipg : 50000 3
- rtt : 50000
- w : 1
说明:
1、持续时间为 1 秒。
2、CPS 为 10.0。
3、IPG 为 50 毫秒。
运行它会产生以下输出:
[bash]>./bp-sim-64-debug -f cap2/dns_test.yaml -o my.erf -v 3
表. 格式化结果
使用以下将输出显示为图表,其中: x 轴:时间(秒) y 轴:流 ID 。输出表明 1 秒内有 10 个流,如预期的那样,IPG 为 50 毫秒

注意第二个流生成中的间隙。这是预期的计划伪影,没有效果。
DNS,从 pcap 文件中获取流 IPG
在以下示例中,IPG 取自 IPG 本身。
- - duration : 1.0
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1"
- clients_end : "16.0.0.255"
- servers_start : "48.0.0.1"
- servers_end : "48.0.0.255"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 0
- udp_aging : 0
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_ipg : true 1
- #cap_ipg_min : 30
- #cap_override_ipg : 200
- cap_info :
- - name: cap2/dns.pcap
- cps : 10.0
- ipg : 10000
- rtt : 10000
- w : 1
IPG 取自 pcap。
表. pcap 文件中的 dns ipg
在此示例中,IPG 取自 pcap 文件,该文件接近 20 毫秒而不是 50 毫秒(取自配置文件)。
- #cap_ipg_min : 30 1
- #cap_override_ipg : 200 2
说明:
1、设置应该被覆盖的最小 IPG(微秒): ( if (pkt_ipg<cap_ipg_min) { pkt_ipg = cap_override_ipg } ) 。
2、要覆盖的值(微秒)。

DNS,设置一台服务器ip
在此示例中,服务器 IP 取自模板。
- - duration : 10.0
- 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.0.255"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_ipg : true
- #cap_ipg_min : 30
- #cap_override_ipg : 200
- cap_info :
- - name: cap2/dns.pcap
- cps : 1.0
- ipg : 10000
- rtt : 10000
- server_addr : "48.0.0.7" 1
- one_app_server : true 2
- w : 1
说明:
1、此模板的所有流程都将使用同一台服务器。
2、必须设置为“真”。
表. pcap 文件中的 dns ipg

- - duration : 10.0
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1" 1
- clients_end : "16.0.0.1"
- servers_start : "48.0.0.1"
- servers_end : "48.0.0.3"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_ipg : true
- #cap_ipg_min : 30
- #cap_override_ipg : 200
- cap_info :
- - name: cap2/dns.pcap
- cps : 1.0
- ipg : 10000
- rtt : 10000
- w : 1
说明:
1、只有一个客户。
表 . pcap 文件中的 dns ipg

在这种情况下,只有一个客户端,因此只有端口用于区分您需要确保在高速运行 TRex 时有足够的空闲套接字的流。
- Active-flows : 0 Clients : 1 1 Socket-util : 0.0000 % 2
- Open-flows : 1 Servers : 254 Socket : 1 Socket/Clients : 0.0
- drop-rate : 0.00 bps
说明:
1、客户数量
2、套接字利用率(应低于 20%,如果出现问题,请扩大客户端数量)。
w是 IP 客户端/服务器生成器的可调参数。w=1 是默认行为。设置w=2配置来自同一客户端的两个分配的突发,请参阅以下示例。
- - duration : 10.0
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1"
- clients_end : "16.0.0.10"
- servers_start : "48.0.0.1"
- servers_end : "48.0.0.3"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_ipg : true
- #cap_ipg_min : 30
- #cap_override_ipg : 200
- cap_info :
- - name: cap2/dns.pcap
- cps : 1.0
- ipg : 10000
- rtt : 10000
- w : 2
表 . pcap 文件中的 DNS ipg

混合 HTTP 和 DNS 模板
以下示例结合了 HTTP 和 DNS 模板的元素:
- - duration : 1.0
- generator :
- distribution : "seq"
- clients_start : "16.0.0.1"
- clients_end : "16.0.0.10"
- servers_start : "48.0.0.1"
- servers_end : "48.0.0.3"
- clients_per_gb : 201
- min_clients : 101
- dual_port_mask : "1.0.0.0"
- tcp_aging : 1
- udp_aging : 1
- mac : [0x00,0x00,0x00,0x01,0x00,0x00]
- cap_ipg : true
- cap_info :
- - name: cap2/dns.pcap
- cps : 10.0 1
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_http_browsing_0.pcap
- cps : 2.0 1
- ipg : 10000
- rtt : 10000
- w : 1
说明:
1、两个模板的 CPS 相同。
这将创建以下输出:
表. pcap 文件中的 DNS ipg
模板_id
0:DNS 模板 1:HTTP 模板
如预期的那样,上面的输出说明了 1 秒内的两个 HTTP 流和十个 DNS 流。
SFR 流量包括流量模板的组合。以下示例中的这种流量组合由 SFR France 定义。此 SFR 流量配置文件用作我们的 ASR1k/ISR-G2 基准测试的流量配置文件。也可以使用 EMIX 代替 IMIX 流量。
流量是从带有 Pagent 的 Spirent C100 记录的,从客户端和服务器端引入了 10 毫秒的延迟。
- - 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.20.255"
- 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_info :
- - name: avl/delay_10_http_get_0.pcap
- cps : 404.52
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_http_post_0.pcap
- cps : 404.52
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_https_0.pcap
- cps : 130.8745
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_http_browsing_0.pcap
- cps : 709.89
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_exchange_0.pcap
- cps : 253.81
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_mail_pop_0.pcap
- cps : 4.759
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_mail_pop_1.pcap
- cps : 4.759
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_mail_pop_2.pcap
- cps : 4.759
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_oracle_0.pcap
- cps : 79.3178
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_rtp_160k_full.pcap
- cps : 2.776
- ipg : 10000
- rtt : 10000
- w : 1
- one_app_server : false
- plugin_id : 1 2
- - name: avl/delay_10_rtp_250k_full.pcap
- cps : 1.982
- ipg : 10000
- rtt : 10000
- w : 1
- one_app_server : false
- plugin_id : 1
- - name: avl/delay_10_smtp_0.pcap
- cps : 7.3369
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_smtp_1.pcap
- cps : 7.3369
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_smtp_2.pcap
- cps : 7.3369
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_video_call_0.pcap
- cps : 11.8976
- ipg : 10000
- rtt : 10000
- w : 1
- one_app_server : false
- - name: avl/delay_10_sip_video_call_full.pcap
- cps : 29.347
- ipg : 10000
- rtt : 10000
- w : 1
- plugin_id : 2 1
- one_app_server : false
- - name: avl/delay_10_citrix_0.pcap
- cps : 43.6248
- ipg : 10000
- rtt : 10000
- w : 1
- - name: avl/delay_10_dns_0.pcap
- cps : 1975.015
- ipg : 10000
- rtt : 10000
- w : 1
说明:
1、SIP协议插件,用于根据数据流替换控制流中的IP/端口。
2、RTSP 协议插件,用于根据数据流替换控制流中的 IP/端口。
