第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 │ └──────────┘
- 用户设备发送带 C-VLAN Tag 的帧
- 运营商 PE 设备的接入端口收到帧,打上 S-VLAN Tag
- 在运营商骨干网中,帧携带双层 Tag 传输
- 对端 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 字节 |
十、思考
- 为什么需要 QinQ?标准 802.1Q 的 VLAN 数量限制是多少?
- QinQ 帧中 S-VLAN 和 C-VLAN 分别代表什么?
dot1q-tunnel端口类型的作用是什么?- 在 QinQ 网络中,如果 MTU 保持不变(1500),会有什么后果?
- 基本 QinQ 和灵活 QinQ 的核心区别是什么?
下篇预告:第108篇《灵活 QinQ——基于 VLAN 或优先级的外层标签》——讲解如何根据用户报文的原始 C-VLAN 或 802.1p 优先级,智能选择不同的 S-VLAN。