示例:配置和应用默认 DSCP 行为聚合分类器
Junos OS 分类器可识别和分离流量,并提供在后续服务等级 (CoS) 流程中确定流量优先级的方法。
行为聚合 (BA) 分类器通过将众所周知的 CoS 值与转发类和丢失优先级相关联来执行此功能。要启用默认分类器,只需将其应用到设备接口即可。如果未对接口应用默认分类器,则它不会生效。
Junos OS 提供了多种默认 BA 分类器类型,您可以根据需要将其与自定义 BA 分类器组合和补充,以实现您的整体流量分类目标。此示例说明如何应用默认 (BA) DiffServ 代码点 (DSCP) 分类器并验证其功能。
要求
为了验证此过程,此示例使用流量生成器。流量生成器可以是基于硬件的,也可以是基于服务器或主机上运行的软件。如果无法访问流量生成器,则可以使用扩展 ping 进行验证。这种方法也在展示中。
运行 Junos OS 的设备上广泛支持此过程中的功能。此处展示的示例已在运行 Junos OS 10.4 版的 MX 系列路由器上进行了测试和验证。
概述
Junos OS CoS 的基础是流量差异化。将流量分配给不同的服务等级提供了必要的差异化优势。从路由器的角度来看,分配给数据包的服务等级定义了路由器对数据包的行为。流量差异化的概念都存在于每个 CoS 工具中,因此在整个 CoS 设计中都存在服务等级。分类器有一个输入,即传入数据包,它有 N 个可能输出,其中 N 个是数据包可分类的可能服务等级的数量。
当进入设备的流量在数据包标头中已具有可信的 CoS 值时,使用 BA 分类。例如,默认的 DSCP BA 分类器指定将包含代码点 000000 的数据包分配给尽力转发类,并将丢失优先级设置为低。
默认情况下,将为每个已知的 DSCP 分配一个转发类和丢失优先级。要查看此视图,请运行 show class-of-service classifier
命令。
user@host> show class-of-service classifier type dscp Classifier: dscp-default, Code point type: dscp, Index: 7 Code point Forwarding class Loss priority 000000 best-effort low 000001 best-effort low 000010 best-effort low 000011 best-effort low 000100 best-effort low 000101 best-effort low 000110 best-effort low 000111 best-effort low 001000 best-effort low 001001 best-effort low 001010 assured-forwarding low 001011 best-effort low 001100 assured-forwarding high 001101 best-effort low 001110 assured-forwarding high 001111 best-effort low 010000 best-effort low 010001 best-effort low 010010 best-effort low 010011 best-effort low 010100 best-effort low 010101 best-effort low 010110 best-effort low 010111 best-effort low 011000 best-effort low 011001 best-effort low 011010 best-effort low 011011 best-effort low 011100 best-effort low 011101 best-effort low 011110 best-effort low 011111 best-effort low 100000 best-effort low 100001 best-effort low 100010 best-effort low 100011 best-effort low 100100 best-effort low 100101 best-effort low 100110 best-effort low 100111 best-effort low 101000 best-effort low 101001 best-effort low 101010 best-effort low 101011 best-effort low 101100 best-effort low 101101 best-effort low 101110 expedited-forwarding low 101111 best-effort low 110000 network-control low 110001 best-effort low 110010 best-effort low 110011 best-effort low 110100 best-effort low 110101 best-effort low 110110 best-effort low 110111 best-effort low 111000 network-control low 111001 best-effort low 111010 best-effort low 111011 best-effort low 111100 best-effort low 111101 best-effort low 111110 best-effort low 111111 best-effort low
转发类确定输出队列。默认情况下,所有尽力而为的流量都使用队列 0。
要查看默认情况下与每个转发类关联的队列,请使用 show class-of-service forwarding-class
命令。(为清楚起见,部分输出被排除在外。)
user@host> show class-of-service forwarding-class Forwarding class ID Queue best-effort 0 0 expedited-forwarding 1 1 assured-forwarding 2 2 network-control 3 3
丢失优先级由调度器与随机早期检测 (RED) 算法一起使用,以控制拥塞期间数据包丢弃。在考虑丢失优先级时,请记住,除非您配置它们,否则它们毫无意义。默认的丢弃行为是等待队列 100% 满员,然后开始不分青红皂白地丢弃数据包。当队列跌至 100% 满率以下时,数据包将停止丢弃。
默认丢弃行为显示在命令中 show class-of-service drop-profile
。
user@host> show class-of-service drop-profile Drop profile: <default-drop-profile>, Type: discrete, Index: 1 Fill level Drop probability 100 100
要为各种丢失优先级创建含义,必须配置自定义丢弃配置文件。例如,您可以将低丢失优先级定义为当队列为 75% 已满时为 10% 的丢弃概率,当队列填充级别为 95% 时,则为 40% 的丢弃概率。您可以将高损失优先级定义为当填充级别为 25% 时为 50% 的丢弃概率,当填充级别为 50% 时,则为 90% 的丢弃概率。此示例中不包含自定义丢弃配置文件,但在此处提及是为了澄清,因为分类器分配了丢失优先级。需要了解的是,在您创建丢弃配置文件之前,这些分配毫无意义。
默认分类器操作如图 1 所示。该图显示了进入接口并根据数据包标头中的 DSCP 代码点分类的两个 IPv4 数据包。
以下瞻博网络学习字节视频详细介绍了分类器。
拓扑
图 2 显示了示例网络。
跨拓扑应用服务等级配置非常重要,而不是将其应用到单个设备。此外,即使分类对传入接口生效,也应该对所有面向核心和面向核心的接口应用 BA 分类器。这是因为单个接口可以是传入的,也可以是传出接口,具体取决于流量的方向。例如,当流量从主机 1 流向主机 2 时,设备 R2 上的传入接口为 ge-1/0/7,设备 R3 上的 ge-2/0/6。当流量从主机 2 流向另一个方向时,设备 R2 上的传入接口为 ge-1/0/3,设备 R1 上的 ge-1/0/7。
BA 分类器不应用于设备 R1 上的 ge-1/0/1 或设备 R3 上的 ge-2/0/5,因为这些接口不面向核心。一般来说,在面向边缘的接口上,将使用多域分类器,而不是 BA 分类器。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层级的 [edit]
CLI 中。
设备 R1
set interfaces ge-1/0/1 unit 0 family inet address 172.16.50.2/30 set interfaces ge-1/0/7 unit 0 family inet address 10.30.0.1/30 set class-of-service interfaces ge-1/0/7 unit 0 classifiers dscp default
设备 R2
set interfaces ge-1/0/3 unit 0 family inet address 10.40.0.1/30 set interfaces ge-1/0/7 unit 0 family inet address 10.30.0.2/30 set class-of-service interfaces ge-1/0/3 unit 0 classifiers dscp default set class-of-service interfaces ge-1/0/7 unit 0 classifiers dscp default
设备 R3
set interfaces ge-2/0/5 unit 0 family inet address 172.16.70.2/30 set interfaces ge-2/0/6 unit 0 family inet address 10.40.0.2/30 set class-of-service interfaces ge-2/0/6 unit 0 classifiers dscp default
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要启用默认 DSCP 行为聚合分类器:
-
配置设备接口。
[edit interfaces] user@R2# set ge-1/0/3 unit 0 family inet address 10.40.0.1/30 user@R2# set ge-1/0/7 unit 0 family inet address 10.30.0.2/30
-
在接口上启用默认 DSCP 分类器。
[edit class-of-service interfaces] user@R2# set ge-1/0/3 unit 0 classifiers dscp default user@R2# set ge-1/0/7 unit 0 classifiers dscp default
结果
在配置模式下,输入和 show class-of-service
命令以确认show interfaces
您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
user@R2# show interfaces ge-1/0/3 { unit 0 { family inet { address 10.40.0.1/30; } } } ge-1/0/7 { unit 0 { family inet { address 10.30.0.2/30; } } }
user@R2# show class-or-service interfaces { ge-1/0/3 { unit 0 { classifiers { dscp default; } } } ge-1/0/7 { unit 0 { classifiers { dscp default; } } } }
完成设备配置后,请从配置模式进入 commit
。
验证
确认配置工作正常。
验证行为聚合分类器
目的
验证设备接口上是否启用了默认行为聚合分类器。请记住,尽管分类器对传入数据包进行操作,但您可以在传出接口上查看由此产生的队列分配。
行动
清除设备 R2 上的接口统计信息。
user@R2> clear interface statistics ge-1/0/3
使用从设备 R1 或主机或服务器上运行的数据包生成器的扩展 ping,发送代码点设置为 001010 的数据包。
这两种方法都在这里显示。使用的数据包生成器正在运行
使用扩展 ping 设置 IPv4 数据包头中的 DSCP 代码点时,命令选项
ping
中需要服务类型 (ToS) 十进制值(本案例中tos
为 40)。使用 hping 设置 IPv4 数据包标头中的 DSCP 代码点时,命令选项
hping
中需要 ToS 十六脚值(本案例中--tos
为 28)。
如果您的二进制到十六进制或二进制到十进制转换技能生锈,您可以使用在线计算器,如 http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html 。
注意:转换二进制 DSCP 代码点值时,请确保在末尾添加两个额外的零。因此,使用 0010100,而不是 001010。这些 0 值(第 7 位和第 8 位)将被保留并忽略,但如果转换时未包括这些值,则十六进制值将不正确。
从设备 R1 发送的扩展 Ping
user@R1> ping 172.16.70.1 tos 40 rapid count 25 PING 172.16.70.1 (172.16.70.1): 56 data bytes !!!!!!!!!!!!!!!!!!!!!!!!! --- 172.16.70.1 ping statistics --- 25 packets transmitted, 25 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.430/0.477/0.847/0.079 ms
从主机发送的 hping 1
root@host1> hping 172.16.70.1 --tos 28 -c 25 HPING 172.16.70.1 (eth1 172.16.70.1): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.3 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.6 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=3 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=4 win=0 rtt=0.6 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=5 win=0 rtt=0.3 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=6 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=7 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=8 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=9 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=10 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=11 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=12 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=13 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=14 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=15 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=16 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=17 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=18 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=19 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=20 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=21 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=22 win=0 rtt=0.4 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=23 win=0 rtt=0.5 ms len=46 ip=172.16.70.1 ttl=61 DF id=0 sport=0 flags=RA seq=24 win=0 rtt=0.4 ms
在设备 R2 上,验证队列 2 是否在递增。
代码点 001010 与保证转发相关联,后者默认使用队列 2。
user@R2> show interfaces extensive ge-1/0/3 | find "queue counters" Queue counters: Queued packets Transmitted packets Dropped packets 0 0 0 0 1 0 0 0 2 50 25 0 3 3 3 0 Queue number: Mapped forwarding classes 0 best-effort 1 expedited-forwarding 2 assured-forwarding 3 network-control
意义
输出显示,在通过路由器发送 50 个数据包后,队列 2 已递增 50 个数据包。