第107篇:QinQ 双层标签——运营商 VLAN 扩展

关键词

QinQ、802.1Q-in-Q、双层标签、运营商 VLAN、Service VLAN、Customer VLAN


一、为什么需要 QinQ?

1.1 4094 个 VLAN 的瓶颈

标准 802.1Q 的 VLAN ID 只有 12 位,最多支持 4094 个 VLAN(0 和 4095 保留)。

在运营商网络中,这远远不够——一个城市可能有成千上万个用户,每个用户可能有多个 VLAN。

1.2 用户 VLAN 冲突问题

用户 A(VLAN 10)────────┐
                         ├── 运营商网络 ──── 用户 B(VLAN 10)
用户 C(VLAN 10)────────┘

不同用户的 VLAN 10 在运营商网络中会冲突!

QinQ(802.1Q-in-Q,也称 Stacked VLAN)通过在原有 VLAN Tag 外面再叠加一层 Tag,将 VLAN 数量从 4094 扩展到 4094 × 4094。


二、QinQ 的报文格式

2.1 帧结构对比

普通帧: | DA | SA | Payload | | --- | --- | --- |

802.1Q 帧: | DA | SA | Tag | Payload | | --- | --- | --- | --- | 0x8100 + VLAN ID

QinQ 帧: | DA | SA | Outer | Inner | Payload | | --- | --- | --- | --- | --- | 0x8100 0x8100 S-VLAN C-VLAN

2.2 Tag 含义

Tag 名称 含义
C-VLAN(Customer VLAN) 内层标签 用户自己的 VLAN ID
S-VLAN(Service VLAN) 外层标签 运营商分配的 VLAN ID
  • C-VLAN:用户在内部网络使用的 VLAN(如 10、20、30)
  • S-VLAN:运营商用来区分不同用户的 VLAN(如 100、200、300)

2.3 QinQ 帧的 EtherType

外层 Tag 的 EtherType = 0x8100(标准 802.1Q),内层 Tag 的 EtherType 也保持 0x8100。


三、QinQ 的工作原理

3.1 基本流程

用户侧 运营商侧 | 用户 设备 | ──C-VLAN 帧──► (VLAN 10) | 运营商 PE 设备 | | --- | --- | --- | │ 打上 S-VLAN 100 │ ┌──────────────┐ │ QinQ 帧 │ │ S-VLAN 100 │ │ C-VLAN 10 │ └──────────────┘ │ 运营商骨干网传输 │ ┌──────────────┐ │ 在出口剥离 │ │ 外层标签 │ └──────────────┘ │ ┌──────────┐ │ 用户 B │ │ VLAN 10 │ └──────────┘

  1. 用户设备发送带 C-VLAN Tag 的帧
  2. 运营商 PE 设备的接入端口收到帧,打上 S-VLAN Tag
  3. 在运营商骨干网中,帧携带双层 Tag 传输
  4. 对端 PE 设备剥离 S-VLAN Tag,还原原始帧发给用户

3.2 分类

类型 说明
基本 QinQ 基于端口:该端口进来的所有帧都打上同一个 S-VLAN
灵活 QinQ 基于 VLAN 或优先级:不同 C-VLAN 打不同的 S-VLAN(详见第108篇)

四、配置示例

4.1 华为交换机基本 QinQ 配置

网络拓扑:

  用户 A                   运营商 PE             用户 B
  VLAN 10 ──── GE0/0/1 ──┐          ┌── GE0/0/1 ──── VLAN 10
                          │  骨干网  │
  VLAN 20 ──── GE0/0/1 ──┘          └── GE0/0/1 ──── VLAN 20
  用户 C                                      用户 D
# ===== 运营商 PE 设备 =====

# 创建 S-VLAN
vlan batch 100 200

# 接入端口:用户 A 和 B 属于 VLAN 10/20
# 打上 S-VLAN 100
interface GigabitEthernet0/0/1
 port link-type hybrid
 port hybrid untagged vlan 100
 port vlan-stacking 100        # QinQ 端口:打上外层标签 100

# 骨干端口:传输双层标签帧
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 100 200

4.2 另一种更常用的配置方式(端口 QinQ)

# 将接口配置为 QinQ 端口
interface GigabitEthernet0/0/1
 port link-type dot1q-tunnel   # 设置为 QinQ 隧道端口
 port default vlan 100          # 外层 S-VLAN = 100

# 对端接口同样配置
interface GigabitEthernet0/0/2
 port link-type dot1q-tunnel
 port default vlan 200

dot1q-tunnel 模式下,端口收到的所有帧(无论是否有 Tag)都加上 S-VLAN 100 的外层标签。


五、QinQ 的应用场景

5.1 运营商宽带接入

用户光猫 ── C-VLAN ── OLT ──── QinQ ──── BRAS
                              S-VLAN = 用户标识

每个用户分配一个 S-VLAN,用户内部的 VLAN 使用 C-VLAN 传输。

5.2 园区网跨楼宇 VLAN 扩展

园区 A(VLAN 1-100)─── QinQ ─── 园区 B(VLAN 1-100)
                     S-VLAN = 1000

两个园区使用相同的 VLAN 规划(VLAN 1-100),通过 QinQ 隔离。

5.3 数据中心多租户网络

租户 1: S-VLAN 1001, C-VLAN 10-50
租户 2: S-VLAN 1002, C-VLAN 10-50

在骨干网中,S-VLAN 区分租户,C-VLAN 租户内部使用

六、QinQ 的优缺点

6.1 优点

优点 说明
突破 4094 限制 外层 × 内层 = 约 1600 万个 VLAN
用户 VLAN 透明 用户可自由规划自己的 VLAN,不会冲突
兼容性好 基于标准 802.1Q,不需要改造现有设备
配置简单 基本 QinQ 只需在接入端口配置

6.2 缺点

缺点 说明
帧长增加 增加 4 字节外层标签,MTU 需调大(一般改为 1526 或 1530)
不支持 QinQ inside QinQ 三层嵌套不标准,部分设备不支持
增加转发延迟 双层标签处理需要额外 CPU
排错复杂 需要同时查看内外层标签

七、MTU 问题

普通以太网 MTU = 1500 字节。QinQ 帧增加 4 字节外层标签(共 8 字节标签),帧长变为 1522 字节。

场景 建议 MTU
普通网络 1500
802.1Q 1504
QinQ 1508(或 1526)
QinQ + MPLS 1522+
# 华为交换机调大 MTU
interface GigabitEthernet0/0/24
 mtu 1526

八、排错命令

# 查看 QinQ 端口配置
display port vlan-stacking

# 查看 QinQ 统计
display port vlan-stacking statistics

# 抓包验证双层标签
# 在骨干端口抓包,检查是否有双层 0x8100

九、总结

知识点 核心要点
QinQ 本质 在原有 VLAN Tag 外再叠加一层 Tag
S-VLAN 外层标签,区分用户(运营商视角)
C-VLAN 内层标签,用户自有 VLAN
基本 QinQ 基于端口,打统一 S-VLAN
灵活 QinQ 基于 C-VLAN/优先级打不同 S-VLAN
典型场景 运营商接入、园区网扩展、多租户
MTU 考虑 需调大 MTU 以容纳额外 4 字节

十、思考

  1. 为什么需要 QinQ?标准 802.1Q 的 VLAN 数量限制是多少?
  2. QinQ 帧中 S-VLAN 和 C-VLAN 分别代表什么?
  3. dot1q-tunnel 端口类型的作用是什么?
  4. 在 QinQ 网络中,如果 MTU 保持不变(1500),会有什么后果?
  5. 基本 QinQ 和灵活 QinQ 的核心区别是什么?

下篇预告:第108篇《灵活 QinQ——基于 VLAN 或优先级的外层标签》——讲解如何根据用户报文的原始 C-VLAN 或 802.1p 优先级,智能选择不同的 S-VLAN。