police 是 Cisco IOS 中一个非常核心和强大的流量监管工具,它属于 QoS (Quality of Service) 策略的一部分,其主要功能是对流量进行速率限制,确保流量不超过配置的承诺速率,并对超出部分的流量进行丢弃或降级处理。

(图片来源网络,侵删)
核心概念:令牌桶算法
要理解 police 命令,首先要理解它所使用的令牌桶算法,这个模型可以形象地比喻成一个带漏水的桶:
- 桶:代表一个缓冲区,里面存放着“令牌”。
- 令牌生成:以一个固定的速率(
committed information rate, CIR)向桶中添加令牌,如果 CIR 是 1 Mbps,那么每秒钟就会有 1 Mbps 的令牌被加入到桶中。 - 流量处理:
- 当一个数据包到达时,会检查桶中是否有足够的令牌。
- 有足够令牌:从桶中取出与数据包大小相等的令牌,数据包被转发,这属于 conforming (符合) 流量。
- 没有足够令牌:无法从桶中取出足够的令牌,数据包被丢弃或被标记后转发,这属于 exceeding (超出) 流量。
- 桶的容量:桶本身有一个最大容量(
committed burst size, CBS),这允许在短时间内以高于 CIR 的速率发送数据,如果 CIR 是 1 Mbps,CBS 是 10 Kbit,你可以瞬间发送一个 10 Kbit 的数据包,即使这瞬间速率远高于 1 Mbps,之后,你需要等待桶重新装满令牌才能再次发送大流量。
police 命令就是通过配置这个“桶”的生成速率和容量,来精确控制流量的行为。
police 命令的基本语法
police 命令通常在 QoS 策略映射类中配置,其基本语法如下:
police [cir] [bc] [be] [action]
更常用和推荐的语法是:

(图片来源网络,侵删)
police cir bc be conform-action exceed-action violate-action
主要参数详解
流量速率参数
| 参数 | 全称 | 描述 | 单位 | 示例 |
|---|---|---|---|---|
cir |
Committed Information Rate | 承诺信息速率,这是网络承诺为该类流量提供的平均速率。 | bps (bits per second) | police 1000000 (1 Mbps) |
bc |
Committed Burst Size | 承诺突发尺寸,桶的容量,允许在短时间内以高于 CIR 的速率发送的流量大小。 | bits | police 1000000 10000 (bc=10 Kbits) |
be |
Excess Burst Size | 超出突发尺寸,这是可选参数,用于定义第二个桶的容量,用于处理更长时间的突发流量,如果未指定,通常默认等于 bc。 |
bits | police 1000000 10000 20000 (be=20 Kbits) |
如何计算 bc?
一个常用的经验法则是 bc = CIR / 8 * 1.5 (单位是字节) 或 bc = CIR * 0.125 * 1.5 (单位是比特),这提供了一个合理的突发缓冲。
动作参数
这些参数定义了当数据包属于不同类别时(符合、超出、违反)应该执行什么操作。
| 动作 | 描述 | 常用值 |
|---|---|---|
conform-action |
对符合速率的数据包执行的操作。 | transmit (转发) |
exceed-action |
对超出速率但未违反速率的数据包执行的操作。 | drop (丢弃), set-transmit (标记后转发), set-clp-transmit (用于ATM) |
violate-action |
对违反速率的数据包执行的操作,如果配置了 be 参数,流量在 be 范围内属于 exceed,超出 be 的部分属于 violate,如果未配置 be,则 exceed 和 violate 的行为通常相同。 |
drop (丢弃), set-transmit (标记后转发) |
常用动作关键字:
transmit: 转发数据包。drop: 丢弃数据包。set-dscp-transmit new_dscp: 修改数据包的 DSCP 值,然后转发。set-prec-transmit new_precedence: 修改数据包的 IP Precedence 值,然后转发。
配置示例
假设我们有一个场景:公司希望限制来自 168.1.0/24 网段的 HTTP 流量,其下载速率不得超过 2 Mbps,超出的部分直接丢弃。

(图片来源网络,侵删)
步骤 1: 定义访问控制列表
我们需要识别出要监管的流量。
! 定义一个标准 ACL 来匹配源网段 access-list 101 permit ip 192.168.1.0 0.0.0.255 any ! 定义一个扩展 ACL 来精确匹配 HTTP 流量 (TCP 端口 80) access-list 102 permit tcp 192.168.1.0 0.0.0.255 any eq www
注意: 在实际 QoS 策略中,推荐使用更精确的扩展 ACL。
步骤 2: 创建 QoS 策略映射
! 创建一个名为 "LIMIT_HTTP_POLICY" 的策略 policy-map LIMIT_HTTP_POLICY ! 进入一个名为 "HTTP_CLASS" 的类 class HTTP_CLASS ! 应用 police 命令 ! CIR = 2 Mbps = 2000000 bps ! BC = CIR / 8 * 1.5 = 2000000 / 8 * 1.5 = 375000 bytes (3000000 bits) ! 符合的流量 (速率 <= 2Mbps) 转发 ! 超出的流量 (速率 > 2Mbps) 丢弃 police 2000000 3000000 conform-action transmit exceed-action drop
步骤 3: 将策略应用到接口
假设我们要在连接到内部网络的接口 GigabitEthernet0/1 上应用此策略。
! 进入接口配置模式 interface GigabitEthernet0/1 ! 启用 QoS service-policy input LIMIT_HTTP_POLICY
完整配置示例:
! --- 步骤 1: 定义 ACL ---
ip access-list extended HTTP_TRAFFIC
permit tcp 192.168.1.0 0.0.0.255 any eq www
! --- 步骤 2: 创建策略 ---
policy-map LIMIT_HTTP_POLICY
class class-default
! 默认类,可以留空或处理其他流量
class HTTP_TRAFFIC
police 2000000 3000000
conform-action transmit
exceed-action drop
! --- 步骤 3: 应用策略 ---
interface GigabitEthernet0/1
service-policy input LIMIT_HTTP_POLICY
监控和排错
配置完成后,你需要验证策略是否按预期工作。
show policy-map interface
这是最常用的命令,用于查看接口上应用的 QoS 策略的实时统计信息。
Router# show policy-map interface GigabitEthernet0/1
GigabitEthernet0/1
Service-policy input: LIMIT_HTTP_POLICY
Class-map: HTTP_TRAFFIC (match-all)
0 packets, 0 bytes
30 second offered rate 0 bps, drop rate 0 bps
Match: ip address (access-lists)
police:
cir 2000000 bps, bc 3000000 bytes
conform 0 exceed 0 violate 0
conformed 0 bps, 0 packets
exceeded 0 bps, 0 packets
violated 0 bps, 0 packets
conformed 0 bps, exceed 0 bps, violate 0 bps
conformed 0 packets, exceed 0 packets, violate 0 packets
Class-map: class-default (match-any)
...
conform: 符合速率的数据包数量。exceed: 超出速率的数据包数量(这里被丢弃了,所以是0)。violate: 违反速率的数据包数量。
show access-lists
可以查看 ACL 的匹配次数,间接判断流量是否被正确分类。
Router# show access-lists
Extended IP access list HTTP_TRAFFIC
10 permit tcp 192.168.1.0 0.0.0.255 any eq www (2 matches)
高级用法:police vs shape
police 和 shape 都是 QoS 流量控制工具,但它们有本质区别:
| 特性 | police (监管) |
shape (整形) |
|---|---|---|
| 工作方式 | 立即丢弃超出的流量。 | 缓存超出的流量,在空闲时再发送。 |
| 延迟 | 低延迟,因为不缓存数据包。 | 高延迟,因为数据包需要在缓冲区等待。 |
| 缓冲区 | 不需要或需要极小的缓冲区。 | 需要较大的缓冲区来存储突发流量。 |
| 典型应用 | 入口 (Ingress):保护网络免受外部流量冲击。 SLA 合规性检查:确保流量不超过约定速率,否则丢弃。 |
出口 (Egress):使流量以平滑、低于线路速率的速度发送。 保证承诺速率:确保即使在拥塞时,也能以 CIR 速率发送流量。 |
简单记忆:
police:像交警开罚单,当场处罚(丢弃),不留情面,适用于入口。shape:像水管阀门,控制流速(缓存),让水流变得平缓,适用于出口。
希望这份详细的解释能帮助你全面理解和使用 Cisco 的 police 命令!
