• TRex学习之旅六


    1 基本用法-DNS基本示例

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

     以下是一个示例 YAML 格式的流量配置文件 (cap2/dns_test.yaml),带有解释性说明。

    1. [bash]>cat cap2/dns_test.yaml
    2. - duration : 10.0
    3. generator :
    4. distribution : "seq"
    5. clients_start : "16.0.0.1" 1
    6. clients_end : "16.0.0.255"
    7. servers_start : "48.0.0.1" 2
    8. servers_end : "48.0.0.255"
    9. clients_per_gb : 201
    10. min_clients : 101
    11. dual_port_mask : "1.0.0.0"
    12. tcp_aging : 1
    13. udp_aging : 1
    14. cap_info :
    15. - name: cap2/dns.pcap 3
    16. cps : 1.0 4
    17. ipg : 10000 5
    18. rtt : 10000 6
    19. w : 1

    说明:

    1、客户端范围(IPv4 格式)。

    2、服务器范围(IPv4 格式)。

    3、pcap 文件,其中包含将用作模板的 DNS cap 文件。

    4、每秒生成的连接数。在示例中,1.0 表示每秒 1 个连接。

    5、包间间隙(微秒)。10,000 = 10 毫秒。

    6、应该和ipg一样。

    DNS 模板文件

     DNS 模板文件包括:

    1. 一流 _

    2. 两包

    3. 第一个数据包:来自发起者(客户端→服务器)

    4. 第二个数据包:响应(服务器→客户端)

    TRex 替换了 client_ip、client_port 和 server_ip。server_port 将保持不变。

    1. [bash]>./bp-sim-64-debug -f cap2/dns.yaml -o my.erf -v 3
    2. -- loading cap file cap2/dns.pcap
    3. id,name , tps, cps,f-pkts,f-bytes, duration, Mb/sec, MB/sec, #1
    4. 00, cap2/dns.pcap ,1.00,1.00, 2 , 170 , 0.02 , 0.00 , 0.00 ,
    5. 00, sum ,1.00,1.00, 2 , 170 , 0.00 , 0.00 , 0.00 ,
    6. Generating erf file ...
    7. pkt_id,time,fid,pkt_info,pkt,len,type,is_init,is_last,type,thread_id,src_ip,dest_ip,src_port #2
    8. 1 ,0.010000,1,0x9055598,1,77,0,1,0,0,0,10000001,30000001,1024
    9. 2 ,0.020000,1,0x9054760,2,93,0,0,1,0,0,10000001,30000001,1024
    10. 3 ,2.010000,2,0x9055598,1,77,0,1,0,0,0,10000002,30000002,1024
    11. 4 ,2.020000,2,0x9054760,2,93,0,0,1,0,0,10000002,30000002,1024
    12. 5 ,3.010000,3,0x9055598,1,77,0,1,0,0,0,10000003,30000003,1024
    13. 6 ,3.020000,3,0x9054760,2,93,0,0,1,0,0,10000003,30000003,1024
    14. 7 ,4.010000,4,0x9055598,1,77,0,1,0,0,0,10000004,30000004,1024
    15. 8 ,4.020000,4,0x9054760,2,93,0,0,1,0,0,10000004,30000004,1024
    16. 9 ,5.010000,5,0x9055598,1,77,0,1,0,0,0,10000005,30000005,1024
    17. 10 ,5.020000,5,0x9054760,2,93,0,0,1,0,0,10000005,30000005,1024
    18. 11 ,6.010000,6,0x9055598,1,77,0,1,0,0,0,10000006,30000006,1024
    19. 12 ,6.020000,6,0x9054760,2,93,0,0,1,0,0,10000006,30000006,1024
    20. 13 ,7.010000,7,0x9055598,1,77,0,1,0,0,0,10000007,30000007,1024
    21. 14 ,7.020000,7,0x9054760,2,93,0,0,1,0,0,10000007,30000007,1024
    22. 15 ,8.010000,8,0x9055598,1,77,0,1,0,0,0,10000008,30000008,1024
    23. 16 ,8.020000,8,0x9054760,2,93,0,0,1,0,0,10000008,30000008,1024
    24. 17 ,9.010000,9,0x9055598,1,77,0,1,0,0,0,10000009,30000009,1024
    25. 18 ,9.020000,9,0x9054760,2,93,0,0,1,0,0,10000009,30000009,1024
    26. 19 ,10.010000,a,0x9055598,1,77,0,1,0,0,0,1000000a,3000000a,1024
    27. 20 ,10.020000,a,0x9054760,2,93,0,0,1,0,0,1000000a,3000000a,1024
    28. file stats
    29. =================
    30. m_total_bytes : 1.66 Kbytes
    31. m_total_pkt : 20.00 pkt
    32. m_total_open_flows : 10.00 flows
    33. m_total_pkt : 20
    34. m_total_open_flows : 10
    35. m_total_close_flows : 10
    36. 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:

    1. ./astf-sim -f cap2/http_get.pcap -o http_get_fixed.pcap --mss 1000
    2. WARNING: Enabling fix timing implicitly
    3. RTT is 21.49 msec

    修复后:

                                                         图  已修复的大型 TCP 数据包 

    pcap中的时间差异太小

    有时 pcap 在请求和响应之间的间隔太小。
    例如,通过在端点设备或网络中以低延迟捕获。
    这对 STF 行为不利,因为它根据 pcap 中写入的时间发送响应(不等待请求到达),因此响应可能更早到达 DUT。

    注意:

    目前,此修复仅适用于 TCP 流。

    可以应用的两个改进:

    将捕获点居中

    更改捕获时间,就像在中间设备中完成捕获一样(假设 RTT 足够大)。

    在客户端机器上完成的 pcap 捕获示例:

                                                              图 从客户端捕获

    来自服务器的响应(数据包#2)与下一个客户端数据包(#3)的时间几乎相同。

    RTT/4 换档时间:
    1. ./astf-sim -f cap2/http_get.pcap -o http_get_fixed.pcap --mss 1000
    2. WARNING: Enabling fix timing implicitly
    3. RTT is 21.49 msec

                                                          图 . 从客户端捕获已修复

    时间是固定的,就像捕获是在客户端和服务器之间的中间完成的。

    扩大整体 RTT。

    有时网络太快,前面的部分不足以满足 STF 的需求。
    在这种情况下,可以扩大 RTT(模拟较慢的网络)。

                                                                      图  低延迟

    上一节中的修复失败:

    1. > ./astf-sim -f cap2/190_packet.pcap -o 190_packet_fixed.pcap --fix-timing
    2. RTT is 0.245 msec
    3. Could not fix timing: RTT is less than 5msec, enlarge the RTT

    放大 RTT 的工作原理:

    1. > ./astf-sim -f cap2/190_packet.pcap -o 190_packet_fixed.pcap --rtt 10
    2. WARNING: Enabling fix timing implicitly
    3. 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 并缩短持续时间。

    1. [bash]>more cap2/dns_test.yaml
    2. - duration : 1.0 1
    3. generator :
    4. distribution : "seq"
    5. clients_start : "16.0.0.1"
    6. clients_end : "16.0.0.255"
    7. servers_start : "48.0.0.1"
    8. servers_end : "48.0.0.255"
    9. clients_per_gb : 201
    10. min_clients : 101
    11. dual_port_mask : "1.0.0.0"
    12. tcp_aging : 1
    13. udp_aging : 1
    14. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    15. cap_info :
    16. - name: cap2/dns.pcap
    17. cps : 10.0 2
    18. ipg : 50000 3
    19. rtt : 50000
    20. 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 本身。

    1. - duration : 1.0
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.0.255"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.0.255"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 0
    12. udp_aging : 0
    13. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    14. cap_ipg : true 1
    15. #cap_ipg_min : 30
    16. #cap_override_ipg : 200
    17. cap_info :
    18. - name: cap2/dns.pcap
    19. cps : 10.0
    20. ipg : 10000
    21. rtt : 10000
    22. w : 1

    IPG 取自 pcap。

                                                    表. pcap 文件中的 dns ipg

    在此示例中,IPG 取自 pcap 文件,该文件接近 20 毫秒而不是 50 毫秒(取自配置文件)。

    1. #cap_ipg_min : 30 1
    2. #cap_override_ipg : 200 2

    说明:

    1、设置应该被覆盖的最小 IPG(微秒): ( if (pkt_ipg<cap_ipg_min) { pkt_ipg = cap_override_ipg } ) 。

    2、要覆盖的值(微秒)。

    DNS,设置一台服务器ip

    在此示例中,服务器 IP 取自模板。

    1. - duration : 10.0
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.1.255"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.0.255"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 1
    12. udp_aging : 1
    13. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    14. cap_ipg : true
    15. #cap_ipg_min : 30
    16. #cap_override_ipg : 200
    17. cap_info :
    18. - name: cap2/dns.pcap
    19. cps : 1.0
    20. ipg : 10000
    21. rtt : 10000
    22. server_addr : "48.0.0.7" 1
    23. one_app_server : true 2
    24. w : 1

    说明:

    1、此模板的所有流程都将使用同一台服务器。

    2、必须设置为“真”。

                                                         表. pcap 文件中的 dns ipg

    DNS,减少客户端数量

    1. - duration : 10.0
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1" 1
    5. clients_end : "16.0.0.1"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.0.3"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 1
    12. udp_aging : 1
    13. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    14. cap_ipg : true
    15. #cap_ipg_min : 30
    16. #cap_override_ipg : 200
    17. cap_info :
    18. - name: cap2/dns.pcap
    19. cps : 1.0
    20. ipg : 10000
    21. rtt : 10000
    22. w : 1

    说明:

    1、只有一个客户。

                                                     表 . pcap 文件中的 dns ipg

    在这种情况下,只有一个客户端,因此只有端口用于区分您需要确保在高速运行 TRex 时有足够的空闲套接字的流。

    1. Active-flows : 0 Clients : 1 1 Socket-util : 0.0000 % 2
    2. Open-flows : 1 Servers : 254 Socket : 1 Socket/Clients : 0.0
    3. drop-rate : 0.00 bps

    说明:

    1、客户数量

    2、套接字利用率(应低于 20%,如果出现问题,请扩大客户端数量)。

    DNS, W=1

    w是 IP 客户端/服务器生成器的可调参数。w=1 是默认行为。设置w=2配置来自同一客户端的两个分配的突发,请参阅以下示例。

    1. - duration : 10.0
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.0.10"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.0.3"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 1
    12. udp_aging : 1
    13. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    14. cap_ipg : true
    15. #cap_ipg_min : 30
    16. #cap_override_ipg : 200
    17. cap_info :
    18. - name: cap2/dns.pcap
    19. cps : 1.0
    20. ipg : 10000
    21. rtt : 10000
    22. w : 2

                                                  表 . pcap 文件中的 DNS ipg

    混合 HTTP 和 DNS 模板

    以下示例结合了 HTTP 和 DNS 模板的元素:

    1. - duration : 1.0
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.0.10"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.0.3"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 1
    12. udp_aging : 1
    13. mac : [0x00,0x00,0x00,0x01,0x00,0x00]
    14. cap_ipg : true
    15. cap_info :
    16. - name: cap2/dns.pcap
    17. cps : 10.0 1
    18. ipg : 10000
    19. rtt : 10000
    20. w : 1
    21. - name: avl/delay_10_http_browsing_0.pcap
    22. cps : 2.0 1
    23. ipg : 10000
    24. rtt : 10000
    25. w : 1

    说明:

    1、两个模板的 CPS 相同。

    这将创建以下输出:

                                                        表. pcap 文件中的 DNS ipg

    模板_id

    0:DNS 模板 1:HTTP 模板

    如预期的那样,上面的输出说明了 1 秒内的两个 HTTP 流和十个 DNS 流。

    SFR 流量 YAML

    SFR 流量包括流量模板的组合。以下示例中的这种流量组合由 SFR France 定义。此 SFR 流量配置文件用作我们的 ASR1k/ISR-G2 基准测试的流量配置文件。也可以使用 EMIX 代替 IMIX 流量。

    流量是从带有 Pagent 的 Spirent C100 记录的,从客户端和服务器端引入了 10 毫秒的延迟。

    1. - duration : 0.1
    2. generator :
    3. distribution : "seq"
    4. clients_start : "16.0.0.1"
    5. clients_end : "16.0.1.255"
    6. servers_start : "48.0.0.1"
    7. servers_end : "48.0.20.255"
    8. clients_per_gb : 201
    9. min_clients : 101
    10. dual_port_mask : "1.0.0.0"
    11. tcp_aging : 0
    12. udp_aging : 0
    13. mac : [0x0,0x0,0x0,0x1,0x0,0x00]
    14. cap_ipg : true
    15. cap_info :
    16. - name: avl/delay_10_http_get_0.pcap
    17. cps : 404.52
    18. ipg : 10000
    19. rtt : 10000
    20. w : 1
    21. - name: avl/delay_10_http_post_0.pcap
    22. cps : 404.52
    23. ipg : 10000
    24. rtt : 10000
    25. w : 1
    26. - name: avl/delay_10_https_0.pcap
    27. cps : 130.8745
    28. ipg : 10000
    29. rtt : 10000
    30. w : 1
    31. - name: avl/delay_10_http_browsing_0.pcap
    32. cps : 709.89
    33. ipg : 10000
    34. rtt : 10000
    35. w : 1
    36. - name: avl/delay_10_exchange_0.pcap
    37. cps : 253.81
    38. ipg : 10000
    39. rtt : 10000
    40. w : 1
    41. - name: avl/delay_10_mail_pop_0.pcap
    42. cps : 4.759
    43. ipg : 10000
    44. rtt : 10000
    45. w : 1
    46. - name: avl/delay_10_mail_pop_1.pcap
    47. cps : 4.759
    48. ipg : 10000
    49. rtt : 10000
    50. w : 1
    51. - name: avl/delay_10_mail_pop_2.pcap
    52. cps : 4.759
    53. ipg : 10000
    54. rtt : 10000
    55. w : 1
    56. - name: avl/delay_10_oracle_0.pcap
    57. cps : 79.3178
    58. ipg : 10000
    59. rtt : 10000
    60. w : 1
    61. - name: avl/delay_10_rtp_160k_full.pcap
    62. cps : 2.776
    63. ipg : 10000
    64. rtt : 10000
    65. w : 1
    66. one_app_server : false
    67. plugin_id : 1 2
    68. - name: avl/delay_10_rtp_250k_full.pcap
    69. cps : 1.982
    70. ipg : 10000
    71. rtt : 10000
    72. w : 1
    73. one_app_server : false
    74. plugin_id : 1
    75. - name: avl/delay_10_smtp_0.pcap
    76. cps : 7.3369
    77. ipg : 10000
    78. rtt : 10000
    79. w : 1
    80. - name: avl/delay_10_smtp_1.pcap
    81. cps : 7.3369
    82. ipg : 10000
    83. rtt : 10000
    84. w : 1
    85. - name: avl/delay_10_smtp_2.pcap
    86. cps : 7.3369
    87. ipg : 10000
    88. rtt : 10000
    89. w : 1
    90. - name: avl/delay_10_video_call_0.pcap
    91. cps : 11.8976
    92. ipg : 10000
    93. rtt : 10000
    94. w : 1
    95. one_app_server : false
    96. - name: avl/delay_10_sip_video_call_full.pcap
    97. cps : 29.347
    98. ipg : 10000
    99. rtt : 10000
    100. w : 1
    101. plugin_id : 2 1
    102. one_app_server : false
    103. - name: avl/delay_10_citrix_0.pcap
    104. cps : 43.6248
    105. ipg : 10000
    106. rtt : 10000
    107. w : 1
    108. - name: avl/delay_10_dns_0.pcap
    109. cps : 1975.015
    110. ipg : 10000
    111. rtt : 10000
    112. w : 1

    说明:

    1、SIP协议插件,用于根据数据流替换控制流中的IP/端口。

    2、RTSP 协议插件,用于根据数据流替换控制流中的 IP/端口。

  • 相关阅读:
    antdesign中, 单个页面同时存在多个上传按钮
    C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意
    振芯GM7123C:功能RGB转VGA芯片方案简介
    MySQL数据库——实体完整性
    【愚公系列】2022年10月 微信小程序-优购电商项目-⾃定义组件传参
    Python房价分析和可视化<房天下二手房>
    【微机原理笔记】第 6 章 - 输入输出和中断技术
    从“白人饭”到美味佳肴,拓世AI为你打造独一无二的饮食计划
    【Halcon算子】get_contour_attrib_xld和get_contour_global_attrib_xld
    【C++进阶之路】第十一篇:C++的IO流
  • 原文地址:https://blog.csdn.net/qq_35029061/article/details/125423432