QoS 与流量策略
让关键业务在拥塞时仍能获得保障,同时限制非关键流量挤占带宽。本技能覆盖业务分级、DSCP/COS 标记与重写、队列调度(LLQ/CBWFQ)、限速与拥塞管理、双向配置与压测验证,附华为/思科命令与 DSCP 队列映射脚本。
一、核心原理:标记 → 分类 → 调度 → 限速
QoS 是一条流水线,缺一环就失效:
flowchart LR
P[业务流量] --> C[分类 Classification<br/>ACL/DSCP/COS]
C --> M[标记 Marking<br/>边缘打标+重写]
M --> Q[队列调度 Scheduling<br/>LLQ/CBWFQ/WFQ]
Q --> S[限速/整形 Shaping<br/>CAR/policing]
S --> E[出口转发<br/>拥塞时按队列出]
三个关键认知:
- 标记在边缘、调度在骨干:入口设备负责打 DSCP,沿途设备信任并按其调度,全网口径统一。
- 队列调度是核心:默认 FIFO 下任何标记都无效,必须启用 LLQ/CBWFQ 等调度才「真 QoS」。
- QoS 只在拥塞时起作用:带宽富余时 QoS 不做任何事,验证必须靠压测制造拥塞。
二、参考 QoS 架构
flowchart TB
subgraph 边缘接入层
E1[接入交换机<br/>分类+标记 DSCP]
end
subgraph 汇聚/核心层
C1[核心交换机<br/>信任 DSCP+调度]
end
subgraph 出口层
W1[出口路由器<br/>整形+限速]
end
E1 -->|已标记流量| C1 --> W1 --> INET[互联网]
配套 ASCII 标记与调度流程:
语音(VoIP) ──► 标记 EF(46) ──► 队列0(LLQ 优先) ──► 出口优先转发
视频会议 ────► 标记 AF41(34) ► 队列1(CBWFQ 保证) ─► 出口保证带宽
关键业务 ────► 标记 AF31(26) ► 队列2(CBWFQ 保证) ─► 出口保证带宽
普通业务 ────► 标记 BE(0) ───► 队列3(WFQ 尽力) ──► 出口尽力转发
下载/P2P ────► 限速/重标记 ─► 队列4(低优先/限速) ─► 出口限速
三、关键决策表
| 决策项 | 推荐取值 | 依据/常见错误 |
|---|---|---|
| 语音标记 | DSCP EF(46) | 标准值,全网统一 |
| 视频/信令 | DSCP AF41(34)/CS3(24) | 保证转发,低于 EF |
| 关键业务 | DSCP AF31(26)~AF21(18) | 按重要程度分级 |
| 普通业务 | DSCP BE(0) | 尽力转发 |
| 队列调度 | LLQ(语音)+ CBWFQ(关键业务) | 默认 FIFO 下 QoS 失效 |
| LLQ 带宽上限 | 语音 ≤ 总带宽 33%(防饿死其他) | LLQ 优先队列会抢占 |
| 限速对象 | P2P/下载/备份 | 明确要限什么,别一刀切 |
| 标记位置 | 边缘标记 + 骨干信任 | 骨干重标记会破坏一致性 |
| 验证方式 | 压测制造拥塞,看队列计数 | 无拥塞时 QoS 不生效 |
> 常见误区:在未启用队列调度的接口上只配了 DSCP 标记,误以为 QoS 已生效——默认 FIFO 下标记只是「好看」,拥塞时依然先到先出、尾部丢包。判断 QoS 是否真生效的唯一标准:拥塞压测时,高优先级队列丢包率显著低于低优先级队列。
四、分步 SOP
- 业务分级:列出语音/视频/关键业务/普通业务,定优先级顺序与带宽占比。
- 定义标记策略:边缘设备分类打 DSCP,非法标记重写为 BE。
- 设计队列映射:DSCP 映射到队列,高优先级进优先队列。
- 启用调度:关键链路 LLQ + CBWFQ,替代默认 FIFO。
- 配置限速:对 P2P/下载/备份做 policing 或 shaping。
- 双向配置:入口出口都配,不要只配一半。
- 压测验证:打满带宽,观察各队列转发与丢包是否符合设计。
五、真实配置示例
思科 IOS-XE(MQC 模型)
class-map match-any VOICE
match dscp ef
class-map match-any VIDEO
match dscp af41
class-map match-any BULK
match dscp af11
policy-map WAN-EDGE
class VOICE
priority percent 20
class VIDEO
bandwidth percent 30
class BULK
bandwidth percent 10
police 10000000 conform-action transmit exceed-action drop
class class-default
fair-queue
interface GigabitEthernet0/0/0
service-policy output WAN-EDGE
华为 VRP(traffic policy 模型)
# 定义流分类
traffic classifier VOICE operator and
if-match dscp ef
traffic classifier BULK operator and
if-match dscp af11
# 定义流行为
traffic behavior VOICE-BEHAVIOR
queue ef
traffic behavior BULK-BEHAVIOR
car cir 10000 pir 20000 green pass yellow pass red discard
# 绑定策略
traffic policy QOS-POLICY
classifier VOICE behavior VOICE-BEHAVIOR
classifier BULK behavior BULK-BEHAVIOR
interface 10GE1/0/1
traffic-policy QOS-POLICY outbound
华为队列调度(端口队列)
# 接口下配置队列调度(以 8 队列为例)
interface 10GE1/0/1
qos queue 0 wfq
qos queue 1 pq
qos queue 2 wfq weight 15
六、验证方法
| 检查项 | 达标阈值 | 命令 |
|---|---|---|
| 标记正确 | 报文 DSCP 与设计一致 | 抓包看 DSCP 字段 |
| 分类生效 | 流量进入正确 class | show policy-map interface 看命中计数 |
| 队列调度生效 | 队列有转发计数,非全 FIFO | show queue / display qos queue |
| 限速生效 | 限速类速率不超阈值 | 打流看速率曲线 |
| 拥塞验证 | 拥塞时语音优先、丢包在低优先队列 | 压测 + 队列丢弃计数 |
| 双向一致 | 入出方向策略都配置 | 核对两侧配置 |
七、常见故障排查表
| 现象 | 根因方向 | 首要动作 |
|---|---|---|
| QoS 配了没效果 | 默认 FIFO 未启用调度 | 核对队列调度是否启用 |
| 语音仍卡顿 | LLQ 未配或带宽不足 | show policy-map 看优先级队列 |
| 标记被改 | 骨干设备重标记 | 核对信任模式(trust dscp) |
| 限速不准确 | policing 参数/方向错误 | 核对 CIR/PIR 与方向 |
| 队列无计数 | 流量未命中 class | show policy-map interface 查命中 |
| 高优先级饿死其他 | LLQ 带宽占比过高 | 调低 priority percent,≤33% |
八、输出规范
交付时应产出:业务分级表、标记与队列映射表(DSCP→队列)、限速策略表、压测验证记录(各队列转发/丢包)、风险清单(优先级抢占、限速误伤)。
九、边界与风险
- QoS 只在拥塞时生效,富余带宽下看不到效果属正常。
- LLQ 优先队列会抢占带宽,占比过高会饿死其他队列。
- 限速一刀切会误伤正常业务,必须明确限速对象。
- DSCP 取值与队列映射因厂商而异,需按设备核对(本技能脚本可辅助计算)。
配套资源
- DSCP/PHB 参数手册:
references/dscp-phb-parameters.md - 厂商 QoS 配置对照:
references/vendor-qos-configs.md - 数据基线:
assets/dscp-mapping.csv - 限速策略模板:
assets/qos-policy-template.txt - 脚本:
scripts/dscp_queue_mapper.py(DSCP/队列映射计算器) - 配套检查清单:《QoS 与流量策略配置清单》