第130篇:流量限速:CAR(Committed Access Rate)
关键词:CAR、Committed Access Rate、流量限速、令牌桶、单速率双桶、双速率双桶、Policing、华为 QoS
一、引言
第129篇介绍了 QoS 的队列调度和拥塞管理,解决了"拥塞发生时如何让关键业务优先"的问题。但在拥塞发生之前,对进入网络的流量进行限速(Policing)同样重要。
CAR(Committed Access Rate,承诺访问速率)是华为设备上最常用的流量限速机制。它基于令牌桶算法,精确控制通过端口的流量速率。CAR 可以用于限制用户上网带宽、防止某个应用占用过多带宽、或在网络边界执行服务等级协议(SLA)中的速率承诺。
二、核心概念
2.1 令牌桶算法
CAR 的核心是令牌桶(Token Bucket)算法。令牌以固定速率(CIR)放入桶中,报文到达时需要消耗令牌才能通过。如果桶中没有足够令牌,报文被丢弃或重标记。

| 参数 | 说明 | 单位 |
|---|---|---|
| CIR(Committed Information Rate) | 承诺信息速率,令牌填充速率 | kbps / Mbps |
| Bc(Committed Burst Size) | 承诺突发尺寸,主桶容量 | kbit / Mbit |
| PIR(Peak Information Rate) | 峰值信息速率(双速率模式) | kbps / Mbps |
| Be(Excess Burst Size) | 超额突发尺寸,副桶容量 | kbit / Mbit |
2.2 CAR 模式对比
| 模式 | 桶数 | 速率 | 颜色标记 | 适用场景 |
|---|---|---|---|---|
| 单速率单桶(sr1tc) | 1 桶 | 1 个(CIR) | 绿/红 | 简单限速,超过 CIR 即丢弃 |
| 单速率双桶(sr2tc) | 2 桶 | 1 个(CIR) | 绿/黄/红 | 精确限速,允许小突发,超限重标记 |
| 双速率双桶(tr2tc) | 2 桶 | 2 个(CIR + PIR) | 绿/黄/红 | 分级限速,双等级处理 |
2.3 颜色标记含义
| 颜色 | 含义 | 对应动作 |
|---|---|---|
| 绿色(Green) | 在承诺速率以内 | 允许通过(Permit) |
| 黄色(Yellow) | 超出承诺速率但在峰值速率以内 | 重标记(Remark,降低优先级) |
| 红色(Red) | 超出峰值速率 | 丢弃(Drop) |
三、技术细节
3.1 单速率双桶(sr2tc)工作流程

- 主桶有令牌 → 报文通过,标记为绿色(正常优先级)
- 主桶无令牌、副桶有令牌 → 报文通过但重标记(降低 DSCP),标记为黄色
- 两个桶都无令牌 → 报文丢弃,标记为红色
3.2 双速率双桶(tr2tc)工作流程
| 桶 | 填充速率 | 容量 | 匹配动作 |
|---|---|---|---|
| C 桶(承诺桶) | CIR | Bc | 有令牌 → 绿色(Permit,保持原优先级) |
| P 桶(峰值桶) | PIR | Be | 有令牌 → 黄色(Remark,降低优先级) |
| 都无令牌 | - | - | 红色(Drop,丢弃) |
双速率模式允许两个不同等级的速率: - CIR:承诺速率,在此速率内的报文完全正常通过 - PIR:峰值速率,在 CIR 和 PIR 之间的报文通过但降低优先级 - 超过 PIR 的报文被丢弃
3.3 流量限速(Policing)vs 流量整形(Shaping)
| 特性 | 限速 Policing / CAR | 整形 Shaping |
|---|---|---|
| 处理方式 | 直接丢弃超限报文 | 缓存超限报文,延迟发送 |
| 延迟影响 | 无额外延迟 | 引入排队延迟(可能影响实时业务) |
| 突发处理 | 允许小突发(Bc/Be) | 平滑输出速率 |
| 适用位置 | 入口(Inbound),限制进入网络的流量 | 出口(Outbound),平滑离开网络的流量 |
| 资源消耗 | 低(只需令牌桶计数器) | 高(需要缓冲区存储排队报文) |
| 典型场景 | 用户带宽限制、SLA 执行 | 对接不同速率的链路 |
3.4 Bc(突发尺寸)的计算
Bc 决定了令牌桶的容量,影响对突发流量的容忍度:
| 突发尺寸 Bc | 允许的突发时间 | 说明 |
|---|---|---|
| Bc = CIR × 0.1 秒 | 0.1 秒突发 | 严格限制,适合持续流 |
| Bc = CIR × 1 秒 | 1 秒突发 | 默认值,适合一般业务 |
| Bc = CIR × 5 秒 | 5 秒突发 | 宽松限制,适合大文件传输 |
示例:CIR = 10 Mbps,Bc = 10 Mbit(1 秒突发) - 正常速率:每秒通过 10 Mbps - 突发情况:可以在短时间内通过 10 Mbit 的数据,然后恢复
四、实战配置/案例分析
4.1 单速率双桶 CAR 限速配置
# ========== 场景:限制某个 VLAN 的用户上网带宽为 10 Mbps ==========
<HUAWEI> system-view
[HUAWEI] sysname Access-SW
# ============================
# 步骤 1:定义 ACL(匹配用户流量)
# ============================
[HUAWEI] acl number 3000
[HUAWEI-acl-adv-3000] rule 5 permit ip source 10.10.10.0 0.0.0.255 destination any
# 匹配 VLAN 10(10.10.10.0/24)的所有 IP 流量
[HUAWEI-acl-adv-3000] quit
# ============================
# 步骤 2:定义流分类
# ============================
[HUAWEI] traffic classifier USER-VLAN10 operator or
[HUAWEI-traf-crs-USER-VLAN10] if-match acl 3000
[HUAWEI-traf-crs-USER-VLAN10] quit
# ============================
# 步骤 3:定义流行为(CAR 限速)
# ============================
[HUAWEI] traffic behavior LIMIT-10M
# 单速率双桶模式
[HUAWEI-traf-beh-LIMIT-10M] car cir 10240 cbr 10240 pir 20480 pir-burst 20480
# CIR = 10240 kbps(10 Mbps)
# CBR = 10240 kbit(Bc,主桶容量 = 1 秒突发)
# PIR = 20480 kbps(20 Mbps,峰值速率)
# PIR-BURST = 20480 kbit(Be,副桶容量)
# 定义三色动作
[HUAWEI-traf-beh-LIMIT-10M] car action cir green permit
# 绿色(≤ CIR):允许通过,保持原优先级
[HUAWEI-traf-beh-LIMIT-10M] car action pir yellow remark dscp cs1
# 黄色(CIR < 速率 ≤ PIR):通过但将 DSCP 降为 CS1(最低优先级)
[HUAWEI-traf-beh-LIMIT-10M] car action red drop
# 红色(> PIR):直接丢弃
[HUAWEI-traf-beh-LIMIT-10M] quit
# ============================
# 步骤 4:定义流策略
# ============================
[HUAWEI] traffic policy LIMIT-VLAN10-POLICY
[HUAWEI-trafficpolicy-LIMIT-VLAN10-POLICY] classifier USER-VLAN10 behavior LIMIT-10M
[HUAWEI-trafficpolicy-LIMIT-VLAN10-POLICY] quit
# ============================
# 步骤 5:在接口应用(入方向)
# ============================
[Access-SW] interface GigabitEthernet 0/0/1
[Access-SW-GigabitEthernet0/0/1] traffic-policy LIMIT-VLAN10-POLICY inbound
# CAR 限速在入方向生效
# ========== 验证 ==========
[Access-SW] display traffic policy statistics interface GigabitEthernet 0/0/1 inbound
# 查看 CAR 统计:
# Classifier : USER-VLAN10
# Green packets : 125000(在 CIR 以内的包数)
# Green bytes : 125000000
# Yellow packets : 15000(在 CIR 和 PIR 之间的包数,已重标记)
# Yellow bytes : 7500000
# Red packets : 2500(超过 PIR 被丢弃的包数)
# Red bytes : 500000
4.2 双速率双桶 CAR 配置
# ========== 场景:SLA 分级限速 ==========
# 承诺速率 50 Mbps,峰值速率 100 Mbps
[HUAWEI] traffic behavior SLA-LIMIT
# 双速率双桶模式
[HUAWEI-traf-beh-SLA-LIMIT] car cir 51200 cbr 51200 pir 102400 pir-burst 102400
# CIR = 50 Mbps(承诺速率)
# PIR = 100 Mbps(峰值速率)
[HUAWEI-traf-beh-SLA-LIMIT] car action cir green permit
# ≤ 50 Mbps:正常通过
[HUAWEI-traf-beh-SLA-LIMIT] car action pir yellow remark dscp cs1
# 50~100 Mbps:通过但降低优先级
[HUAWEI-traf-beh-SLA-LIMIT] car action red drop
# > 100 Mbps:丢弃
[HUAWEI-traf-beh-SLA-LIMIT] quit
4.3 故障案例:CAR 限速导致 VoIP 质量下降
场景描述
为控制用户上网带宽,运维人员在接入端口配置了 5 Mbps 的 CAR 限速。但配置后,用户报告 VoIP 电话出现断续和杂音,视频会议画面卡顿。
排查过程
# 步骤 1:检查 CAR 统计
[Access-SW] display traffic policy statistics interface GigabitEthernet 0/0/1 inbound
# Classifier : USER-VLAN10
# Green packets : 45000
# Yellow packets : 35000(大量报文被重标记)
# Red packets : 5000(部分报文被丢弃)
# 问题:所有流量(包括 VoIP)都被限速影响
# 步骤 2:分析 VoIP 流量特征
# VoIP 流量:DSCP EF(46),端口范围 16384~32767(RTP)
# 当前 ACL 3000 匹配了所有 IP 流量,没有排除 VoIP
根因
CAR 限速策略匹配了"所有 IP 流量",没有将 VoIP 流量排除在外。VoIP 报文(通常 64 字节 × 50 次/秒 = 32 kbps/路)虽然单路流量很小,但多路并发加上其他流量后,总流量超过了 CIR,VoIP 报文被重标记或丢弃。
处理
# 方案一:ACL 排除 VoIP 流量
[HUAWEI] acl number 3000
[HUAWEI-acl-adv-3000] rule 5 deny ip dscp ef
# 排除 DSCP EF(语音)流量
[HUAWEI-acl-adv-3000] rule 10 deny ip dscp af41
# 排除 DSCP AF41(视频控制)流量
[HUAWEI-acl-adv-3000] rule 15 permit ip source 10.10.10.0 0.0.0.255 destination any
# 其余流量限速
# 方案二:分层限速策略
# 第一层:VoIP 不限速
[HUAWEI] traffic classifier VOICE operator or
[HUAWEI-traf-crs-VOICE] if-match car-dscp ef
[HUAWEI] traffic behavior VOICE-PASS
[HUAWEI-traf-beh-VOICE-PASS] permit
[HUAWEI] traffic policy COMBINED-POLICY
[HUAWEI-trafficpolicy-COMBINED-POLICY] classifier VOICE behavior VOICE-PASH
[HUAWEI-trafficpolicy-COMBINED-POLICY] classifier USER-VLAN10 behavior LIMIT-10M
# 策略顺序:先匹配 VoIP(允许通过),再匹配普通用户流量(限速)
4.4 故障案例:Bc 设置过小导致正常流量被限速
场景描述
某文件服务器 VLAN 配置了 100 Mbps 的 CAR 限速,但用户反馈大文件下载速度只有 20 Mbps 左右,远低于限制的 100 Mbps。
排查
# 检查 CAR 配置
[Access-SW] display current-configuration | include car
# car cir 102400 cbr 1024 pir 204800 pir-burst 2048
# 问题:CIR = 100 Mbps,但 CBR(Bc)= 1024 kbit = 1 Mbit
# Bc 只有 CIR 的 1/100,即仅允许 0.01 秒的突发
# 分析:
# TCP 窗口大小通常为 64 KB ~ 1 MB
# 当 TCP 发送一个 64 KB 的数据块时,需要 512 kbit 的令牌
# 但 Bc 只有 1024 kbit,且大部分令牌已被之前的报文消耗
# TCP 发送大量数据后,令牌桶快速耗尽,后续报文被丢弃
# TCP 重传导致有效吞吐量大幅下降
根因
Bc(突发尺寸)设置过小。虽然 CIR = 100 Mbps,但 Bc 仅 1 Mbit,无法容纳 TCP 的大窗口突发。当 TCP 快速发送数据时,令牌桶立即耗尽,后续报文被丢弃,触发 TCP 重传和拥塞控制,有效吞吐量远低于 CIR。
处理
# 增大 Bc(推荐 Bc = CIR × 1 秒)
[HUAWEI] traffic behavior LIMIT-100M
[HUAWEI-traf-beh-LIMIT-100M] car cir 102400 cbr 102400 pir 204800 pir-burst 204800
# CBR = 102400 kbit = 100 Mbit = CIR × 1 秒
# 允许 1 秒的突发,TCP 窗口可以正常工作
五、总结
| 项目 | 说明 |
|---|---|
| CAR 本质 | 基于令牌桶的流量限速机制 |
| 单速率双桶 | 一个速率(CIR),允许小突发,超限重标记或丢弃 |
| 双速率双桶 | 两个速率(CIR + PIR),分级处理 |
| 三色标记 | 绿色(通过)、黄色(重标记)、红色(丢弃) |
| Bc 设置 | Bc = CIR × 突发时间,过大无法限制,过小影响正常业务 |
| 限速 vs 整形 | 限速丢弃(入口,无延迟),整形缓存(出口,有延迟) |
| 华为实现 | traffic behavior + car cir/cbr/pir + car action |
| 注意 | 限速不应影响关键业务(VoIP/视频),需在 ACL 中排除 |
思考
-
令牌桶的 Bc(突发尺寸)应该设置多大?如果 Bc 设置等于 CIR(即 1 秒突发),意味着什么?如果设置为 CIR 的 10 倍,是否就失去了限速的意义?
-
单速率双桶模式中,超过 CIR 但在 PIR 以内的报文被重标记为黄色(降低 DSCP)。如果下游设备不识别 DSCP 标记(如普通路由器不处理 QoS),重标记还有实际意义吗?
-
CAR 限速策略在 ACL 中排除 VoIP 流量(
deny ip dscp ef)。但如果终端发送的 VoIP 流量没有正确标记 DSCP,这个排除规则还有效吗?如何确保 VoIP 流量始终不被限速?
下篇预告:第131篇:重标记优先级:基于报文类型的 QoS 策略