示例:通过配置入口单速率双色监管器并配置多域分类器来限制网络中入站流量
此示例说明如何使用单速率双色监管器限制网络中的客户流量。监管人员使用一个称为令牌桶的概念来识别要丢弃的流量。监管器在接口级别实施合同内和合同外流量的服务等级 (CoS) 策略。您可以对传入数据包和/或传出数据包应用单速率双色监管器。此示例将监管器用作传入流量的输入(入口)监管器。多域分类器 CoS 队列选项将流量放入分配的队列中,通过应用以后的调度和整形,将有助于您在输出接口级别管理资源利用率。
本文不涉及令牌桶概念及其底层算法的全面解释。有关流量管制和 CoS 常规信息的更多信息,请参阅 Miguel Barreiros 和 Peter Lundqvist 作者的 QOS-Enabled Networks — 工具和基础 。许多在线书店和 www.juniper.net/books 都提供这本书。
要求
为了验证此过程,此示例使用流量生成器。流量生成器可以是基于硬件的,也可以是基于服务器或主机上运行的软件。
运行 Junos OS 的设备上广泛支持此过程中的功能。此处展示的示例已在运行 Junos OS 10.4 版的 MX 系列路由器上进行了测试和验证。
概述
警 务
单速率双色监管通过对不符合限制的流量应用隐式或配置的操作,为特定服务级别实施配置的流量速率。当您在接口上对输入或输出流量应用单速率双色监管器时,监管器将流量计量为以下组件定义的速率限制:
带宽限制 — 接口处接收或传输的数据包每秒允许的平均比特数。您可以将带宽限制指定为每秒绝对位数或 1 到 100 的百分比值。如果指定了百分比值,则有效带宽限制按物理接口介质速率或逻辑接口配置的整形速率的百分比计算。
突发大小限制 — 突发数据允许的最大大小。突发大小以字节为单位。我们推荐使用两种公式来计算突发大小:
突发大小 = 带宽 x 突发流量允许的时间 / 8
或
突发大小 = 接口 mtu x 10
有关配置突发大小的信息,请参阅 确定适当的流量监管器突发大小。
注意:接口的缓冲区空间有限。通常,接口的总缓冲区深度估计约为 125 毫秒。
对于符合配置限制(归类为绿色流量)的流量,数据包将隐式地标记为数据包丢失优先级 (PLP) 级别为低,并允许无限制地通过接口。
对于超过配置限制的流量(归类为红色流量),将根据为监管器配置的流量管制操作来处理数据包。此示例丢弃超过 15 KBps 限制爆发的数据包。
要限制第 3 层流量的速率,可以通过以下方式应用双色监管器:
直接连接到特定协议级别的逻辑接口。
作为特定协议级别应用于逻辑接口的标准无状态防火墙过滤器的操作。这就是此示例中使用的技术。
要限制第 2 层流量的速率,只能将双色监管器应用为逻辑接口监管器。您无法通过防火墙过滤器对第 2 层流量应用双色监管器。
您可以选择带宽限制或监管器内的带宽百分比,因为它们相互排斥。您不能将监管器配置为将带宽百分比用于聚合接口、隧道接口或软件接口。
在此示例中,主机是模拟 Web 服务器的流量生成器。设备 R1 和 R2 由服务提供商拥有。Web 服务器由设备 R2 背后的用户访问。主机将使用源端口 TCP HTTP 端口 80 和源端口 12345 向用户发送流量。系统配置了单速率双色监管器,并将其应用于将主机连接到设备 R1 的设备 R1 上的接口。监管器将实施 Web 服务器所有者(在此案例中为主机模拟)和拥有设备 R1 的服务提供商之间提供的合同带宽可用性,以便通过将主机连接到设备 R1 的链路传输 Web 流量。
根据 Web 服务器所有者和设备 R1 和 R2 之间的合同带宽可用性,监管器将限制 HTTP 端口 80 流量和源自主机的端口 12345 流量,使其使用 700 Mbps(70%)的可用带宽,允许的突发率为 10 x 主机和设备 R1 之间千兆以太网接口的 MTU 大小。
在实际场景中,您可能还会对 FTP、SFTP、SSH、TELNET、SMTP、IMAP 和 POP3 等各种其他端口的流量进行速率限制,因为它们通常作为 Web 托管服务附加服务包括在内。
您需要保留一些额外的带宽,这些带宽不会对网络控制协议(如路由协议、DNS 和保持网络连接正常运行所需的任何其他协议)进行速率限制。这就是防火墙过滤器有最终接受条件的原因。
拓扑
此示例使用 图 1 中的拓扑。

图 2 显示了监管行为。

多域分类
分类器是路由器或交换机在通过任何管制(如果配置了监管)之后进行数据包检测和分类的软件操作。在分类期间,会检查数据包头内容,并使用此检查确定当出站接口忙于处理所有数据包且希望您的设备智能地丢弃数据包而不是不分青红皂白地丢弃数据包时,如何处理数据包。检测感兴趣数据包的一种常用方法是通过源端口号。此示例使用 TCP 源端口号 80 和 12345,但使用防火墙过滤器匹配条件的多域分类器可以使用数据包检测的许多其他匹配标准。此示例中的配置指定将源端口为 80 的 TCP 数据包分类为 BE-data 转发类和队列编号 0,具有源端口 12345 的 TCP 数据包则分为 Premium-data 转发类和队列编号 1。来自两个端口号的流量首先由监管器监控。如果流量通过监管器,它将被移交给分配队列中的出站接口进行传输。
当数据包进入自治系统 (AS) 时,多域分类器通常用于网络边缘。
在此示例中,您将配置防火墙过滤器 mf-分类器,并在设备 R1 上指定一些自定义转发类。在指定自定义转发类时,还需将每个类与一个队列相关联。
分类器操作如图 3 所示。

您可以在每个面向客户或面向主机且需要过滤器的接口上应用多域分类器的防火墙过滤器作为输入过滤器。在此示例中,使用设备 R1 上的传入接口 ge-2/0/5。您可以监控流量传输的接口上队列的行为。在此示例中,要确定队列的服务方式,请使用命令中的show interfaces
选项检查接口 ge-2/0/8 extensive
上的流量统计信息。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层级的 [edit]
CLI 中。
设备 R1
set interfaces ge-2/0/5 description to-Host set interfaces ge-2/0/5 unit 0 family inet address 172.16.70.2/30 set interfaces ge-2/0/5 unit 0 family inet filter input mf-classifier set interfaces ge-2/0/8 description to-R2 set interfaces ge-2/0/8 unit 0 family inet address 10.50.0.1/30 set interfaces lo0 unit 0 description looback-interface set interfaces lo0 unit 0 family inet address 192.168.13.1/32 set firewall policer discard if-exceeding bandwidth-limit 700m set firewall policer discard if-exceeding burst-size-limit 15k set firewall policer discard then discard set class-of-service forwarding-classes class BE-data queue-num 0 set class-of-service forwarding-classes class Premium-data queue-num 1 set class-of-service forwarding-classes class Voice queue-num 2 set class-of-service forwarding-classes class NC queue-num 3 set firewall family inet filter mf-classifier term BE-data from protocol tcp set firewall family inet filter mf-classifier term BE-data from port http set firewall family inet filter mf-classifier term BE-data then forwarding-class BE-data set firewall family inet filter mf-classifier term BE-data then policer discard set firewall family inet filter mf-classifier term Premium-data from protocol tcp set firewall family inet filter mf-classifier term Premium-data from port 12345 set firewall family inet filter mf-classifier term Premium-data then forwarding-class Premium-data set firewall family inet filter mf-classifier term Premium-data then policer discard set firewall family inet filter mf-classifier term accept then accept set protocols ospf area 0.0.0.0 interface ge-2/0/5.0 passive set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ospf area 0.0.0.0 interface ge-2/0/8.0
设备 R2
set interfaces ge-2/0/7 description to-Host set interfaces ge-2/0/7 unit 0 family inet address 172.16.80.2/30 set interfaces ge-2/0/8 description to-R1 set interfaces ge-2/0/8 unit 0 family inet address 10.50.0.2/30 set interfaces lo0 unit 0 description looback-interface set interfaces lo0 unit 0 family inet address 192.168.14.1/32 set protocols ospf area 0.0.0.0 interface ge-2/0/7.0 passive set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ospf area 0.0.0.0 interface ge-2/0/8.0
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 Junos OS CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置设备 R1:
配置设备接口。
[edit interfaces] user@R1#set ge-2/0/5 description to-Host user@R1#set ge-2/0/5 unit 0 family inet address 172.16.70.2/30 user@R1#set ge-2/0/8 description to-R2 user@R1#set ge-2/0/8 unit 0 family inet address 10.50.0.1/30 user@R1# set lo0 unit 0 description looback-interface user@R1#set lo0 unit 0 family inet address 192.168.13.1/32
将监管器配置为速率限制为 700 Mbps 的带宽和 15 KBps 的突发大小。
[edit firewall policer discard] user@R1# set if-exceeding bandwidth-limit 700m user@R1# set if-exceeding burst-size-limit 15k
配置监管器以丢弃红色流量中的数据包。
[edit firewall policer discard] user@R1# set then discard
配置自定义转发类和关联的队列编号。
[edit class-of-service forwarding-classes] user@R1# set class BE-data queue-num 0 user@R1# set class Premium-data queue-num 1 user@R1# set class Voice queue-num 2 user@R1# set class NC queue-num 3
配置防火墙过滤器术语,将源端口为 80 的 TCP 流量(HTTP 流量)放入与队列 0 关联的 BE-data 转发类中。
[edit firewall family inet filter mf-classifier] user@R1# set term BE-data from protocol tcp user@R1# set term BE-data from port http user@R1# set term BE-data then forwarding-class BE-data user@R1# set term BE-data then policer discard
配置防火墙过滤器术语,将源端口为 12345 的 TCP 流量放入与队列 1 关联的高级数据转发类中。
[edit firewall family inet filter mf-classifier] user@R1# set term Premium-data from protocol tcp user@R1# set term Premium-data from port 12345 user@R1# set term Premium-data then forwarding-class Premium-data user@R1# set term Premium-data then policer discard
防火墙过滤器结束时,配置接受所有其他流量的默认术语。
否则,到达接口且防火墙过滤器未明确接受的所有流量将被丢弃。
[edit firewall family inet filter mf-classifier] user@R1# set term accept then accept
将防火墙过滤器作为输入过滤器应用到 ge-2/0/5 接口。
[edit interfaces] user@R1# set ge-2/0/5 unit 0 family inet filter input mf-classifier
配置 OSPF。
[edit protocols ospf] user@R1# set area 0.0.0.0 interface ge-2/0/5.0 passive user@R1# set area 0.0.0.0 interface lo0.0 passive user@R1# set area 0.0.0.0 interface ge-2/0/8.0
逐步过程
要配置设备 R2:
配置设备接口。
[edit interfaces] user@R2# set ge-2/0/7 description to-Host user@R2# set ge-2/0/7 unit 0 family inet address 172.16.80.2/30 user@R2# set ge-2/0/8 description to-R1 user@R2# set ge-2/0/8 unit 0 family inet address 10.50.0.2/30 user@R2# set lo0 unit 0 description looback-interface user@R2# set lo0 unit 0 family inet address 192.168.14.1/32
配置 OSPF。
[edit protocols ospf] user@R2# set area 0.0.0.0 interface ge-2/0/7.0 passive user@R2# set area 0.0.0.0 interface lo0.0 passive user@R2# set area 0.0.0.0 interface ge-2/0/8.0
结果
在配置模式下,输入 show interfaces
、 show class-of-service
、 show firewall
和 show protocols ospf
命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
user@R1# show interfaces ge-2/0/5 { description to-Host; unit 0 { family inet { filter { input mf-classifier; } address 172.16.70.2/30; } } } ge-2/0/8 { description to-R2; unit 0 { family inet { address 10.50.0.1/30; } } } lo0 { unit 0 { description looback-interface; family inet { address 192.168.13.1/32; } } }
user@R1# show class-of-service forwarding-classes { class BE-data queue-num 0; class Premium-data queue-num 1; class Voice queue-num 2; class NC queue-num 3; }
user@R1# show firewall family inet { filter mf-classifier { term BE-data { from { protocol tcp; port http; } then { policer discard; forwarding-class BE-data; } } term Premium-data { from { protocol tcp; port 12345; } then { policer discard; forwarding-class Premium-data; } } term accept { then accept; } } } policer discard { if-exceeding { bandwidth-limit 700m; burst-size-limit 15k; } then discard; }
user@R1# show protocols ospf area 0.0.0.0 { interface ge-2/0/5.0 { passive; } interface lo0.0 { passive; } interface ge-2/0/8.0; }
完成设备 R1 配置后,请从配置模式进入 commit
。
user@R2# show interfaces ge-2/0/7 { description to-Host; unit 0 { family inet { address 172.16.80.2/30; } } } ge-2/0/8 { description to-R1; unit 0 { family inet { address 10.50.0.2/30; } } } lo0 { unit 0 { description looback-interface; family inet { address 192.168.14.1/32; } } }
user@R2# show protocols ospf area 0.0.0.0 { interface ge-2/0/7.0 { passive; } interface lo0.0 { passive; } interface ge-2/0/8.0; }
完成设备 R2 配置后,请从配置模式进入 commit
。
验证
确认配置工作正常。
检查 CoS 设置
目的
确认转发类配置正确。
行动
从设备 R1 中运行 show class-of-service forwarding-class
命令。
user@R1> show class-of-service forwarding-class Forwarding class ID Queue Restricted queue Fabric priority Policing priority SPU priority BE-data 0 0 0 low normal low Premium-data 1 1 1 low normal low Voice 2 2 2 low normal low NC 3 3 3 low normal low
意义
输出显示配置的自定义分类器设置。
清除计数器
目的
确认防火墙和接口计数器已清除。
行动
在设备 R1 上,运行
clear firewall all
命令将防火墙计数器重置为 0。user@R1> clear firewall all
在设备 R1 上,运行
clear interface statistics ge-2/0/5
命令将接口计数器重置为 0。user@R1> clear interface statistics ge-2/0/8
从 TCP HTTP 端口 80 向网络发送流量并监控结果
目的
发送可在监管者和自定义队列级别监控的流量。
行动
使用流量生成器将源端口为 80 的 20 个 TCP 数据包发送到网络。
-s 标志设置源端口。-k 标记会使源端口保持稳定在 80,而不是递增。-c 标志将数据包数设置为 20。-d 标志设置数据包大小。
注意:在此示例中,监管器编号缩减为 8 Kbps 的带宽限制和 1500 KBps 的突发大小限制,以确保丢弃某些数据包。
[User@host]# hping 172.16.80.1 -c 20 -s 80 -k -d 300 [root@host]# hping 172.16.80.1 -s 80 -k -c 20 -d 300 HPING 172.16.80.1 (eth1 172.16.80.1): NO FLAGS are set, 40 headers + 300 data bytes len=46 ip=172.16.80.1 ttl=62 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=1.4 ms . . . --- 172.16.80.1 hping statistic --- 20 packets transmitted, 16 packets received, 20% packet loss round-trip min/avg/max = 1.4/8688.9/17002.3 ms
在设备 R1 上,使用
show firewall
命令检查防火墙计数器。user@R1> show firewall Filter: mf-classifier Policers: Name Bytes Packets discard-BE-data 1360 4 discard-Premium-data 0 0
请注意,在运行输出中,有 20% 的丢包(20 个中有 4 个数据包),监管器丢弃的数据包数与命令输出
show firewall
中所示的数据包数相同。另请注意,丢弃与防火墙配置中的 mf 分类器中指定的队列 BE 数据相关联。在设备 R1 上,使用
show interfaces extensive ge-2/0/8| find "Queue counters"
命令检查队列计数器。user@R1> show interfaces extensive ge-2/0/8| find "Queue counters" Queue counters: Queued packets Transmitted packets Dropped packets 0 16 16 0 1 0 0 0 2 0 0 0 3 4 4 0 Queue number: Mapped forwarding classes 0 BE-data 1 Premium-data 2 Voice 3 NC
请注意,16 个数据包使用防火墙配置中的 mf-分类器指定的队列 BE-data 从接口 2/0/8 中传输出来。其余 4 个数据包被监管人员丢弃,如上所示。发送到队列 3 的 4 个数据包是网络控制流量。它们可能正在路由协议更新。
意义
两个设备的输出都显示有 4 个数据包被丢弃这表示至少有 8 Kbps 的绿色(内接 HTTP 端口 80)流量,而红色未约定 HTTP 端口 80 流量的 1500 KBps 突发选项已超过。在第 2 步和第 3 步中,您可以看到,使用正确的队列将剩余流量传输出接口 2/0/8。
从 TCP 端口 12345 向网络发送流量并监控结果
目的
发送可在监管者和自定义队列级别监控的流量。
行动
再次清除计数器,如清除 计数器部分所示。
使用流量生成器将源端口为 12345 的 20 个 TCP 数据包发送到网络。
-s 标志设置源端口。-k 标记会使源端口保持稳定在 12345,而不是递增。-c 标志将数据包数设置为 20。-d 标志设置数据包大小。
[User@host]# hping 172.16.80.1 -c 20 -s 12345 -k -d 300 [root@tp-host]# hping 172.16.80.1 -s 12345 -k -c 20 -d 300 HPING 172.16.80.1 (eth1 172.16.80.1): NO FLAGS are set, 40 headers + 300 data bytes len=46 ip=172.16.80.1 ttl=62 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.4 ms . . . --- 172.16.80.1 hping statistic --- 20 packets transmitted, 16 packets received, 20% packet loss round-trip min/avg/max = 0.4/9126.3/18002.4 ms
在设备 R1 上,使用
show firewall
命令检查防火墙计数器。user@R1> show firewall Filter: mf-classifier Policers: Name Bytes Packets discard-BE-data 0 0 discard-Premium-data 1360 4
请注意,在运行输出中,有 20% 的丢包(20 个中有 4 个数据包),监管器丢弃的数据包数与命令输出
show firewall
中所示的数据包数相同。另请注意,丢弃与防火墙配置中的 mf 分类器中指定的队列 Premium 数据相关联。在设备 R1 上,使用
show interfaces extensive ge-2/0/8| find "Queue counters"
命令检查队列计数器。user@R1> show interfaces extensive ge-2/0/8| find "Queue counters" Queue counters: Queued packets Transmitted packets Dropped packets 0 0 0 0 1 16 16 0 2 0 0 0 3 19 19 0 Queue number: Mapped forwarding classes 0 BE-data 1 Premium-data 2 Voice 3 NC
请注意,16 个数据包使用 mf-分类器防火墙配置中指定的 Premium-data 队列从接口 2/0/8 传输出。其余 4 个数据包被监管者丢弃,如上所示。发送至队列 3 的 19 个数据包是网络控制流量。它们可能正在路由协议更新。
意义
两台设备的输出显示有 4 个数据包被丢弃。这意味着至少有 8 Kbps 的绿色(内部 HTTP 端口 80)流量,并且超过了红色无合同 HTTP 端口 80 流量的 1500 KBps 突发选项。在步骤 3 和 4 中,您可以看到,使用正确的队列将剩余流量传输出接口 2/0/8。