3、IEEE 802.1Q VLAN与优先级:VLAN标签结构、PCP优先级编码、VLAN在车载网络中的应用场景

好,咱们今天聊聊VLAN。说实话,VLAN在传统IT网络里已经是个老话题了,但在车载以太网里,它还是个香饽饽。为什么?因为车上的网络环境太特殊了——摄像头数据、雷达点云、诊断报文、娱乐音视频,全都挤在一根线上。没有VLAN,这些数据就会互相打架。

我个人习惯把VLAN理解成「虚拟的隔离墙」。你想想看,物理上只有一根网线,但逻辑上我们可以把它切成好几个独立的网络。这就是VLAN的核心价值。

3.1 VLAN标签结构:4个字节的秘密

先看最基础的东西——VLAN标签长什么样。IEEE 802.1Q定义的这个标签,就插在以太网帧头里,总共4个字节。我刚开始学的时候总觉得这4个字节没什么了不起,直到在项目里抓包分析才发现,这里面的门道真不少。

传统以太网帧:
| 目的MAC(6B) | 源MAC(6B) | 类型/长度(2B) | 数据 | FCS |

带VLAN标签的帧:
| 目的MAC(6B) | 源MAC(6B) | TPID(2B) | TCI(2B) | 类型/长度(2B) | 数据 | FCS |

这4个字节分成两部分:

  • TPID(Tag Protocol Identifier):固定值0x8100,告诉交换机「嘿,这是个VLAN标签」
  • TCI(Tag Control Information):里面藏着PCP、DEI、VID三个字段

TCI的位分配是这样的:

字段 长度 说明
15-13 PCP 3 bit 优先级编码,0-7共8个等级
12 DEI 1 bit 丢弃指示,1表示可丢弃
11-0 VID 12 bit VLAN ID,0-4095

重点记住:VID=0是保留值,用于优先级标签;VID=4095也是保留的。实际可用的VID范围是1-4094。我在项目里见过有人用了VID=0,结果交换机直接不认,排查了半天。

3.2 PCP优先级编码:3个bit决定生死

PCP(Priority Code Point)这3个bit,说白了就是给报文贴了个「优先级标签」。0最低,7最高。但具体怎么用,IEEE 802.1Q有推荐映射,不过车载领域有自己的玩法。

PCP值 优先级 典型应用(IT网络) 车载典型应用
0 BE(尽力而为) 普通数据 诊断、OTA下载
1 BK(背景) 批量传输 日志上传
2 EE(优秀尽力) 娱乐音视频
3 CA(关键应用) 语音 语音控制
4 VI(视频) 视频 摄像头数据
5 VO(语音) 雷达点云
6 IC(网间控制) 网络控制 安全关键控制信号
7 NC(网络控制) 时间同步、紧急制动

我的经验:车载领域PCP的分配其实没有统一标准,各家Tier1都有自己的偏好。我建议你在项目初期就和系统架构师对齐这个映射表,不然后期改起来很痛苦。我曾经在一个项目里,ADAS团队用了PCP=5,座舱团队也用了PCP=5,结果两个高优先级流互相抢占带宽,最后不得不重新规划。

3.3 VLAN在车载网络中的应用场景

好了,理论说完了,咱们看看实际怎么用。车载网络里VLAN主要有三个大用途:

3.3.1 功能隔离

这是最直接的应用。一辆车上有多个功能域:动力域、底盘域、座舱域、智驾域。每个域的数据敏感度不同。你总不希望娱乐系统的视频流把制动控制信号给挤掉吧?

典型的VLAN划分:

  • VLAN 10:动力与底盘域(PCP=6,7)
  • VLAN 20:智能驾驶域(PCP=5,6)
  • VLAN 30:座舱娱乐域(PCP=2,3)
  • VLAN 40:诊断与OTA(PCP=0,1)

这样做的好处很明显——即使娱乐域的网络出了故障,也不会影响到制动系统。说白了,这就是「故障隔离」的思维。

3.3.2 优先级保障

光有VLAN隔离还不够,还得有优先级保障。比如智驾域的摄像头数据,每秒几十帧,延迟要求小于1ms。这时候PCP就派上用场了。

我参与过一个项目,智驾域控制器和摄像头之间通过交换机连接。摄像头发出的数据打上PCP=5,交换机会优先转发这些报文。即使链路上有大量诊断数据在传输,摄像头数据也能「插队」通过。

注意:PCP只是优先级标记,真正要保障带宽和延迟,还得配合QoS队列调度算法(比如严格优先级SP、加权轮询WRR)。VLAN+PCP只是「打标签」,交换机怎么处理这些标签,那是另一回事。别搞混了。

3.3.3 多网段共存

现在的车载网络架构越来越复杂,一个物理端口上可能同时跑着多个逻辑网络。比如一个域控制器,既要和摄像头通信(VLAN 20),又要和座舱交互(VLAN 30),还要接收诊断指令(VLAN 40)。

没有VLAN的话,你得给每个网络配独立的物理接口。有了VLAN,一个端口就够了。这就是Trunk口的概念——一个端口上可以透传多个VLAN的流量。

# 交换机端口配置示例(思科风格)
interface GigabitEthernet0/1
 switchport mode trunk
 switchport trunk allowed vlan 10,20,30,40
!

嗯,这里要注意:车载交换机通常不支持这么复杂的配置,但原理是一样的。很多车载交换芯片(比如Marvell、Broadcom的方案)都支持VLAN成员集和端口VLAN ID(PVID)的配置。

3.4 避坑指南

最后分享几个我踩过的坑:

  • VLAN ID别乱用:我曾经在一个项目里,两个团队各自用了VLAN 100,结果交换机一配,流量全乱了。后来我们统一了VLAN规划表,每个域分配一个范围。
  • PCP和优先级队列要对应:光打PCP标签没用,交换机的队列映射必须配好。我见过有人PCP打了7,但交换机把7映射到了最低优先级队列,等于白干。
  • 注意VLAN标签的MTU影响:加了VLAN标签后,帧头多了4个字节。如果原始报文是1518字节,加上标签就变成1522字节。有些老旧设备不支持巨帧,会直接丢弃。车载环境里这个问题不多见,但如果你用AVB/TSN流,还是要注意一下。

好了,VLAN这部分就聊到这儿。下一节咱们讲QoS队列调度,到时候会结合VLAN的PCP一起说,你会发现这两个东西是天生一对。