第198篇:MPLS QoS:EXP 位与隧道优先级

关键词:MPLS QoS、EXP位、DSCP、CoS、PHB、队列调度、流量整形、隧道优先级、QoS标记继承、WRR/PQ


一、引言

在第197篇中,我们为大客户专线设计了 CIR/PIR 限速策略和 WRR 队列调度。但限速只是 QoS(Quality of Service)的一部分——当网络拥塞时,如何决定哪些报文优先通过、哪些报文被丢弃?这就是 MPLS QoS 的核心问题。

MPLS 标签头部中包含一个 3 bit 的 EXP(Experimental)字段,最初设计时称为"实验位",后来被 IETF 重新定义为携带 QoS 标记信息。这 3 bit 可以表示 0-7 共 8 个优先级等级,是 MPLS 网络中实现 DiffServ(区分服务)QoS 的关键机制。


二、MPLS 标签头部与 EXP 位

2.1 MPLS 标签格式

+---------+---------+---------+---------+
|              20 bits        |  3  |  1  |
|           Label             | EXP | S  |
|         (标签值)            |(优先)| Bot |
+---------+---------+---------+---------+
|              8 bits                             |
|            TTL (Time To Live)                   |
+------------------------------------------------+
字段 长度 说明
Label 20 bit 标签值,0-15 为保留标签
EXP 3 bit QoS 实验位,0-7 表示优先级
S 1 bit 栈底标记,1 表示最后一个标签
TTL 8 bit 生存时间,防止转发环路

2.2 EXP 值与优先级映射

MPLS EXP 值通常遵循以下约定(RFC 3912/5462):

EXP 值 对应 DSCP PHB 类型 业务类型 丢弃优先级
0 DS (000000) BE 普通尽力而为业务 低丢弃优先(最后丢弃)
1 CS1 (001000) EF 低 普通数据业务 -
2 CS2 (010000) EF 中 交互型数据 -
3 CS3 (011000) AF3 视频流(标准质量) -
4 CS4 (100000) AF4 视频流(高质量) -
5 CS5 (101000) EF 语音(VoIP 媒体流) -
6 CS6 (110000) CS6 网络控制(OSPF/BGP) 低丢弃优先(最后丢弃)
7 CS7 (111000) CS7 保留(ICMP/系统管理) 低丢弃优先(最后丢弃)

注意:EXP 值 6-7 优先级最高,在调度时最先被发送(最高优先级队列),同时在 RED(Random Early Detection)拥塞避免时也是最后被丢弃(最低丢弃优先级)。这种设计是为了保护关键的控制面流量——在网络极度拥塞时,高优先级的控制信令报文应当获得最好的转发保障,尽量避免被丢弃。


三、QoS 标记继承机制

3.1 单层标签场景(L3VPN PE→P→PE)

在 L3VPN 场景中,入口 PE 为报文压入一层 MPLS 标签(VPN 标签)。此时 EXP 位的继承方式取决于配置策略:

单层标签场景(L3VPN PE→P→PE) - 图示

标记继承策略有三种:

继承策略 行为 适用场景
inherit(继承) MPLS EXP = 内层 IP DSCP 的高 3 bit 默认策略,端到端 QoS 一致性
pipe MPLS EXP = 固定值(通常为 0),不继承 运营商不想暴露客户 DSCP
uniform MPLS EXP = 内层 IP DSCP 高 3 bit,出口弹出后恢复 DSCP 标准 DiffServ 模型

3.2 双层标签场景(L3VPN PE→P→PE,PHP)

在典型的双层标签转发中(外层 Tunnel 标签 + 内层 VPN 标签),EXP 继承涉及两个标签:

双层标签场景(L3VPN PE→P→PE,PHP) - 图示

3.3 QoS 配置示例(华为 VRP)

# 入口 PE 配置
<PE-IN> system-view
[PE-IN] sysname PE-IN

# 定义 DSCP 到 EXP 的映射策略(入口)
[PE-IN] qos mapcarule DSCP-TO-EXP
[PE-IN-qos-mapcarule-DSCP-TO-EXP] if-match dscp 0 7
[PE-IN-qos-mapcarule-DSCP-TO-EXP] apply mpls-exp 0 7
[PE-IN-qos-mapcarule-DSCP-TO-EXP] quit

# 定义 EXP 到 DSCP 的映射策略(出口弹出标签后恢复 DSCP)
[PE-IN] qos mapcarule EXP-TO-DSCP
[PE-IN-qos-mapcarule-EXP-TO-DSCP] if-match mpls-exp 0 7
[PE-IN-qos-mapcarule-EXP-TO-DSCP] apply dscp 0 56
[PE-IN-qos-mapcarule-EXP-TO-DSCP] quit

# 创建 QoS 策略
[PE-IN] qos car DSCP-CAR
[PE-IN-qos-car-DSCP-CAR] if-match mapcarule DSCP-TO-EXP
[PE-IN-qos-car-DSCP-CAR] quit

[PE-IN] qos policy QOS-INGRESS
[PE-IN-qos-policy-QOS-INGRESS] car DSCP-CAR inbound
[PE-IN-qos-policy-QOS-INGRESS] quit

# 应用到接口
[PE-IN] interface GigabitEthernet0/0/1
[PE-IN-GigabitEthernet0/0/1] qos apply policy QOS-INGRESS inbound
[PE-IN-GigabitEthernet0/0/1] quit

四、队列调度与拥塞管理

4.1 队列调度算法

算法 全称 工作原理 适用场景
FIFO First In First Out 先进先出,无优先级区分 低负载、简单场景
PQ Priority Queue 严格优先级,高优先级队列不为空时低优先级不发送 语音/信令保障
WRR Weighted Round Robin 按权重轮询调度各队列 多业务均衡保障
WFQ Weighted Fair Queue 按流加权公平队列 细粒度公平性
WFQ+PQ 严格优先 + 加权轮询 高优先级用 PQ,其余用 WRR 综合场景(推荐)

4.2 队列调度配置

# 出口 PE 配置队列调度
<PE-OUT> system-view
[PE-OUT] sysname PE-OUT

# 配置队列调度策略
[PE-OUT] qos queue wrr weight queue 0 weight 1    # BE
[PE-OUT] qos queue wrr weight queue 1 weight 1    # CS1
[PE-OUT] qos queue wrr weight queue 2 weight 2    # CS2
[PE-OUT] qos queue wrr weight queue 3 weight 3    # CS3
[PE-OUT] qos queue wrr weight queue 4 weight 4    # CS4
[PE-OUT] qos queue wrr weight queue 5 weight 8    # CS5 (语音)
[PE-OUT] qos queue wrr weight queue 6 weight 1    # CS6
[PE-OUT] qos queue wrr weight queue 7 weight 1    # CS7

# 队列 5 (CS5/VoIP) 使用严格优先级调度
[PE-OUT] qos queue hq queue 5 mode pq

# 配置 EXP 到队列的映射
[PE-OUT] qos mapcarule EXP-TO-QUEUE
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 0
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 0
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 1
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 1
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 2
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 2
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 3
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 3
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 4
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 4
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 5
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 5
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 6
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 6
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] if-match mpls-exp 7
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] apply queue 7
[PE-OUT-qos-mapcarule-EXP-TO-QUEUE] quit

# 创建 QoS 策略并应用
[PE-OUT] qos car EXP-CAR
[PE-OUT-qos-car-EXP-CAR] if-match mapcarule EXP-TO-QUEUE
[PE-OUT-qos-car-EXP-CAR] quit

[PE-OUT] qos policy QOS-EGRESS
[PE-OUT-qos-policy-QOS-EGRESS] car EXP-CAR outbound
[PE-OUT-qos-policy-QOS-EGRESS] quit

[PE-OUT] interface 100GE1/0/1
[PE-OUT-100GE1/0/1] qos apply policy QOS-EGRESS outbound
[PE-OUT-100GE1/0/1] quit

五、隧道级 QoS:TE 隧道优先级

5.1 TE 隧道优先级与抢占

在 MPLS TE(Traffic Engineering)中,除了报文级的 EXP 优先级,还有隧道级的优先级控制。TE 隧道通过优先级(Priority)参数控制隧道的建立和抢占行为:

优先级类型 范围 说明
建立优先级(Setup Priority) 0-7 0 最高,7 最低,决定隧道建立时的资源分配顺序
保持优先级(Hold Priority) 0-7 0 最高,7 最低,决定隧道被抢占的难易程度

抢占规则:只有当新隧道的建立优先级 高于 已有隧道的保持优先级时,才能抢占已有隧道的资源。

TE隧道A: Setup=3, Hold=3
TE隧道B: Setup=1, Hold=1

当网络带宽不足时:
- 隧道B (Setup=1) 优先于隧道A (Setup=3) 建立
- 隧道B (Setup=1 > Hold=3) 可以抢占隧道A的带宽
- 隧道A (Setup=3 < Hold=1) 不可以抢占隧道B的带宽

5.2 TE 隧道优先级配置

# 创建 TE 隧道并设置优先级
<PE-IN> system-view
[PE-IN] interface Tunnel10
[PE-IN-Tunnel10] tunnel-protocol mpls te
[PE-IN-Tunnel10] mpls te tunnel-id 10
[PE-IN-Tunnel10] mpls te bandwidth priority 1 1    # Setup=1, Hold=1
[PE-IN-Tunnel10] mpls te bandwidth bipreceded-bw 1000   # 1000Mbps
[PE-IN-Tunnel10] destination 20.1.2.1
[PE-IN-Tunnel10] quit

# 低优先级隧道(可被抢占)
[PE-IN] interface Tunnel11
[PE-IN-Tunnel11] tunnel-protocol mpls te
[PE-IN-Tunnel11] mpls te tunnel-id 11
[PE-IN-Tunnel11] mpls te bandwidth priority 5 5    # Setup=5, Hold=5
[PE-IN-Tunnel11] mpls te bandwidth bipreceded-bw 500
[PE-IN-Tunnel11] destination 20.1.2.1
[PE-IN-Tunnel11] quit

六、MPLS QoS 故障案例

6.1 案例:语音通话质量差(高时延与丢包)

故障现象: 某银行部署了 VoIP 系统,语音报文 DSCP 标记为 EF(46,对应 EXP=5)。但在网络高峰期,语音通话出现严重断续和回声。

排查过程:

# 在核心 P 路由器上检查队列状态
<P-Router> display qos queue interface 100GE1/0/1
Queue  Interface      PKT_IN   PKT_OUT  DROP     BYTES_IN    UTIL(%)
0      100GE1/0/1     1234567  1234500  67       123456789   12
5      100GE1/0/1     987654   987600   54       157784576   95  # 队列5利用率极高!

根因分析: 队列 5(语音队列)虽然配置了 PQ(严格优先级),但队列带宽没有做限制。当语音流量突发时,占据了过多带宽,导致其他队列饿死。同时,队列 5 自身也出现了尾丢。

解决方案:

# 为语音队列配置带宽保障和上限
[PE-OUT] interface 100GE1/0/1
[PE-OUT-100GE1/0/1] qos queue hq queue 5 mode pq
[PE-OUT-100GE1/0/1] qos lr queue 5 cir 200 enable     # 语音队列保证200Mbps
[PE-OUT-100GE1/0/1] qos car queue 5 cir 500            # 上限500Mbps,防止抢占过多
[PE-OUT-100GE1/0/1] quit

6.2 案例:EXP 标记丢失导致 QoS 失效

故障现象: 客户端标记了 DSCP EF 的语音报文,经过 MPLS 网络后到达出口 PE 时,恢复的 DSCP 值变为 0(Best Effort),导致语音业务在出口被调度到低优先级队列。

根因分析: 出口 PE 上缺少 EXP 到 DSCP 的映射策略,或者 QoS 策略未应用到正确的方向(outbound)。

解决方案:

# 在出口 PE 检查并修复 EXP→DSCP 映射
<PE-OUT> display qos mapcarule EXP-TO-DSCP
# 确认映射规则存在且正确

<PE-OUT> display qos policy QOS-EGRESS interface 100GE1/0/1
# 确认 QoS 策略已应用到 outbound 方向

# 如果映射不存在,补充配置
[PE-OUT] qos mapcarule EXP-TO-DSCP
[PE-OUT-qos-mapcarule-EXP-TO-DSCP] if-match mpls-exp 5
[PE-OUT-qos-mapcarule-EXP-TO-DSCP] apply dscp 46
[PE-OUT-qos-mapcarule-EXP-TO-DSCP] quit

七、总结

MPLS QoS 通过 EXP 位实现跨 MPLS 域的优先级标记传递,结合队列调度与拥塞管理,确保关键业务(语音、视频、信令)在网络拥塞时获得优先保障。

QoS 机制 作用位置 功能 配置要点
EXP 标记继承 入口 PE IP DSCP → MPLS EXP 映射 inherit/pipe/uniform 模式
队列调度 出口 P/PE 基于 EXP 将报文送入不同优先级队列 WFQ+PQ 混合调度
拥塞避免 出口 P/PE RED 在队列拥塞前主动丢弃低优先级报文 阈值与概率参数调优
TE 隧道优先级 TE 隧道 控制隧道建立与抢占顺序 Setup/Hold 优先级分离

思考题:

  1. EXP 值 6-7 的报文在调度时优先级最高(最先发送),在拥塞避免(RED)时也是最后被丢弃(最低丢弃优先级)。为什么网络控制流量需要这样的双重保护?
  2. Pipe 模型和 Uniform 模型在 QoS 标记继承上有何本质区别?在运营商网络中为什么通常推荐使用 Pipe 模型?
  3. TE 隧道抢占规则中,为什么需要区分"建立优先级"和"保持优先级"两个独立参数?如果只用一个优先级值会导致什么问题?

下篇预告:第199篇《MPLS OAM:LSP Ping 与 Traceroute》将介绍 MPLS 网络中的操作维护管理(OAM)技术,通过 LSP Ping 和 LSP Traceroute 实现对 MPLS 标签交换路径的端到端检测与故障定位。