VLAN 详细解析:帧格式与消息处理流程
1. 引言
在局域网(LAN)环境中,交换机工作在数据链路层,依据 MAC 地址完成二层转发。默认情况下,一台交换机的所有端口处于同一个广播域,这意味着任意端口发出的广播帧都会被泛洪到其余所有端口。随着业务规模扩大,广播风暴、安全性不足、管理复杂度升高等问题逐渐暴露。
VLAN(Virtual Local Area Network,虚拟局域网)正是为解决这些问题而提出的二层隔离技术。本文将从 VLAN 的基础概念、帧格式(802.1Q 标签)以及交换机对 VLAN 消息的详细处理流程三个层面展开剖析,帮助读者完整理解 VLAN 的工作机制。
2. VLAN 基础概念详解
2.1 什么是 VLAN
VLAN 是一种将物理局域网在逻辑上划分为多个相互隔离的广播域的技术。它工作在 OSI 模型的第二层(数据链路层),通过在以太网帧中插入 VLAN 标签(Tag)来标识帧归属的逻辑网络。
一个 VLAN 可以理解为:
- 一个独立的广播域:VLAN 内的广播帧只会在属于同一 VLAN 的端口间传播,不会跨越到其他 VLAN。
- 一组逻辑上的端口集合:同一台交换机甚至跨越多台交换机的端口,都可以被划分到同一个 VLAN。(只需要二层转发)
- 一个逻辑子网的载体:通常一个 VLAN 对应一个 IP 子网,VLAN 之间的通信需要借助三层设备(路由器或三层交换机)完成。
2.2 VLAN 的主要作用
-
隔离广播域,抑制广播风暴
VLAN 将广播流量限制在本 VLAN 内部,显著降低了全网广播流量,提升了带宽利用率。
-
增强网络安全性
不同 VLAN 之间的流量默认相互隔离,敏感业务(如财务、人事)可以单独划分 VLAN,减少被非法访问的风险。
-
简化网络管理
网络管理员可以依据部门、职能或业务灵活划分 VLAN,而不受物理位置的限制。人员变动时只需修改端口所属 VLAN,无需重新布线。
2.3 VLAN 的常见划分方式
| 划分方式 | 依据 | 特点 |
|---|---|---|
| 基于端口(Port-Based) | 交换机端口的 VLAN 配置 | 实现简单、应用最广;终端移动端口后需重新配置 |
| 基于 MAC 地址 | 终端设备的 MAC 地址 | 用户移动位置后仍保留原 VLAN;需维护 MAC-VLAN 表 |
| 基于协议(Protocol-Based) | 帧携带的三层协议类型(如 IPv4/IPv6/IPX) | 适合多协议环境,按协议自动划分 |
| 基于子网 | 报文源 IP 地址所在子网 | 灵活但需解析三层信息,性能开销较大 |
| 基于策略(Policy-Based) | MAC、IP、协议等组合策略 | 灵活性强,配置复杂,适用于高端交换机 |
其中,基于端口的 VLAN 是工程实践中的主流方案,本文后续讨论均以端口 VLAN 为基础。
3. VLAN 帧格式详解
VLAN 的核心在于对以太网帧的扩展。标准以太网帧本身没有 VLAN 信息,IEEE 802.1Q 标准通过在以太网帧头部插入一个 4 字节的标签字段来承载 VLAN 标识。
3.1 常规以太网帧与 802.1Q 帧对比
常规 Ethernet II 帧格式如下:
| 目的 MAC(6) | 源 MAC(6) | 类型(2) | 数据(46~1500) | FCS(4) |
而带有 VLAN 标签的 802.1Q 帧在「源 MAC」之后插入了 4 字节的 VLAN Tag:
| 目的 MAC(6) | 源 MAC(6) | Tag(4) | 类型(2) | 数据(46~1500) | FCS(4) |
3.2 802.1Q 标签结构
802.1Q Tag 总长 4 字节(32 bit),由以下两个部分组成:
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TPID | PCP |DEI| VID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
各字段说明如下:
| 字段 | 长度 | 取值 | 含义 |
|---|---|---|---|
| TPID(Tag Protocol Identifier) | 16 bit | 0x8100(802.1Q)/ 0x88A8(802.1ad QinQ 外层) | 标签协议标识,用于标识该帧携带 802.1Q 标签 |
| PCP(Priority Code Point) | 3 bit | 0 ~ 7 | 优先级,对应 IEEE 802.1p 的 8 个服务等级 |
| DEI(Drop Eligible Indicator) | 1 bit | 0 / 1 | 丢弃优先级指示,用于标识拥塞时是否可优先丢弃 |
| VID(VLAN Identifier) | 12 bit | 0 ~ 4095 | VLAN 标识号,其中 0 和 4095 保留 |
3.3 各字段详细解析
TPID
设备读取到源 MAC 地址后的 2 字节。当该字段值为 0x8100 时,表示这是一个 802.1Q 帧,紧随其后的 2 字节为 TCI(Tag Control Information)。对于未打标签的普通以太网帧,此处直接是类型字段(如 0x0800 表示 IPv4)。
TCI 内部结构
TCI 包含 PCP、DEI、VID 三个子字段:
- PCP:用于二层 QoS,与 802.1p 标准结合,取值范围 0~7,数值越大优先级越高。语音、视频等实时业务通常被映射到较高优先级。
- DEI:早期为 CFI(Canonical Format Indicator),主要兼容令牌环网络;演进后作为 DEI 使用,配合 QoS 标识可丢弃帧。
- VID:12 bit,理论上可表示 0~4095 共 4096 个 VLAN ID。其中
0表示「无 VLAN,仅携带优先级信息」,4095为保留值,因此实际可用的 VLAN ID 范围为1 ~ 4094。
3.4 重要 VLAN ID 特殊值
| VLAN ID | 含义 | 说明 |
|---|---|---|
| 0 | 无 VLAN | 用于仅传递优先级信息的场景,不视为有效 VLAN |
| 1 | 默认 VLAN | 绝大多数交换机出厂默认所有端口都属于 VLAN 1 |
| 1002~1005 | 传统兼容 | Cisco 设备为 FDDI、令牌环保留 |
| 4095 | 保留 | 不用于实际转发 |
4. VLAN 端口类型
这里需要说明一个关键概念——PVID。PVID 全称为 Port VLAN ID,即「端口 VLAN 标识」,表示该端口默认归属的 VLAN。交换机在处理从该端口收到的无VLAN标签以太网帧时,会统一以端口的 PVID 作为该帧的 VLAN 归属,并打上对应的 VLAN 标签后再进入内部转发。
理解 VLAN 消息处理流程之前,必须先明确交换机的端口类型。不同端口类型对 VLAN 帧的收发行为完全不同。
4.1 Access 端口
Access 端口通常用于连接终端设备(PC、打印机、服务器等),一个 Access 端口在任意时刻只能属于一个 VLAN。这些终端通常默认只发普通以太网帧,不会自己封装 VLAN Tag,所以通常是使用配置在交换机上的PVID作为VLAN ID。
- 入方向:
- 收到带标签帧时,判断帧VLAN ID=端口PVID才放行进入交换机处理。
- 收到无标签帧时,按照本端口的 PVID 为该帧打上对应 VLAN 标签,然后进入交换机处理。
- 出方向:交换机内部按这个 VLAN 转发,将带有标签的帧去掉标签后再发送,保证终端收到的是标准以太网帧。如果端口PVID和VLAN ID不一致则消息丢弃。
4.2 Trunk 端口
Trunk 端口用于交换机之间或交换机与路由器/服务器之间的互联,允许同时承载多个 VLAN 的流量。
- 入方向:收到带标签帧时查看是否在 Trunk 的允许列表里;收到无标签帧时打上 Trunk 的 PVID。(Trunk端口是跨不同交换机的,所以对于带标签的帧不能做VLAN ID == PVID的校验。)
- 出方向:带标签帧直接转发;属于PVID的帧去掉标签后发送。
4.3 Hybrid 端口
Hybrid 端口是部分厂商(如华为、H3C)提出的复合端口类型,兼具 Access 和 Trunk 的特性。
- 可以像 Trunk 一样允许多个 VLAN 通过,并且可以指定哪些 VLAN 的帧带标签发送、哪些不带标签发送。
- 配置更灵活,常见于接入层需要同时连接终端和下级交换机的场景。
4.4 Native VLAN(本征 VLAN)
Native VLAN 是 Trunk 端口上的一个特殊 VLAN,专门用于处理无标签帧。从本质上说,它承担了 Trunk 端口默认 VLAN 的角色:当 Trunk 端口收到不带 802.1Q Tag 的帧时,交换机会将该帧归入 Native VLAN;而当 Trunk 端口转发属于 Native VLAN 的帧时,则剥掉标签、按无标签帧发送。
默认情况下,多数交换机的 Native VLAN 为 VLAN 1,但工程上建议将其修改为独立的专用 VLAN,主要基于以下考虑:
- 降低 VLAN 跳跃攻击风险:攻击者常利用双重标签等方式绕过二层隔离,专用 Native VLAN 可以缩小被利用的攻击面。
- 避免配置混淆:将业务 VLAN、管理 VLAN、Native VLAN 分开,职责更清晰,故障排查也更容易。
- 保证链路一致性:同一条 Trunk 链路两端必须配置相同的 Native VLAN,否则无标签帧会被对端误归入其他 VLAN,造成流量串扰。
Native VLAN 的关键收发规则如下:
- Trunk 端口收到无标签帧时,按 Native VLAN 处理,即打上本端口 PVID 对应的 VLAN 标签后进入交换机内部转发。
- Trunk 端口发送属于 Native VLAN 的帧时,去掉 802.1Q 标签后发送。
- Trunk 端口发送非 Native VLAN 的帧时,保留 802.1Q 标签发送。
- 一条 Trunk 链路两端的 Native VLAN 必须保持一致,否则会导致 VLAN 归属错乱或业务异常。
5. VLAN 消息详细处理流程
本节以基于端口的 VLAN 为例,完整描述交换机对数据帧的收发处理流程。
5.1 交换机内部处理架构
交换机对 VLAN 的处理可以抽象为「入端口处理 → 二层转发决策 → 出端口处理」三个阶段:
5.2 入方向处理流程
当交换机从某个物理端口收到帧后,入方向处理步骤如下:
核心逻辑总结:
- 交换机收到帧后,依据端口配置判断该帧应归属的 VLAN。
- 对无标签帧,Access 端口使用 PVID,Trunk 端口使用 Native VLAN(PVID),Hybrid 端口依据 untagged/tagged 配置决定。
- 对带标签帧,Trunk 端口检查该 VID 是否在允许通过列表中,不在则丢弃。
- 帧进入交换机内部时统一携带内部 VLAN 信息,参与后续 MAC 地址学习与转发决策。
5.3 二层转发决策流程
帧归属 VLAN 之后,交换机执行标准的二层转发逻辑:
关键细节:
- MAC 地址表以
VLAN + MAC为联合索引,相同 MAC 存在于不同 VLAN 时互不影响。 - 广播帧与未知单播帧只在帧所属 VLAN 的成员端口内泛洪,由此实现广播域隔离。
- 交换机会同时学习源 MAC、所属 VLAN 和入端口三元组,完成表项的动态建立与老化更新。
5.4 出方向处理流程
帧完成转发决策后,到达出端口时执行标签处理:
标签处理原则可以归纳为:
- Access 端口:永远发送无标签帧。
- Trunk 端口:Native VLAN 发无标签帧,非 Native VLAN 发带标签帧。
- Hybrid 端口:根据该 VLAN 被配置为
tagged还是untagged决定是否携带标签。
5.5 完整端到端示例
下面通过一个典型场景串联完整处理流程。假设拓扑如下:
场景 1:PC1(VLAN 10)向 PC2(VLAN 10)发送报文
- PC1 发送无标签以太网帧给 SW1。
- SW1 的 Access 端口收到后,为该帧打上 VLAN 10 的内部标签。
- SW1 学习 PC1 的 MAC 到 VLAN 10 表中,出端口为其接入端口。
- 目的 MAC 为 PC2,SW1 在 VLAN 10 表内泛洪(假设初次学习),帧从 Trunk 口发出。
- 因 VLAN 10 不是 Native VLAN,SW1 的 Trunk 口保留 802.1Q 标签转发。
- SW2 的 Trunk 口收到带 VLAN 10 标签的帧,校验通过后进入 VLAN 10 转发域。
- SW2 学习 PC1 的 MAC 与 Trunk 端口映射,查表后从 PC2 所在 Access 口转发。
- 出端口为 Access,SW2 剥掉标签,PC2 收到标准以太网帧。
场景 2:PC1(VLAN 10)向 PC3(VLAN 20)发送报文
- 报文仍被 SW1、SW2 归入 VLAN 10。
- SW2 在 VLAN 20 的 MAC 表中查找 PC3,但 PC3 不在 VLAN 10 域内。
- 即便 PC3 物理连接在同一台 SW2 上,由于 VLAN 隔离,帧也不会被转发到 PC3。
- 若 PC1 想与 PC3 通信,必须通过三层设备(路由器或三层交换机的 VLAN 间路由)完成。
场景 3:不带 VLAN 标签的 PC 向 PC3(VLAN 20)发送报文,且 Trunk 两端 Native VLAN 不一致
为了演示 Native VLAN 不一致的影响,再假设如下错误配置:
- SW1 侧 Trunk 的 Native VLAN 为 VLAN 1;
- SW2 侧 Trunk 的 Native VLAN 被误配为 VLAN 20(与 PC3 所在 VLAN 相同);
- 另有一台不支持 802.1Q Tag 的 PC(记为 PC4)接入 SW1 的 VLAN 1 端口,发送无标签帧给 PC3。
处理过程如下:
- PC4 发送无标签以太网帧,目的 MAC 为 PC3。
- SW1 在接入端口收到无标签帧,按本端口 PVID(VLAN 1)打上内部标签,帧进入 VLAN 1 转发域。
- SW1 从 Trunk 口转发时,因 VLAN 1 是本端 Native VLAN,剥掉 802.1Q 标签,以无标签帧发送给 SW2。
- SW2 从 Trunk 口收到该无标签帧,但本端 Native VLAN 已被误配为 VLAN 20,于是将其归入 VLAN 20,并打上 VLAN 20 的内部标签。
- SW2 在 VLAN 20 转发域中查找目的 MAC=PC3,发现 PC3 同属 VLAN 20,于是从 PC3 所在 Access 口转发出去,并剥掉标签。
- PC3 最终收到来自 PC4 的无标签帧,原本应被隔离在 VLAN 1 的流量被错误送入了 VLAN 20。
可见,同一条 Trunk 链路两端 Native VLAN 不一致时,无标签帧在一端按本端 Native VLAN 剥标签,在对端又会按对端的 Native VLAN 重新归属,最终可能使流量跨 VLAN 倒灌,造成业务串扰或安全隐患。因此必须保证 Trunk 两端 Native VLAN 配置一致。
这正是 VLAN 实现二层隔离的直观体现。
6. VLAN 间通信与三层处理
VLAN 实现了二层隔离,但不同 VLAN 之间往往仍需要受控通信(如共享文件服务器),此时必须引入三层路由。
常见方案包括:
-
单臂路由(Router-on-a-Stick)
在路由器与交换机之间建立 Trunk 链路,路由器子接口分别终结不同 VLAN,通过 VLAN 标签区分逻辑子接口,完成 VLAN 间路由。
-
三层交换机 SVI(Switch Virtual Interface)
在三层交换机上为每个 VLAN 创建对应的 VLANIF/SVI 接口,配置 IP 地址,利用交换机的硬件三层转发能力实现高性能 VLAN 间路由。
处理要点:跨 VLAN 报文到达三层接口后,交换机剥掉二层头,完成三层查表,重新封装源 MAC 为出接口 MAC、目的 MAC 为下一跳 MAC,并在出 VLAN 内继续二层转发。
7. 常见问题与注意事项
7.1 Native VLAN 两端不一致
Trunk 链路两端的 Native VLAN 必须一致。若配置不一致,无标签帧会在对端被归入错误的 VLAN,导致业务异常或 VLAN 跳跃风险。
7.2 VLAN 1 的安全隐患
VLAN 1 是多数交换机的默认管理与 Native VLAN,不推荐用于业务数据。建议:
- 将管理 VLAN 修改为独立 VLAN。
- 将业务端口移出 VLAN 1。
- 更改进程级 Native VLAN。
7.3 标签帧的最大帧长
802.1Q 标签使帧长增加 4 字节,若终端发送 1518 字节的最大标准帧,加上标签后可能达到 1522 字节。网络设备需支持该长度的巨型概念(或至少正确处理 1522 字节帧),避免出现分片或丢帧问题。
8. 总结
本文围绕 VLAN 的三大核心问题展开:
- VLAN 原理:通过逻辑划分广播域,实现隔离、安全与灵活管理,主流实现为基于端口的 VLAN。
- 帧格式:802.1Q 标签由 TPID 与 TCI 组成,TCI 进一步包含 PCP、DEI、VID,其中 12 bit 的 VID 决定帧归属的 VLAN。
- 处理流程:交换机依据端口类型(Access/Trunk/Hybrid)在入方向完成标签归属,在二层域内按「VLAN + MAC」联合查表转发,出方向依据端口配置决定保留或剥离标签。
理解 VLAN 的帧格式与收发处理流程,是掌握二层网络设计与故障排查的基础。建议读者结合抓包工具(如 Wireshark)实际观察带标签与不带标签帧的差异,加深对 802.1Q 封装机制的认识。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)