概述

流量发生器是一个评估DUT(被测设备)或SUT(被测系统)性能的工具。

该工具可以生成通过特定端口发送的RAW数据包。它还可以收集延迟和抖动值,TX/RX速率,计算丢失的数据包,并检测失序(OOO)数据包。

流量生成器的使用类似于 带宽测试 工具,也可以生成数据包,这些数据包将被路由回数据包生成器,用于高级状态收集。

在产生数据包的设备中,不能用嗅探工具、Torch或防火墙在出站接口上捕获流量生成器产生的数据包。

常规

/tool traffic-generator

这个菜单允许设置常规的流量发生器属性,包含快速启动和停止工具的命令。

属性

属性 说明
latency-distribution-max (time; Default: 100us) 延迟分布测量最大延迟范围。基于这个值,RouterOS将决定使用什么延迟范围作为延迟分布测量的间隔属性
measure-out-of-order (yes | no; Default: ) 是否测量Out-of-Order数据包。默认值基于CPU类型(多核CPU默认为 no;单核CPU默认为 yes)。在多核设备上启用属性时,单个数据流只利用单个CPU内核
stats-samples-to-keep (integer; Default: 100) 要收集多少数据实例
test-id (integer [0..255]; Default: 0)

只读属性

属性 说明
latency-distribution-samples (integer) 显示延迟分布-测量-时间间隔被分为多少个独立的时间段。
latency-distribution-measure-interval (time) 显示总的延迟测量范围
running (yes | no) 显示流量生成器工具是否启动。

命令

属性 说明
quick () 该命令允许快速启动包生成器,并将统计信息打印到终端。命令还接受几个参数以覆盖数据包模板和流设置。接受的参数有: 时间、显示的条目、冻结时间间隔、ID、接口、Mbps、无序测量、数据包数量、数据包大小、端口、pps、流、测试ID、Tx-模板
- tx-template - 产生流量的数据包模板(最多16个模板)
- duration - 测试多长时间
- entries-to-show - 打印多少行状态到终端
- freeze-frame-interval - 多长时间向终端更新一次状态
其余的参数不是针对命令的,在其他地方有描述。
运行快速命令时指定的参数将覆盖配置的值。如果一个参数只为一个标头指定,那么这个值将乘以所有其他标头的值(如果要求)。
start () 在后台启动流量生成器。接受参数test-id
stop() 停止由start命令启动的流量生成器。
inject () 将原始数据注入到接口中。
inject-cap () 直接从pcap文件中注入原始数据。

数据包模板

/tool traffic-generator packet-template

这个子菜单允许根据参数建立数据包。基于参数,可以建立带有VLAN标签的IP数据包,并设置UDP端口。根据提供的参数生成一个原始数据包模板。

如果需要更多的低级数据包或充分利用流量生成器,请使用原始数据包-模板生成器来构建数据包。

如果同一类型的头在数据包中出现不止一次,那么头字段值将以逗号分隔的列表形式传递。(例如,如果有两个IP头,那么源地址将以 "IP-src=1.1.1.1,2.2.2.2 "的形式给出)。

为了更快地构建头,许多头字段的值是假定的。例如,如果头的堆栈是 "mac, IP",那么流量生成器可以假定mac-协议值是 "IP"。或者,如果指定了 "端口"或 "接口",流量生成器可以假定 "mac-src "是接口的MAC地址)。假设值有明显的名称,以 "assumed-"开头,并且是只读的。手动指定的值覆盖假定值。

假定值不会自动更新。新值在模板编辑后被假定。"packet-template set 0 "足以触发新的假定值。

属性

属性 说明
comment (string; Default: ) 简要说明你正在建立的数据包。
compute-checksum-from-offset (no-checksum | integer[0..4294967295]; Default: ) 指定在数据包中计算2字节校验和的字节偏移(例如:设置为14,在计算校验和时跳过数据包的以太网头)。
data (incrementing | random | specific-byte | uninitialized; Default: uninitialized) 指定数据包有效载荷填充方式。
- uninitialized - 数据包的数据(在头之后)未初始化,但不是零。最快。
- specific-byte - 与设置数据字节一起工作。
- incrementing - 数据包中充满 "00 01 02 03",以此类推。
- random - 用随机字节填充数据包。最慢。
data-byte (hex [0..FF]]; Default: 0) 用来填充数据包有效载荷的一个字节。
interface (string; Default: ) 数据包模板的可选参数。这与 "端口 "设置是互斥的。指定 "接口 "允许用户不在端口菜单中为接口创建一个端口条目。事实上,一个端口条目是动态创建的。这对于运行快速测试很有用。
ip-dscp (list of integer[0..255] (max 16 times); Default: ) 将在IP头中设置的单个或列表的DS字段(DS字段包含DSCP值和ECN值)。
ip-dst (list of IP/Netmask (max 16 times); Default: ) 生成IP头时将使用的目标IP地址列表。
ip-frag-off (list of integer[0..65535] (max 16 times); Default: ) IP头中的碎片偏移量列表。
ip-gateway (IP; Default: ) 在发送方和接收方是同一设备的情况下,不能从 ip-dst 自动确定下一跳。如果指定了ip-gateway,数据包模板将根据解析的ip-gateway来假设目标mac地址。
ip-id (list of integer [0..65535]; Default: )
ip-protocol (list of IP protocols (max 16 times); Default: )
ip-src (list of IP/Mask (max 16 times); Default: )
ip-ttl (list of integer [0..255] (max 16 times); Default: )
mac-dst (list of MAC/MASK (max 16 times); Default: )
mac-protocol (list of mac protocols (max 16 times); Default: )
mac-src (list of MAC/MASK (max 16 times); Default: )
name (string; Default: ) 模板的描述名称。
port (string; Default: ) 数据包模板的可选参数。使用该模板产生的数据包要通过一个端口发出。端口也可以在其他地方指定,如在流设置中。这与接口设置是互斥的。
raw-header (string (max 16 times); Default: ) 原始数据包头为十六进制格式的字符串。
udp-dst-port (list of port [0..65535]/mask [0..FFFF] (max 16 times); Default: )
udp-src-port (list of port [0..65535]/mask [0..FFFF] (max 16 times); Default: )
vlan-id (; Default: )
vlan-priority (; Default: )
vlan-protocol (; Default: )
header-stack (list of ip | mac | raw | udp | vlan (max 16 times); Default: ip) 生成的数据包应该有的头信息。
目前支持:
- mac - 以太网头(14字节)
- vlan - 以太网VLAN标签(4字节)
- ip - IPv4头(20字节)
- udp - UDP头(8字节)
- raw - 以十六进制字符串指定的任意字节
大多数头类型可以多次出现在头中。每个数据包只能有2个IP头和1个UDP头。根据我们对网络协议的实际经验,对头的可能顺序进行了一些限制(例如,VLAN头只能跟随mac头或其他VLAN头)。
流量生成器建议数据包模板的第一个头(在端口菜单中)。但并没有强制执行。

端口配置

/tool traffic-generator port

该菜单允许配置和特定接口相关的端口,并用于收发生成的数据包。

属性

属性 说明
disabled (yes | no; Default: no) 端口是否被禁用,不参与收发数据包。
name (string; Default: ) 端口的描述名称
interface (string; Default: ) 与该端口相关的接口名称。

只读属性

属性 说明
dynamic (yes| no) 是否自动生成端口配置。
first-header (ip | mac | raw | udp | vlan) 显示建议从指定接口发出的数据包的第一个头。这个信息可以在创建数据包模板时使用。
inactive (yes | no) 该端口是否不活动,不能参与数据包的收发。

统计

/tool traffic-generator stats

如果流量发生器不在**快速**模式下运行,那么测试的所有统计数据都会存储在这个菜单中。

延迟分布

/tool traffic-generator stats latency-distribution.

这个子菜单显示在特定的延迟范围内收到多少数据包。延迟范围可以按流或按序列查看(例如,print stream-num=3print seq=10)。

下面是延时图表的输出例子:

[admin@test-host] /tool traffic-generator stats latency-distribution> print
 # LATENCY                 COUNT        SHARE GRAPH
 0 0-15.5us                    0           0%
 1 15.5us-31us                 0           0%
 2 31us-46.5us                 0           0%
 3 46.5us-62.1us               0           0%
 4 62.1us-77.6us               0           0%
 5 77.6us-93.1us               0           0%
 6 93.1us-109us                0           0%
 7 109us-124us                 0           0%
 8 124us-140us                 0           0%
 9 140us-155us                 0           0%
10 155us-171us                 0           0%
11 171us-186us                 4           0% *
12 186us-202us                29           0% *
13 202us-217us                90       0.001% *
14 217us-233us               302       0.004% *
15 233us-248us               630       0.009% *
16 248us-264us               789       0.011% *
17 264us-279us             1 384       0.021% -*
18 279us-295us             1 990        0.03% --*
19 295us-310us             2 966       0.045% ---*
20 310us-326us             4 089       0.062% -----*
21 326us-341us             4 958       0.075% ------*
22 341us-357us             6 059       0.091% -------*
23 357us-372us             6 660       0.101% --------*
24 372us-388us             8 320       0.126% ----------*
25 388us-403us             9 988       0.151% -------------*
26 403us-419us            11 781       0.178% ---------------*
27 419us-434us            12 512       0.189% ----------------*
28 434us-450us            13 836        0.21% -----------------*
29 450us-465us            15 681       0.238% --------------------*
30 465us-481us            17 740       0.269% ----------------------*
31 481us-496us            19 913       0.302% --------------------------*
32 496us-512us            21 106        0.32% ---------------------------*
33 512us-528us            22 848       0.346% -----------------------------*
34 528us-543us            25 059        0.38% --------------------------------*
35 543us-559us            26 593       0.403% ----------------------------------*
36 559us-574us            27 663       0.419% -----------------------------------*
37 574us-590us            29 351       0.445% -------------------------------------*
38 590us-605us            31 265       0.474% ----------------------------------------*
39 605us-621us            33 224       0.504% -------------------------------------------*
40 621us-636us            34 464       0.523% --------------------------------------------*
41 636us-652us            35 630        0.54% ----------------------------------------------*
42 652us-667us            37 245       0.565% ------------------------------------------------*
43 667us-683us            38 158       0.579% -------------------------------------------------*
44 683us-698us            38 626       0.586% --------------------------------------------------*
45 698us-714us            38 985       0.591% --------------------------------------------------*
46 714us-729us            39 061       0.592% --------------------------------------------------*
47 729us-745us            39 750       0.603% ---------------------------------------------------*
48 745us-760us            39 145       0.594% --------------------------------------------------*
49 760us-776us            39 162       0.594% --------------------------------------------------*
50 776us-791us            38 197       0.579% -------------------------------------------------*
51 791us-807us            37 811       0.573% -------------------------------------------------*
52 807us-822us            37 364       0.567% ------------------------------------------------*
53 822us-838us            36 770       0.558% -----------------------------------------------*
54 838us-853us            35 831       0.543% ----------------------------------------------*
55 853us-869us            35 380       0.536% ----------------------------------------------*
56 869us-884us            34 472       0.523% --------------------------------------------*
57 884us-900us            33 672       0.511% -------------------------------------------*
58 900us-915us            33 799       0.513% --------------------------------------------*
59 915us-931us            32 754       0.497% ------------------------------------------*
60 931us-946us            32 339        0.49% ------------------------------------------*
61 946us-962us            32 419       0.492% ------------------------------------------*
62 962us-977us            32 107       0.487% -----------------------------------------*
63 977us-993us            31 552       0.478% -----------------------------------------*
64 0-993us             1 221 523       18.54%

属性

属性 说明
count (integer) 当前延时范围内的数据包数量
graph (string) 共享的图形表示
latency (string) 延迟范围
share (percent) 落在该延时范围内的数据包的百分比。

流统计

/tool traffic-generator stats stream

这个子菜单存储了按数据流排序的统计数据。输出与 快速 模式相同。

[admin@test-host] /tool traffic-generator stats stream> print
 # SEQ    NUM     TX-PACKET   TX-RATE     RX-PACKET   RX-RATE   LOST-PACKET LOST-RATE
 0 1      3          43 064 499.5Mbps        25 180 292.0Mbps        17 884 207.4Mbps
 1 1      4          43 062 499.5Mbps        39 946 463.3Mbps         3 116  36.1Mbps
 2 1      TOT        86 126 999.0Mbps        65 126 755.4Mbps        21 000 243.6Mbps
 3 2      3          43 544 505.1Mbps        30 449 353.2Mbps        13 095 151.9Mbps
 4 2      4          43 543 505.0Mbps        42 982 498.5Mbps           561   6.5Mbps
 5 2      TOT        87 087 1010.2...        73 431 851.7Mbps        13 656 158.4Mbps

...

59 20     TOT        87 277 1012.4...        73 755 855.5Mbps        13 522 156.8Mbps
60 21     3          43 546 505.1Mbps        30 605 355.0Mbps        12 941 150.1Mbps
61 21     4          43 546 505.1Mbps        42 682 495.1Mbps           864  10.0Mbps
62 21     TOT        87 092 1010.2...        73 287 850.1Mbps        13 805 160.1Mbps
63 TOT    3         913 942 504.8Mbps       629 210 347.5Mbps       284 732 157.2Mbps
64 TOT    4         913 939 504.8Mbps       898 374 496.2Mbps        15 565   8.5Mbps
65 TOT    TOT     1 827 881 1009.6...     1 527 584 843.8Mbps       300 297 165.8Mbps

端口统计

/tool traffic-generator stats port

这个子菜单存储了按Rx/Tx端口分类的统计数据。

[admin@test-host] /tool traffic-generator stats port> print
 # SEQ    PORT        RX-UNK-PACKET    RX-UNK-BYTE RX-UNK...     TX-PACKET   TX-RATE     RX-PACKET
 0 1      port0:et...             0              0      0bps        43 064 499.5Mbps        39 946
 1 1      port1:et...             0              0      0bps        43 062 499.5Mbps        25 180
 2 1      TOT                     0              0      0bps        86 126 999.0Mbps        65 126
 3 2      port0:et...             0              0      0bps        43 544 505.1Mbps        42 982
 4 2      port1:et...             0              0      0bps        43 543 505.0Mbps        30 449
 5 2      TOT                     0              0      0bps        87 087 1010.2...        73 431
 6 3      port0:et...             0              0      0bps        43 540 505.0Mbps        42 615
 7 3      port1:et...             0              0      0bps        43 540 505.0Mbps        30 191
 8 3      TOT                     0              0      0bps        87 080 1010.1...        72 806

Raw统计

/tool traffic-generator stats raw

这个子菜单存储了原始的统计数据。

[admin@test-host] /tool traffic-generator stats raw> print
 # SEQ    PORT       NUM     TX-PACKET   TX-RATE     RX-PACKET   RX-RATE   LOST-PACKET LOST-RATE
 0 1      port0:e... 3          43 064 499.5Mbps             0      0bps        43 064 499.5Mbps
 1 1      port1:e... 3               0      0bps        25 180 292.0Mbps       -25 180 292.0Mbps
 2 1      TOT        3          43 064 499.5Mbps        25 180 292.0Mbps        17 884 207.4Mbps
 3 1      port0:e... 4               0      0bps        39 946 463.3Mbps       -39 946 463.3Mbps
 4 1      port1:e... 4          43 062 499.5Mbps             0      0bps        43 062 499.5Mbps
 5 1      TOT        4          43 062 499.5Mbps        39 946 463.3Mbps         3 116  36.1Mbps
 6 1      port0:e... TOT        43 064 499.5Mbps        39 946 463.3Mbps         3 118  36.1Mbps
 7 1      port1:e... TOT        43 062 499.5Mbps        25 180 292.0Mbps        17 882 207.4Mbps
 8 2      port0:e... 3          43 544 505.1Mbps             0      0bps        43 544 505.1Mbps
 9 2      port1:e... 3               0      0bps        30 449 353.2Mbps       -30 449 353.2Mbps
10 2      TOT        3          43 544 505.1Mbps        30 449 353.2Mbps        13 095 151.9Mbps

属性

属性 说明
disabled (yes | no; Default: no) 流是否被禁用
mbps (integer [0..4294967295]; Default: 0) 流尝试生成的兆比特每秒值。
name (string; Default: ) 流的描述名称。
num (integer [0..15]; Default: 0)
packet-size (integer[1..65535] [-integer[1..65535]]; Default: 0) 生成的数据包的大小,单位为字节。可以设置为随机包大小范围。
port (string; Default: ) 端口菜单中的端口名称,用于传输数据包。
pps (integer [0..4294967295]; Default: 0) 数据流尝试每秒产生的数据包。
tx-template (string; Default: ) packet-template或raw-packet-template菜单中作为数据包内容来源的数据包模板名称。

配置例子

IPsec隧道性能测试

考虑以下测试设置

被测系统(SUT)包括两个连接到流生成服务器的路由器。两个SUT路由器之间的连接是IPSec加密的。

流量生成器运行两个数据流。

  • 从1.1.1.0/24网络到2.2.2.0/24网络

  • 从2.2.2.0/24网络到1.1.1.0/24网络。

R1路由和IPsec设置

/ip address
add address=192.168.33.1/30 interface=ether1
add address=1.1.1.2/24 interface=ether2

/ip route
add dst-address=2.2.2.0/24 gateway=192.168.33.2

/ip ipsec proposal
set default enc-algorithms=aes-128

/ip ipsec peer
add address=192.168.33.2 secret=123

/ip ipsec policy
add sa-src-address=192.168.33.1 sa-dst-address=192.168.33.2 \
    src-address=1.1.1.0/24 dst-address=2.2.2.0/24 tunnel=yes

R2路由和IPsec设置

/ip address
add address=192.168.33.2/30 interface=ether1
add address=2.2.2.2/24 interface=ether2

/ip route
add dst-address=1.1.1.0/24 gateway=192.168.33.1

/ip ipsec proposal
set default enc-algorithms=aes-128

/ip ipsec peer
add address=192.168.33.1 secret=123

/ip ipsec policy
add sa-src-address=192.168.33.2 sa-dst-address=192.168.33.1 \
    src-address=2.2.2.0/24 dst-address=1.1.1.0/24 tunnel=yes

流生成服务器设置

/ip address
add address=1.1.1.1/24 interface=ether2
add address=2.2.2.1/24 interface=ether3

首先定义哪些端口用作流量生成器的tx/rx端口

/tool traffic-generator port
add disabled=no interface=ether2 name=port0
add disabled=no interface=ether3 name=port1

为了构建生成的实际数据包,使用数据包模板。

/tool traffic-generator packet-template
add header-stack=mac,ip,udp ip-dst=2.2.2.1/32 ip-gateway=1.1.1.2 ip-src=1.1.1/32
    name=routing-1 port=port0
add header-stack=mac,ip,udp ip-dst=1.1.1.1/25 ip-gateway=2.2.2.2 ip-src=2.2.2.1/32
    name=routing-2 port=port1

注意,没有指定mac地址,因为模板生成器可以通过发送ARP信息自动假定下一跳的mac地址。因为做路由,而且目的IP不能直接到达,所以设置了 ip-gateway 参数来确定下一跳的mac地址。

运行 print 时,可以看到所有假设(检测)的值,包括mac地址。

[admin@test-host] /tool traffic-generator packet-template> print
 0 name="routing-1" header-stack=mac,ip,udp port=port0
   assumed-mac-dst=00:0C:42:00:38:9D assumed-mac-src=00:0C:42:40:94:25
   assumed-mac-protocol=ip assumed-ip-dscp=0 assumed-ip-id=0
   assumed-ip-frag-off=0 assumed-ip-ttl=64 assumed-ip-protocol=udp
   ip-src=1.1.1.1/32 ip-dst=2.2.2.1/32 assumed-udp-src-port=100
   assumed-udp-dst-port=200 ip-gateway=1.1.1.2 data=uninitialized data-byte=0

 1 name="routing-2" header-stack=mac,ip,udp port=port1
   assumed-mac-dst=00:0C:42:00:38:D1 assumed-mac-src=00:0C:42:40:94:26
   assumed-mac-protocol=ip assumed-ip-dscp=0 assumed-ip-id=0
   assumed-ip-frag-off=0 assumed-ip-ttl=64 assumed-ip-protocol=udp
   ip-src=2.2.2.1/32 ip-dst=1.1.1.1/32 assumed-udp-src-port=100
   assumed-udp-dst-port=200 ip-gateway=2.2.2.2 data=uninitialized data-byte=0

如果SUT中的任何路由器发生变化,假定的mac-addresses不会自动更新。要更新数据包模板,只需发出命令。

/tool traffic-generator packet-template set [find]

最后是配置流

/tool traffic-generator stream
add disabled=no mbps=500 name=str1 id=3 packet-size=1450 port=port0 pps=0\
    tx-template=routing-1
add disabled=no mbps=500 name=str3 id=4 packet-size=1450 port=port1 pps=0 (x-模板=路由-1)。
    tx-template=routing-2

注意,每个流有一个唯一的 id 值。这个值可以识别流数据包,否则,流量发生器将无法工作。

现在准备运行测试。这里将使用 快速 模式。

[admin@test-host] /tool traffic-generator> quick mbps=450
SEQ    NUM     TX-PACKET   TX-RATE     RX-PACKET   RX-RATE        RX-OOO   LOST-PACKET LOST-RATE
37     4          39 488 458.0Mbps        39 270 455.5Mbps        15 509           218   2.5Mbps
37     TOT        78 976 916.1Mbps        76 485 887.2Mbps        22 529         2 491  28.8Mbps
38     3          38 957 451.9Mbps        37 657 436.8Mbps         7 078         1 300  15.0Mbps
38     4          38 958 451.9Mbps        38 402 445.4Mbps        14 763           556   6.4Mbps
38     TOT        77 915 903.8Mbps        76 059 882.2Mbps        21 841         1 856  21.5Mbps
39     3          38 816 450.2Mbps        37 893 439.5Mbps         7 307           923  10.7Mbps
39     4          38 815 450.2Mbps        38 642 448.2Mbps        15 110           173   2.0Mbps
39     TOT        77 631 900.5Mbps        76 535 887.8Mbps        22 417         1 096  12.7Mbps
40     3          39 779 461.4Mbps        37 415 434.0Mbps         7 136         2 364  27.4Mbps
40     4          39 780 461.4Mbps        39 567 458.9Mbps        15 908           213   2.4Mbps
40     TOT        79 559 922.8Mbps        76 982 892.9Mbps        23 044         2 577  29.8Mbps
41     3          39 218 454.9Mbps        37 089 430.2Mbps         7 075         2 129  24.6Mbps
41     4          39 218 454.9Mbps        38 663 448.4Mbps        15 752           555   6.4Mbps
41     TOT        78 436 909.8Mbps        75 752 878.7Mbps        22 827         2 684  31.1Mbps
42     3          39 188 454.5Mbps        37 906 439.7Mbps         6 729         1 282  14.8Mbps
42     4          39 187 454.5Mbps        38 954 451.8Mbps        15 565           233   2.7Mbps
42     TOT        78 375 909.1Mbps        76 860 891.5Mbps        22 294         1 515  17.5Mbps
TOT    3       1 645 468 454.4Mbps     1 568 201 433.1Mbps       280 174        77 267  21.3Mbps
TOT    4       1 645 464 454.4Mbps     1 626 896 449.3Mbps       627 480        18 568   5.1Mbps
TOT    TOT     3 290 932 908.9Mbps     3 195 097 882.4Mbps       907 654        95 835  26.4Mbps

统计数据显示每个流的吞吐量和两个流的总吞吐量、失序数据包计数、丢失率、延迟和抖动信息。