本文档介绍流量整形和流量管制之间的功能差异,两者都会限制输出速率。
本文档没有任何特定的要求。
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
本文档阐明了流量整形和流量管制功能的区别。这两种功能均可限制流量输出速率。这两种机制都使用令牌桶作为流量计来测量数据包速率。有关令牌桶的详细信息,请参阅令牌桶是什么
本文档中的概念对于了解Cisco QoS设计仍然相关。流量整形和流量策略继续用于执行最大流量速率和管理拥塞。对于新部署,思科建议在该平台支持时使用模块化QoS命令行(MQC)基于类的整形和基于类的策略。传统机制(例如通用流量整形(GTS)、帧中继流量整形(FRTS)、承诺接入速率(CAR)和rate-limit命令)用于历史情景或支持平台特定讨论。
流量策略会传播突发流量。当流量速率达到所配置的最大速率时,将丢弃(或重新标记)超额流量。 其结果是,输出速率显示为带有波峰和波谷的锯齿状。与策略相比,流量整形在队列中保留超额的数据包,然后安排超额数据包在以后增加的时间里进行传输。流量整形的结果是一个平滑的数据包输出速率。
下图说明了两个流量选项之间的主要区别。
管制和整形
整形暗示队列和用于缓冲延迟数据包的充足内存的存在,而策略却不是。队列是一个出站概念;离开接口的数据包会进入队列并可以进行整形。对接口上的入站流量只能实施策略。在启用整形时,请确保内存足够。此外,整形需要使用调度功能,用于安排稍后传输任何延迟的数据包。可以利用此调度功能将整形队列组织成不同的队列。此功能的示例包括基于类的加权公平 (CBWFQ) 和低延迟 (LLQ)。Queuing Queuing
注意:流量整形和流量策略都会执行配置的流量速率。整形是一种出口排队机制。策略可以应用于入站或出站,具体取决于平台和功能支持。
下表列出了整形和管制之间的区别,可帮助您选择合适的流量解决方案。
| 流量整形 | 流量策略 | |
|---|---|---|
| 主要行为 | 对超过承诺速率的额外数据包进行缓冲和排队。 | 丢弃(或注释)超过承诺速率的数据包。不进行缓冲。* |
| 令牌刷新速率 | 令牌在每个Tc间隔内定期地被补充。在每个间隔开始时,整形器会添加Bc令牌,直到达到配置的桶限制。Tc受平台特定限制的约束。 | 根据数据包到达之间经过的时间来补充令牌。监察器计算要与((t - t1)* policer_rate_bps)/ 8一起添加的令牌数,其中t - t1是自上一个数据包以来的时间。 |
| 令牌值 | 配置单位为每秒bps。 | 按字节配置。 |
| 配置选项 |
|
|
| 典型方向 | 出站 | 入站或出站,取决于平台 |
| 突发 | 控制突发并在至少 8 个时间间隔内平滑输出速率。它使用令牌桶计量并排队超额数据包。排队的数据包会随着时间推移而释放,从而产生类似于漏桶的平滑效果。 | 允许突发在配置的突发限制内。它不会缓冲数据包来平滑传输速率。 |
| 优势 | 由于对超额数据包进行了缓冲,因而降低了丢弃超额数据包的可能性。(数据包最多可缓冲到队列的长度。如果额外流量持续高速率传输,则可能发生丢包。) 通常可避免因掉包而进行重新传输。 | 通过掉包控制输出速率。避免了由于导致的延迟。queuing |
| 缺点 | 可能会由于导致延迟,尤其是很深的队列。queuing |
丢弃额外数据包(如果已配置),限制 TCP 窗口大小,并降低受影响流量流的整体输出速率。太大的突发大小可能导致丢弃额外数据包并限制整体输出速率,尤其是针对基于 TCP 的数据流。 |
| 可选数据包重新标记 | 无 | 是,它可以选择性地传输、丢弃或标记数据包,包括IP优先级或DSCP操作,具体取决于配置的MQC策略器操作和平台支持。 |
注意:虽然策略不会应用缓冲区,但配置的排队机制适用于需要排队的已配置数据包,同时这些数据包等待在物理接口上序列化。
整形和管制之间的一个主要区别在于补充令牌的速率。整形和管制都使用令牌桶。令牌桶本身没有丢弃或优先级策略。
具有令牌桶功能:
以一定速率将令牌添加到令牌桶中。
每个令牌允许源向网络发送一定数量的比特。
要发送数据包,流量管制器必须能够从令牌桶中删除与所代表的数据包大小相等的若干令牌。
如果令牌桶中没有足够的令牌来发送数据包,会等到令牌桶中有足够的令牌(对于整形器)再发送数据包,或者丢弃或标记数据包(对于管制器)。
桶本身具有指定的容量。如果令牌桶容量已满,则会丢弃新到达的令牌,后续数据包将无法使用令牌。因此,在任何时刻,源能够发送到网络中的最大突发流量都大致与令牌桶的大小成正比。令牌桶允许突发,但对其进行了限制。
整形以使用比特/秒 (bps) 值的定时间隔递增令牌桶。整形器使用以下公式:
Tc = Bc/CIR (in seconds)
在此等式中:
Bc:承诺突发量。在一个计时间隔内允许发送的流量数量。
CIR:承诺信息速率。整形器或监察器执行的平均流量速率。
Tc:承诺的时间间隔。整形器发送承诺突发同时保持已配置的CIR所用的时间间隔。
Tc 的范围在 10 毫秒到 125 毫秒之间。在某些采用分布式流量整形(DTS)的传统平台中,最小Tc为4毫秒。路由器会基于 CIR 和 Bc 值在内部计算此值。如果 Bc/CIR 少于 125 毫秒,它将使用该等式计算出的 Tc。如果Bc/CIR大于或等于125毫秒,则如果Cisco IOS确定以更小的时间间隔传输的数据流可以更稳定,它将使用内部Tc值。使用 show traffic-shape 命令可确定路由器使用的是内部 Tc 值,还是在命令行中配置的值。
显示流量输出
当超额突发传输(Be)配置为非0值时,成型机则允许令牌存储在桶中,高至Bc+Be。令牌桶可以达到的最大值是 Bc + Be,溢出令牌被丢弃。在桶中具有超过 BC 令牌数的唯一方式是在一个或多个 Tc 期间不要使用所有 BC 令牌。因为令牌桶通过每 Tc 与 BC 令牌被重新补充,您能累计未使用的令牌用于 BC +Be 的最新应用。
相反,基于类的策略和速率限制会根据数据包到达之间经过的时间来补充令牌。当数据包到达时,监察器会计算自上一个数据包以来要添加的令牌数和已配置的监察器速率。具体而言,令牌到达速率的计算如下:
Tokens added = ((t - t1) * policer_rate_bps) / 8 bytes
换句话说,如果数据包以前的到达时间是t1并且当前时间是t,那么根据令牌到达的速率,桶被更新,字节值为 t-t1。
注意:流量管制器使用以字节为单位指定的突发值,而上述公式可用于将比特转换为字节。
以下示例使用 8000 bps 的 CIR(或管制器速率)和 1000 字节的正常突发:
Router(config)#policy-map police-setting Router(config-pmap)#class access-match Router(config-pmap-c)#police 8000 1000 conform-action transmit exceed-action drop
令牌桶容量上限为 1000 字节。如果 450 字节数据包已经到达,那么数据包符合条件,因为这时令牌桶中已经有足够的字节可以使用。数据包执行符合规则的操作(传输),并且从令牌桶中移除 450 个字节(剩余 550 个字节)。 如果下一个数据包在 0.25 秒后到达,则按照下面的公式向令牌桶添加 250 个字节:
(0.25 * 8000)/8
桶开始已满:
第一个数据包到达:
计算:1000 - 450 =剩余550字节
下一个数据包在0.25秒后到达:
(0.25 × 8000)/ 8 = 250字节
刷新后的存储桶:
计算:550 + 250 = 800字节
计算在令牌桶中保留800字节(策略器桶中剩余的令牌)。 如果下一个数据包是 900 个字节,数据包将超出并且将采取超出行动(丢弃)。这时不会从令牌桶中取走任何字节。
Cisco IOS®支持以下流量整形方法:
所有流量整形的实施方法是相似的,虽然他们的命令行接口 (CLI) 有些不同,但是他们使用不同类型的队列,来包含和整形被延迟的数据流。思科建议使用模块化 QoS CLI 配置基于类的整形和分布式整形。
下图展示了 QoS 策略如何对流量进行分类,并对超过已配置的整形速率的数据包进行排队。

Cisco IOS 支持以下流量管制方法:
这两个机制具有重要的功能差异,如如何配置基于类的策略中所述。思科建议,在应用 QoS 策略时,使用基于类的管制以及模块化 QoS CLI 的其他功能。
使用 police 命令可指定必须对一个流量类强制应用的最大速率,如果超过该速率,则必须立即采取行动。换句话说,在 police 命令下,不能选择缓冲数据包后将其发出,而 shape 命令则可以这样做。
另外在使用警管的情况下,令牌桶将确定数据包是否超出或是否与应用的速率一致。在任一情况下,流量管制都会执行可配置的操作,包括 IP 优先级或差分服务代码点 (DSCP)。
下图展示了流量管制在拥塞点的常见应用,其中通常会应用 QoS 功能。

shape和police命令将流量限制为配置的最大速率。在MQC中,除非平台特定语法另有说明,否则为shape average和police配置的速率以bps为单位指定。重要的是,这两种机制在拥塞期间都不会提供最低带宽保证。可以使用 bandwidth 或 priority 命令提供这种保证。
分级策略使用两个服务策略:一个是父策略,用于将 QoS 机制应用于流量汇聚;另一个是子策略,用于将 QoS 机制应用于流量汇聚的一个数据流或子集。子接口和隧道接口等逻辑接口需要使用分级策略,在父级别应用流量功能,在较低级别应用排队功能。limiting流量功能会降低输出速率并(可能)造成拥塞,这可以从对额外数据包进行看出来。limitingqueuing
下面的配置为次优配置,展示此配置是为了说明将流量汇聚(本例中为默认类 )为最大速率时 police 命令与 shape 命令的区别。limiting在该配置中,police 命令根据数据包的大小以及符合和超出令牌桶中剩余的字节数从子类发送数据包。(请参阅流量策略。) 由此导致的后果是,IP 语音 (VoIP) 和互联网协议 (IP) 类的速率无法得到保证,因为流量管制功能优先于优先级功能提供的保证。
然而,如果使用 shape 命令,则结果为分层队列系统,并做出所有保证。换句话说,当流入负载超出整形速率的时候,会保证 VoIP 和 IP 类的速率,并且类默认数据流(在子级上)会发生丢包。
class-map match-all IP
match ip precedence 3
class-map match-all VoIP
match ip precedence 5
!
policy-map child
class VoIP
priority 128
class IP
priority 1000
!
policy-map parent
class class-default
police 3300000 103000 103000 conform-action transmit exceed-action drop
service-policy child
要使上面的配置合理可行,必须将管制替换为整形。例如:
policy-map parent
class class-default
shape average 3300000 103000 0
service-policy child
使用show policy-map interface <interface>验证配置的策略、类计数器、提供的速率、丢弃计数器、整形速率、队列深度和监察器符合/超出/违反计数器。
Router#show policy-map interface gigabitEthernet 0/0/2
GigabitEthernet0/0/2
Service-policy output: parent
Class-map: class-default (match-any)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: any
Queueing
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
shape (average) cir 3300000, bc 103000, be 0 target shape rate 3300000
Service-policy : child
queue stats for all priority classes:
Queueing
queue limit 512 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
Class-map: VoIP (match-all)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: ip precedence 5
Priority: 128 kbps, burst bytes 3200, b/w exceed drops: 0
Class-map: IP (match-all)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: ip precedence 3
Priority: 1000 kbps, burst bytes 25000, b/w exceed drops: 0
Class-map: class-default (match-any)
0 packets, 0 bytes
5 minute offered rate 0000 bps, drop rate 0000 bps
Match: any
queue limit 64 packets
(queue depth/total drops/no-buffer drops) 0/0/0
(pkts output/bytes output) 0/0
上面的示例有意地处于次优状态,提供此示例只是为了说明分层QoS策略中的策略和整形之间的差异。在推荐的QoS设计中,priority命令通常保留用于实时延迟敏感型流量(如语音)。需要最小带宽保证的非实时类通常使用bandwfq命令。
此方法与LLQ和CBWFQ的思科QoS设计指南保持一致。LLQ为延迟敏感型流量提供严格的优先级处理,而CBWFQ在拥塞期间为其他流量类别提供带宽保证。因此,本示例中的IP类更好地用带宽而不是优先级来表示,除非该类传输明确需要严格优先级处理的流量。
policy-map child
class VoIP
priority 128
class IP
bandwidth 1000
| 版本 | 发布日期 | 备注 |
|---|---|---|
6.0 |
21-Jul-2026
|
重新认证。 |
4.0 |
07-Sep-2023
|
更新的品牌要求、SEO、语法和格式。 |
3.0 |
26-Sep-2022
|
重新认证 |
1.0 |
15-Feb-2002
|
初始版本 |