示例:通过配置出口单速率双色监管器并配置多域分类器来限制网络中的出站流量
此示例说明如何使用单速率双色监管器限制网络中的客户流量。监管人员使用一个称为令牌桶的概念来识别要丢弃的流量。监管器在接口级别实施合同内和合同外流量的服务等级 (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) 级别 low
,并允许无限制通过接口。
对于超过配置限制的流量(归类为红色流量),将根据为监管器配置的流量管制操作来处理数据包。此示例丢弃超过 15 KBps 限制爆发的数据包。
要限制第 3 层流量的速率,可以通过以下方式应用双色监管器:
直接连接到特定协议级别的逻辑接口。
作为特定协议级别应用于逻辑接口的标准无状态防火墙过滤器的操作。这就是此示例中使用的技术。
要限制第 2 层流量的速率,只能将双色监管器应用为逻辑接口监管器。您无法通过防火墙过滤器对第 2 层流量应用双色监管器。
您可以选择带宽限制或监管器内的带宽百分比,因为它们相互排斥。您不能将监管器配置为将带宽百分比用于聚合接口、隧道接口和软件接口。
在此示例中,如图 1 所示,连接到设备 R1 的 Host1 和连接到设备 R3 的 Host3 是模拟 Web 服务器的信息流生成器。Host1 和 Host3 都在设备 R2 后面向 Host2 发送流量。设备 R1、R2 和 R3 由服务提供商拥有。Host1 由 R2 后面的 Host2 上的用户访问。Host1 和 Host2 由同一客户拥有,其流量必须得到管理。Host1 将向用户发送源 TCP HTTP 端口为 80 的流量。配置了单速率双色监管器,并将其应用于连接到 R2 的 R1 上的接口。监管者执行 Web 服务器所有者和服务提供商商定的合同,为 R1 和 R2 之间流动的 Web 流量提供带宽。
此示例在 R1 和 R2 之间应用出口监管器,因为此时来自两个客户站点的流量共享同一链路。这可以更轻松地实施所需的监管参数。尝试将监管器应用于 R3 上的 ge-0/0/0 和 R1 上的 ge-2/0/5 的入口监管器来限制 R1 和 R2 之间链路上的客户流量组合流量的速率。 复杂,因为使用 700 Mbps(70%) 的约定速率可用带宽,允许的突发速率为 Host3 和 R3 以及 Host1 和 R1 之间千兆以太网接口的 MTU 大小 10 倍从而允许 R1 和 R2 之间的链路上的最大吞吐量为 1400 Mbps。
因此,应用于主机与 R3 和 R1 之间的主机连接的速率限制必须降低到 700 Mbps 以下。如果一台主机正在传输流量而另一台主机未传输流量,则 R1 和 R2 之间链路的最大吞吐量仅为约定速率的一半(350 Mbps 而非 700 Mbps)。因此,此示例有助于展示在网络中应用 CoS 才能实现预期目标所必须思考的问题。
根据合同带宽可用性,R1 上的出口监管器会将源自 Host1 的 HTTP 端口 80 流量限制为使用 700 Mbps(70%)的可用带宽,允许的突发率为 R1 和 R2 之间千兆以太网接口 MTU 大小的 10 倍。
此示例使用来自 TCP 源端口 12345 的其他流量来进一步说明如何向出站队列分配流量。
在实际场景中,您可能还会对 FTP、SFTP、SSH、TELNET、SMTP、IMAP 和 POP3 等各种其他端口的流量进行速率限制,因为它们通常作为 Web 托管服务附加服务包括在内。
您必须保留一些额外的可用带宽,这些带宽对网络控制协议(如路由协议、DNS 和保持网络连接正常运行所需的任何其他协议)没有速率限制。这就是防火墙过滤器有最终接受条件的原因。
拓扑
此示例使用 图 2 中的拓扑。
图 3 显示了监管行为。
多域分类
分类器是路由器或交换机在通过任何管制(如果配置了监管)之后进行数据包检测和分类的软件操作。在分类期间,会检查数据包头内容,并使用此检查确定当出站接口忙于处理所有数据包且希望您的设备智能地丢弃数据包而不是不分青红皂白地丢弃数据包时,如何处理数据包。检测感兴趣数据包的一种常用方法是通过源端口号。此示例使用 TCP 源端口号 80 和 12345,但使用防火墙过滤器匹配条件的多域分类器可以使用数据包检测的许多其他匹配标准。此示例中的配置指定将源端口为 80 的 TCP 数据包分类为 BE-data 转发类和队列编号 0,具有源端口 12345 的 TCP 数据包则分为 Premium-data 转发类和队列编号 1。来自两个端口号的流量首先由监管器监控。如果流量通过监管器,它将被移交给分配队列中的出站接口进行传输。
当数据包进入自治系统 (AS) 时,多域分类器通常用于网络边缘。但是,如前面策略部分所述,在本示例中,多域分类器配置在服务提供商的 AS 中。
在此示例中,您将配置防火墙过滤器 mf-classifier ,并在 R1 上指定一些自定义转发等级。在指定自定义转发类时,还需将每个类与一个队列相关联。
分类器操作如图 4 所示。
您可以监控流量传输的接口上队列的行为。在此示例中,要确定队列的服务方式,请使用命令中的show interfaces
选项检查 R1 extensive
上接口 ge-2/0/8 上的流量统计信息。
配置
程序
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,然后将命令复制并粘贴到层级的 [edit]
CLI 中。
设备 R1
set interfaces ge-0/0/1 description to-R3 set interfaces ge-0/0/1 unit 0 family inet address 10.51.0.1/30 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/8 description to-R2 set interfaces ge-2/0/8 unit 0 family inet address 10.50.0.1/30 set interfaces ge-2/0/8 unit 0 family inet filter output mf-classifier set interfaces lo0 unit 0 description loopback-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-0/0/1.0 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 loopback-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
设备 R3
set interfaces ge-0/0/0 description to-Host set interfaces ge-0/0/0 unit 0 family inet address 172.16.71.1/30 set interfaces ge-0/0/1 description to-R1 set interfaces ge-0/0/1 unit 0 family inet address 10.51.0.2/30 set interfaces lo0 unit 0 description loopback-interface set interfaces lo0 unit 0 family inet address 192.168.15.1/32 set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 passive set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ospf area 0.0.0.0 interface ge-0/0/1.0
逐步过程
以下示例要求您在配置层次结构中的各个级别上导航。有关如何操作的说明,请参阅 Junos OS CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置 R1:
配置设备接口。
[edit interfaces] user@R1# set ge-0/0/1 description to-R3 user@R1# set ge-0/0/1 unit 0 family inet address 10.51.0.1/30 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
将监管器配置为速率限制为 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/8,作为输出过滤器。
[edit interfaces] user@R1# set ge-2/0/8 unit 0 family inet filter output 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-0/0/1.0 user@R1# set area 0.0.0.0 interface ge-2/0/8.0
逐步过程
要配置 R2:
配置设备接口。
[edit] user@R2# set interfaces ge-2/0/7 description to-Host user@R2# set interfaces ge-2/0/7 unit 0 family inet address 172.16.80.2/30 user@R2# set interfaces ge-2/0/8 description to-R1 user@R2# set interfaces ge-2/0/8 unit 0 family inet address 10.50.0.2/30 user@R2# set interfaces lo0 unit 0 description loopback-interface user@R2# set interfaces 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
逐步过程
要配置 R3:
配置接口。
[edit] user@R3# set interfaces ge-0/0/0 description to-Host user@R3# set interfaces ge-0/0/0 unit 0 family inet address 172.16.71.1/30 user@R3# set interfaces ge-0/0/1 description to-R1 user@R3# set interfaces ge-0/0/1 unit 0 family inet address 10.51.0.2/30 user@R3# set interfaces lo0 unit 0 description loopback-interface user@R3# set interfaces lo0 unit 0 family inet address 192.168.15.1/32
配置 OSPF
[edit protocols ospf] user@R3# set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 passive user@R3# set protocols ospf area 0.0.0.0 interface lo0.0 passive user@R3# set protocols ospf area 0.0.0.0 interface ge-0/0/1.0
结果
在配置模式下,输入 show interfaces
、 show class-of-service
、 show firewall
和 show protocols ospf
命令,以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
user@R1# show interfaces ge-0/0/1 { description to-R3; unit 0 { family inet { address 10.51.0.1/30; } } } } ge-2/0/5 { description to-Host; unit 0 { family inet { address 172.16.70.2/30; } } } ge-2/0/8 { description to-R2; unit 0 { family inet { filter { output mf-classifier; } address 10.50.0.1/30; } } } lo0 { unit 0 { description loopback-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-0/0/1.0; 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 loopback-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
。
user@R3# show interfaces ge-0/0/0 { description to-Host; unit 0 { family inet { address 172.16.71.2/30; } } } ge-0/0/1 { description to-R1; unit 0 { family inet { address 10.51.0.2/30; } } } lo0 { unit 0 { description loopback-interface; family inet { address 192.168.15.1/32; } } }
user@R3# show protocols ospf area 0.0.0.0 { interface ge-0/0/0.0 { passive; } interface lo0.0 { passive; } interface ge-0/0/1.0; }
完成 R3 配置后,请从配置模式进入 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 [User@Host]# hping 172.16.80.1 -s 80 -k -c 20 -d 375 HPING 172.16.80.1 (eth1 172.16.80.1): NO FLAGS are set, 40 headers + 375 data bytes len=46 ip=172.16.80.1 ttl=62 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=1001.0 ms . . . --- 172.16.80.1 hping statistic --- 20 packets transmitted, 14 packets received, 30% packet loss round-trip min/avg/max = 1001.0/10287.1/19002.1 ms
在 R1 上,使用
show firewall
命令检查防火墙计数器。user@R1> show firewall Filter: mf-classifier Policers: Name Bytes Packets discard-BE-data 2490 6 discard-Premium-data 0 0
请注意,在输出中
hping
,有 30% 的丢包(20 个中有 6 个数据包),监管器丢弃了相同数量的数据包,如命令输出show firewall
中所示。另请注意,丢弃与防火墙配置中mf-classifier
指定的队列BE-data
相关联。在 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 14 14 0 1 0 0 0 2 0 0 0 3 16 16 0 Queue number: Mapped forwarding classes 0 BE-data 1 Premium-data 2 Voice 3 NC
请注意,有 14 个数据包使用防火墙配置中
mf-classifier
指定的队列BE-data
从接口 2/0/8 中传输出来。其余 6 个数据包被监管者丢弃,如上所示。发送至队列 3 的 16 个数据包是网络控制流量。它们可能正在路由协议更新。
意义
两个设备的输出都显示有 6 个数据包被丢弃这表示至少有 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 [Host@User]# hping 172.16.80.1 -s 12345 -k -c 20 -d 375 HPING 172.16.80.1 (eth1 172.16.80.1): NO FLAGS are set, 40 headers + 375 data bytes len=46 ip=172.16.80.1 ttl=62 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=1000.4 ms . . . --- 172.16.80.1 hping statistic --- 20 packets transmitted, 13 packets received, 35% packet loss round-trip min/avg/max = 1000.4/10924.5/19002.2 ms
在 R1 上,使用
show firewall
命令检查防火墙计数器。user@R1> show firewall Filter: mf-classifier Policers: Name Bytes Packets discard-BE-data 0 0 discard-Premium-data 2905 7
请注意,在输出中
hping
,有 35% 的丢包(20 个中有 7 个数据包),监管器丢弃了相同数量的数据包,如命令输出show firewall
中所示。另请注意,丢弃与防火墙配置中mf-classifier
指定的队列Premium-data
相关联。在 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 13 13 0 2 0 0 0 3 16 16 0 Queue number: Mapped forwarding classes 0 BE-data 1 Premium-data 2 Voice 3 NC
请注意,有 13 个数据包使用防火墙配置中指定的
mf-classifier
Premium-data 队列从接口 2/0/8 传输出。其余 7 个数据包被监管人员丢弃,如上所示。发送至队列 3 的 16 个数据包是网络控制流量。它们可能正在路由协议更新。
意义
两台设备的输出显示有 7 个数据包被丢弃。这意味着至少有 8 Kbps 的绿色(内部 HTTP 端口 80)流量,并且超过了红色(无合同 HTTP 端口 80)流量的 1500 KBps 突发选项。在步骤 3 和 4 中,您可以看到,使用正确的队列将剩余流量传输出接口 2/0/8。