第129篇:园区网 QoS 基础:队列调度与拥塞管理

关键词:QoS、队列调度、拥塞管理、PQ、WRR、WFQ、FIFO、拥塞避免、RED、WRED、DiffServ


一、引言

在园区网中,不同类型的业务对网络有着截然不同的要求:语音通话需要低延迟(< 150ms),视频会议需要低抖动(< 30ms),在线游戏需要低延迟和稳定带宽,而文件传输则需要高吞吐量但对延迟不敏感。

当网络拥塞时,如果没有 QoS(Quality of Service,服务质量)机制,所有业务平等竞争带宽——大文件传输会占满出口带宽,导致语音断续、视频卡顿。QoS 通过队列调度、流量整形、流量监管等机制,为不同业务提供差异化的服务等级。

二、核心概念

2.1 QoS 服务模型

模型 说明 适用场景
Best Effort(尽力而为) 无差异化,所有报文平等对待 普通互联网
IntServ(集成服务) 每流保证,需要 RSVP 信令建立预留 军事/科研网络(极少使用)
DiffServ(差异化服务) 基于 DSCP 粗粒度分类,逐跳行为 企业园区网(✅ 推荐)

DiffServ 是目前最广泛使用的 QoS 模型。它在 IP 报文头部的 ToS 字节中使用 6 bit 的 DSCP(Differentiated Services Code Point)字段标记业务优先级,路由器根据 DSCP 值对报文进行不同的处理。

2.2 QoS 处理机制全景

QoS 处理机制全景 - 图示

处理阶段 位置 说明
流分类(Classification) 入口 识别报文的业务类型(基于 ACL/DSCP/端口等)
流标记(Marking) 入口 根据分类结果设置 DSCP/802.1p 优先级
拥塞避免(Avoidance) 队列满前 主动丢弃低优先级报文(RED/WRED)
拥塞管理(Management) 队列中 决定报文从哪个队列发送(PQ/WRR)
流量监管(Policing) 出口 丢弃或重标记超出速率限制的报文
流量整形(Shaping) 出口 缓存超限报文,平滑输出速率

2.3 队列调度算法

算法 全称 调度策略 特点
FIFO First In First Out 先进先出 最简单,无差异化,拥塞时所有业务平等排队
PQ Priority Queuing(严格优先级) 高优先级队列非空时,不调度低优先级队列 关键业务(语音/视频)零等待,但可能"饿死"低优先级
WRR Weighted Round Robin(加权轮询) 按权重轮询各队列 保证各队列的最低带宽,权重越大发送越多
WFQ Weighted Fair Queuing(加权公平队列) 按权重 + 报文大小公平分配 考虑报文大小,小报文优先
DRRW Deficit Round Robin with Weight 华为优化算法 综合考虑权重和带宽利用率

三、技术细节

3.1 PQ + WRR 混合调度模型

最常见的 QoS 调度模型是将 PQ 和 WRR 结合使用:

PQ + WRR 混合调度模型 - 图示

调度规则:

  1. 如果 PQ 区域(队列 6/7)中有报文,优先发送 PQ 队列
  2. 如果 PQ 区域为空,按 WRR 权重轮询 WRR 区域(队列 0/3/4)
  3. 保证语音/视频零延迟,同时保证其他业务最低带宽

3.2 WRED(加权随机早期检测)

WRED 是一种拥塞避免机制,在队列达到一定长度时主动丢弃低优先级报文,防止 TCP 全局同步:

队列长度阶段 行为 丢弃概率
低于最小阈值 不丢弃 0%
最小阈值 ~ 最大阈值之间 按概率丢弃 0% ~ 100%(随长度递增)
超过最大阈值 尾部丢弃(Tail Drop) 100%

WRED(加权随机早期检测) - 图示

WRED 的丢弃概率还受 DSCP 优先级影响:低优先级(DSCP 0)的报文在更低的队列长度就开始被丢弃,高优先级(DSCP 46)的报文允许更大的队列长度。

3.3 DSCP 与 802.1p 映射关系

DSCP 值 PHB 名称 802.1p 业务类型 队列
46 (101110) EF(加速转发) 5/6 语音/实时视频 PQ 队列 7
34 (100010) AF41 4 视频会议控制 PQ 队列 6
26 (011010) AF31 4 关键业务数据 WRR 队列 4
18 (010010) AF21 2 普通业务数据 WRR 队列 3
0 (000000) BE(尽力而为) 0 后台/普通流量 WRR 队列 0

四、实战配置/案例分析

4.1 华为交换机 QoS 完整配置

# ========== 场景:为语音、视频和关键数据配置 QoS ==========
<HUAWEI> system-view
[HUAWEI] sysname Core-SW

# ============================
# 步骤 1:定义流分类(Traffic Classifier)
# ============================

# 语音流量分类(匹配 DSCP EF = 46)
[Core-SW] traffic classifier VOICE operator or
[Core-SW-traf-crs-VOICE] if-match car-dscp ef
[Core-SW-traf-crs-VOICE] quit

# 视频流量分类(匹配 DSCP AF41 = 34)
[Core-SW] traffic classifier VIDEO operator or
[Core-SW-traf-crs-VIDEO] if-match car-dscp af41
[Core-SW-traf-crs-VIDEO] quit

# 关键数据分类(匹配 DSCP AF31 = 26)
[Core-SW] traffic classifier CRITICAL_DATA operator or
[Core-SW-traf-crs-CRITICAL_DATA] if-match car-dscp af31
[Core-SW-traf-crs-CRITICAL_DATA] quit

# 默认流量分类(匹配所有其他流量)
[Core-SW] traffic classifier DEFAULT operator or
[Core-SW-traf-crs-DEFAULT] if-match acl 3001
[Core-SW] acl number 3001
[Core-SW-acl-adv-3001] rule 5 permit ip
[Core-SW-acl-adv-3001] quit

# ============================
# 步骤 2:定义流行为(Traffic Behavior)
# ============================

# 语音行为:映射到 WRR 权重最高的队列
[Core-SW] traffic behavior VOICE-BEH
[Core-SW-traf-beh-VOICE-BEH] queue wrr weight 100
# 权重 100,最高优先级
[Core-SW-traf-beh-VOICE-BEH] quit

# 视频行为
[Core-SW] traffic behavior VIDEO-BEH
[Core-SW-traf-beh-VIDEO-BEH] queue wrr weight 80
[Core-SW-traf-beh-VIDEO-BEH] quit

# 关键数据行为
[Core-SW] traffic behavior CRITICAL-BEH
[Core-SW-traf-beh-CRITICAL-BEH] queue wrr weight 40
[Core-SW-traf-beh-CRITICAL-BEH] quit

# 默认行为
[Core-SW] traffic behavior DEFAULT-BEH
[Core-SW-traf-beh-DEFAULT-BEH] queue wrr weight 10
[Core-SW-traf-beh-DEFAULT-BEH] quit

# ============================
# 步骤 3:定义流策略(Traffic Policy)
# ============================

[Core-SW] traffic policy QOS-CORE-POLICY
[Core-SW-trafficpolicy-QOS-CORE-POLICY] classifier VOICE behavior VOICE-BEH
[Core-SW-trafficpolicy-QOS-CORE-POLICY] classifier VIDEO behavior VIDEO-BEH
[Core-SW-trafficpolicy-QOS-CORE-POLICY] classifier CRITICAL_DATA behavior CRITICAL-BEH
[Core-SW-trafficpolicy-QOS-CORE-POLICY] classifier DEFAULT behavior DEFAULT-BEH
[Core-SW-trafficpolicy-QOS-CORE-POLICY] quit

# ============================
# 步骤 4:在接口应用流策略
# ============================

# 在出方向应用 QoS 策略(队列调度在出口生效)
[Core-SW] interface GigabitEthernet 1/0/1
[Core-SW-GigabitEthernet1/0/1] traffic-policy QOS-CORE-POLICY outbound
[Core-SW-GigabitEthernet1/0/1] quit

[Core-SW] interface GigabitEthernet 1/0/2
[Core-SW-GigabitEthernet1/0/2] traffic-policy QOS-CORE-POLICY outbound

# ========== 验证 ==========
[Core-SW] display traffic policy applied-interface GigabitEthernet 1/0/1 outbound
# 查看接口应用的 QoS 策略
[Core-SW] display qos queue statistics interface GigabitEthernet 1/0/1
# 查看队列统计信息

4.2 配置 WRED 拥塞避免

# ========== 配置 WRED ==========

# 在流行为中启用 WRED
[Core-SW] traffic behavior DEFAULT-BEH
[Core-SW-traf-beh-DEFAULT-BEH] wred dscp 0 queue 0 min-threshold 30 max-threshold 70
# 对 DSCP 0(BE)报文,队列 0,最小阈值 30%,最大阈值 70%

[Core-SW-traf-beh-DEFAULT-BEH] wred dscp 26 queue 4 min-threshold 40 max-threshold 80
# 对 DSCP 26(AF31)报文,队列 4,最小阈值 40%,最大阈值 80%
[Core-SW-traf-beh-DEFAULT-BEH] quit

# WRED 效果:
# - 队列长度 < 30%:不丢弃任何报文
# - 队列长度 30%~70%:对 DSCP 0 报文按概率丢弃
# - 队列长度 40%~80%:对 DSCP 26 报文按概率丢弃
# - 队列长度 > 70%:DSCP 0 报文 100% 丢弃
# - 队列长度 > 80%:DSCP 26 报文 100% 丢弃
# 低优先级报文更早被丢弃,保护高优先级报文

4.3 故障案例:视频会议卡顿,带宽利用率却不高

场景描述

某园区网部署了视频会议系统,但用户经常反映视频会议出现卡顿和丢帧。奇怪的是,网络监控显示出口带宽利用率只有 40%。

排查过程

# 步骤 1:检查 QoS 配置
[Core-SW] display traffic policy applied-interface GigabitEthernet 1/0/1 outbound
# 发现:QoS 策略存在,但视频流量(DSCP 46)被映射到了队列 0(BE)
# 而非高优先级队列

# 步骤 2:检查队列统计
[Core-SW] display qos queue statistics interface GigabitEthernet 1/0/1
# Queue 0 (BE): 利用率 85%(大量文件传输占用)
# Queue 7 (EF): 利用率 5%(语音/视频)
# 但视频流量实际上被放入了 Queue 0,而非 Queue 7

# 步骤 3:检查流分类匹配
[Core-SW] display traffic classifier VOICE
# 分类器匹配的是 DSCP EF(46)
# 但视频会议使用的 DSCP 是 AF41(34),而非 EF

# 步骤 4:检查视频流量的 DSCP 标记
# 通过抓包发现视频会议报文的 DSCP = 0(未标记)

根因分析

视频会议终端(如华为 eSpace Conference)发送的报文没有设置 DSCP 标记,DSCP = 0,被归类为"尽力而为"流量,放入低优先级队列。大文件传输同样 DSCP = 0,在低优先级队列中竞争带宽,导致视频卡顿。

处理

# 方案一:在视频终端上配置 DSCP 标记(源头解决)
# 在 eSpace Conference 客户端设置 QoS 标记为 AF41

# 方案二:在入口交换机上重标记(网络侧解决)
# 基于视频流量特征(如目的端口范围 16384~32767)重新标记 DSCP

[Core-SW] traffic classifier VIDEO-PORT operator or
[Core-SW-traf-crs-VIDEO-PORT] if-match acl 3010
[Core-SW] acl number 3010
[Core-SW-acl-adv-3010] rule 5 permit tcp destination-port range 16384 32767
[Core-SW-acl-adv-3010] quit

[Core-SW] traffic behavior VIDEO-MARK
[Core-SW-traf-beh-VIDEO-MARK] remark car-dscp af41
# 将匹配的视频流量重新标记为 AF41
[Core-SW-traf-beh-VIDEO-MARK] quit

[Core-SW] traffic policy VIDEO-MARK-POLICY
[Core-SW-trafficpolicy-VIDEO-MARK-POLICY] classifier VIDEO-PORT behavior VIDEO-MARK
[Core-SW-trafficpolicy-VIDEO-MARK-POLICY] quit

# 在接入端口入方向应用重标记策略
[Core-SW] interface GigabitEthernet 0/0/1
[Core-SW-GigabitEthernet0/0/1] traffic-policy VIDEO-MARK-POLICY inbound

五、总结

项目 说明
DiffServ 基于 DSCP 的差异化服务模型,企业网推荐
PQ 严格优先级,关键业务(语音/视频控制)使用
WRR 加权轮询,保证各队列最低带宽
PQ + WRR 混合 PQ 优先发送,PQ 为空时 WRR 轮询
WRED 主动丢弃低优先级报文,防止 TCP 全局同步
配置模型 流分类 → 流行为 → 流策略 → 接口应用
华为实现 traffic classifier → traffic behavior → traffic policy
注意 队列调度在出口方向生效,标记在入口方向生效

思考

  1. PQ 严格优先级调度可能导致低优先级队列"饿死"(当高优先级队列持续非空时)。在什么场景下这个问题最严重?如何通过 WRR 权重配比来缓解?

  2. WRED 的丢弃概率随队列长度递增。如果所有报文都是 TCP 报文,WRED 能否有效避免拥塞?如果大量报文是 UDP(如视频流),WRED 还有效吗?

  3. DSCP 标记在 IP 报文头部,802.1p 在 VLAN 标签中。当报文从二层 VLAN 进入三层网络时,802.1p 到 DSCP 的映射关系如何保证一致性?

下篇预告:第130篇:流量限速:CAR(Committed Access Rate)