VLAN 标签(VLAN Tag)是以太网帧中的一个 4 字节字段,用于给以太网帧打上 “虚拟局域网标识”,让交换机能依据这个标识将不同帧划分到不同的 VLAN(虚拟局域网)中,实现同一物理网络下的逻辑隔离,是工业以太网、嵌入式网络设备(如网关、交换机、网络模组)开发中高频接触的网络概念。

一、VLAN 标签的核心位置(以太网帧结构)

标准以太网帧在加入 VLAN 标签后,会成为802.1Q 帧(IEEE 802.1Q 是 VLAN 的标准协议),标签插入在以太网帧头的 “类型 / 长度字段” 和 “数据字段” 之间,帧结构对比:

标准以太网帧(无 VLAN) 802.1Q 帧(带 VLAN 标签)
目的 MAC(6 字节) 目的 MAC(6 字节)
源 MAC(6 字节) 源 MAC(6 字节)
类型 / 长度(2 字节) 类型 / 长度(2 字节,固定 0x8100)
数据(46~1500 字节) VLAN 标签(4 字节)
FCS 帧校验(4 字节) 数据(46~1500 字节)
- FCS 帧校验(4 字节)

关键标识:帧头中0x8100VLAN 标签指示符,交换机检测到这个值,就知道后续跟着 4 字节的 VLAN 标签,会按标签解析帧的 VLAN 信息。

二、VLAN 标签的 4 字节详细结构(核心)

4 字节的 VLAN 标签被拆分为 4 个字段,从高到低字节依次排列,嵌入式开发中解析 / 封装 VLAN 帧,核心就是操作这 4 个字段

字段名 占位数 取值 / 作用
TPID 16 位 标签协议标识,固定0x8100,用于标识这是 802.1Q VLAN 帧(和帧头的 0x8100 一致,双重确认)
PRI 3 位 优先级(802.1p 优先级),取值 0~7,7 为最高优先级;用于以太网帧的 QoS(服务质量)调度,比如工业控制中给控制帧设高优先级,避免卡顿
CFI 1 位 规范格式指示符,取值 0(以太网环境固定为 0,令牌环网用 1),嵌入式以太网开发中直接置 0 即可
VLAN ID(VID) 12 位 VLAN 标识,核心字段;取值1~4094(0 和 4095 为保留值,0 表示无 VLAN,4095 为广播 VLAN),最多支持 4094 个逻辑 VLAN
字节拆分(嵌入式编程易读版)

4 字节标签按高 2 字节 + 低 2 字节拆分,更贴合嵌入式 32 位寄存器 / 数组操作习惯:

  • 第 1~2 字节:TPID(0x8100)
  • 第 3 字节:高 4 位 =PRI (3 位)+CFI (1 位),低 4 位 =VID 的高 4 位
  • 第 4 字节:VID 的低 8 位

举例:若 PRI=2(010)、CFI=0、VID=10(0000 0000 1010),则:

  • 第 3 字节:010 0 0000 → 0x40
  • 第 4 字节:0000 1010 → 0x0A
  • 完整 VLAN 标签:0x81 0x00 0x40 0x0A

三、VLAN 标签的核心作用(嵌入式开发视角)

  1. 网络隔离:同一物理交换机下,不同 VID 的帧无法互通,比如嵌入式网关中,将 “控制网(VID=10)” 和 “数据网(VID=20)” 隔离,防止数据帧干扰控制帧;
  2. QoS 优先级调度:通过 PRI 字段给帧分配优先级,比如工业以太网(Profinet/EtherNet/IP)中,将设备的控制指令帧设为高 PRI,保证实时性;
  3. 带宽复用:无需增加物理网线,通过 VID 划分不同业务逻辑网,减少嵌入式设备的物理网口占用;
  4. 跨交换机 VLAN:不同物理交换机之间,只要识别同一 VID,就能让对应 VLAN 的帧互通,实现分布式设备的逻辑组网。

四、嵌入式开发中对 VLAN 标签的核心操作

嵌入式网络设备(如 MCU/MPU/DSP 开发的网关系列、工业交换机、智能传感器)中,处理 VLAN 标签主要有解析封装两种场景,核心是对以太网帧的字节流 / 寄存器进行字段操作:

场景 1:解析接收到的 VLAN 帧(提取 VID/PRI)
  1. 先检测以太网帧头的类型 / 长度字段是否为 0x8100,确认是 VLAN 帧;
  2. 偏移到 VLAN 标签的第 3~4 字节,提取 PRI、CFI、VID:
    • PRI = (tag_buf [2] >> 5) & 0x07; // 第 3 字节高 3 位
    • CFI = (tag_buf [2] >> 4) & 0x01; // 第 3 字节第 4 位
    • VID = ((tag_buf [2] & 0x0F) << 8) | tag_buf [3]; // 第 3 字节低 4 位 + 第 4 字节全 8 位
  3. 根据 VID 判断帧所属的逻辑网络,执行对应的业务处理(如转发、解析数据)。
场景 2:封装要发送的 VLAN 帧(添加 VID/PRI)
  1. 构造标准以太网帧头(目的 MAC、源 MAC);
  2. 帧头后添加0x8100(TPID),标识 VLAN 帧;
  3. 按业务需求设置 PRI、VID,填充标签的第 3~4 字节:
    • tag_buf[2] = (PRI << 5) | (CFI << 4) | ((VID >> 8) & 0x0F);
    • tag_buf[3] = VID & 0xFF;
  4. 拼接后续数据字段和 FCS 校验,发送帧。
关键注意点
  • 嵌入式 MCU 的网口若为百兆 / 千兆以太网控制器(如 STM32 的 ETH 外设、LAN8720 芯片),部分硬件支持硬件解析 VLAN 标签,可通过寄存器直接读取 VID/PRI,无需软件逐字节解析,提升效率;
  • 注意以太网帧的MTU 值:标准以太网 MTU 为 1500 字节,添加 4 字节 VLAN 标签后,帧的最大长度变为 1504 字节,需确保设备支持 “巨帧” 或做好分片处理;
  • 保留值规避:VID 不可设为 0 或 4095,PRI 按业务需求分配(工业控制建议关键帧设 5~7)。

五、常见误区(嵌入式开发避坑)

  1. 误将 0x8100 当作普通的 “类型字段”:嵌入式帧解析时,若未处理 0x8100,会把 VLAN 标签当作数据字段解析,导致业务数据错误;
  2. 忽略 VID 的取值范围:直接给 VID 赋值 4095,会导致帧成为广播帧,引发网络风暴;
  3. 未考虑硬件 VLAN 支持:部分低端 MCU 网口无硬件 VLAN 解析,需纯软件处理字节流,注意优化代码效率,避免影响实时性;
  4. 忘记调整帧长度:添加 VLAN 标签后帧长增加 4 字节,需重新计算 FCS 校验,否则帧会被交换机丢弃。

六、和嵌入式开发相关的 VLAN 衍生概念

  1. Access 口:交换机的一种网口类型,只允许一个 VID的帧通过,且进出时会自动添加 / 剥离 VLAN 标签,嵌入式终端设备(如单业务传感器)通常接 Access 口;
  2. Trunk 口:交换机的一种网口类型,允许多个 VID的帧通过,且保留 VLAN 标签,嵌入式网关、跨交换机的互联口通常用 Trunk 口;
  3. PVID:端口默认 VLAN ID,Access 口的 PVID 为其允许的 VID,Trunk 口的 PVID 为默认转发的 VID,嵌入式设备对接交换机时需匹配 PVID。

总结

VLAN 标签的核心是4 字节的 802.1Q 字段,嵌入式开发中只需聚焦0x8100(TPID)VID/PRI(核心字段),核心操作是检测帧头标识→解析 / 封装标签字段;其价值在于让嵌入式网络设备能在同一物理网络下实现逻辑隔离、实时性调度,是工业以太网、嵌入式网关系列开发的必备基础。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐