第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)工作流程

单速率双桶(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 中排除

思考

  1. 令牌桶的 Bc(突发尺寸)应该设置多大?如果 Bc 设置等于 CIR(即 1 秒突发),意味着什么?如果设置为 CIR 的 10 倍,是否就失去了限速的意义?

  2. 单速率双桶模式中,超过 CIR 但在 PIR 以内的报文被重标记为黄色(降低 DSCP)。如果下游设备不识别 DSCP 标记(如普通路由器不处理 QoS),重标记还有实际意义吗?

  3. CAR 限速策略在 ACL 中排除 VoIP 流量(deny ip dscp ef)。但如果终端发送的 VoIP 流量没有正确标记 DSCP,这个排除规则还有效吗?如何确保 VoIP 流量始终不被限速?

下篇预告:第131篇:重标记优先级:基于报文类型的 QoS 策略