概述
流量发生器是一个评估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=3,print 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
统计数据显示每个流的吞吐量和两个流的总吞吐量、失序数据包计数、丢失率、延迟和抖动信息。