4. 车载以太网帧结构与VLAN工程配置

车载以太网承载的是摄像头、雷达、诊断、OTA、控制指令等混合流量。如果所有帧都在同一个广播域里转发,不仅浪费带宽,还会让安全关键流量与娱乐流量争抢出口。解决这一问题的核心手段,就是理解以太网帧结构,并在 ST Stellar 这类车载网关/交换机芯片上正确配置 VLAN 过滤与插入。本节从帧格式讲到实际配置,最后给出一个可参考的车载 VLAN 划分案例。

一、以太网 II 帧格式与 802.1Q 标签

车载以太网最常用的是 Ethernet II 帧。它的基本结构为:目的 MAC(6 字节)、源 MAC(6 字节)、类型/长度字段(2 字节)、数据载荷(46~1500 字节)、帧校验序列 FCS(4 字节)。类型字段常见取值如 0x0800 表示 IPv4、0x0806 表示 ARP、0x86DD 表示 IPv6。当需要携带 VLAN 信息时,在源 MAC 之后插入 4 字节的 802.1Q 标签,此时类型字段变为 0x8100,表示“后面跟着 VLAN 标签”,真正的上层类型字段被后移。

802.1Q 标签的 4 个字节由三部分组成:16 位 TPID(固定 0x8100)、3 位 PCP(Priority Code Point,优先级)、1 位 DEI(Drop Eligible Indicator,可丢弃指示)、12 位 VID(VLAN Identifier,VLAN 标识)。PCP 取值 0~7,数值越大优先级越高,车载中通常把安全关键控制流量放在 5~7,音视频放在 3~4,普通诊断和 OTA 放在 0~2。VID 取值 1~4094,其中 0 表示优先级标签但无 VLAN 归属,4095 保留。DEI 置 1 表示该帧在网络拥塞时可以被优先丢弃,常用于标记“可牺牲”的流量。

Ethernet II 帧与 802.1Q VLAN 标签结构 无标签帧(Untagged) 目的 MAC 源 MAC 类型 0x0800 数据载荷 46~1500 B FCS 带标签帧(Tagged,插入 4 字节 802.1Q) 目的 MAC 源 MAC TPID 0x8100 PCP(3) DEI(1) VID(12) 类型 0x0800 数据载荷 FCS 802.1Q 标签 4 字节展开 TPID 16 bit = 0x8100 PCP 3 bit,0~7 DEI 1 bit,可丢弃 VID 12 bit,1~4094 PCP 越大优先级越高 VID 标识所属 VLAN

二、ST Stellar 上的 VLAN 过滤与插入

ST Stellar 作为车载网络处理器,其以太网交换/路由模块支持基于端口的 VLAN 处理。工程上要区分两个动作:VLAN 过滤(Filtering)决定一个入帧是否被允许进入某个端口或某个 VLAN;VLAN 插入(Insertion)决定出帧是否被加上标签、加哪个 VID 和 PCP。典型配置围绕“端口默认 VLAN(PVID)”“成员集合(Member Set)”“标签/非标签出口(Tagged/Untagged Egress)”三个概念展开。

以 ST Stellar 的交换配置为例,一个端口通常需要设置:端口模式(Access/Trunk/Hybrid)、PVID、可接收的 VLAN 列表、以及每个 VLAN 的出口标签策略。Access 口只属于一个 VLAN,入帧无标签时按 PVID 归类,出帧去标签;Trunk 口可承载多个 VLAN,入帧必须带标签,出帧保留标签。下面是一段示意性配置片段,用于说明字段含义,具体寄存器名和 API 以所用 Stellar 型号的参考手册为准:

/* 示意:ST Stellar 交换端口 VLAN 配置(伪代码,非实测) */
port0.mode      = ACCESS;      /* 接摄像头,仅属于 VLAN 10 */
port0.pvid      = 10;
port0.egress    = UNTAGGED;    /* 出帧去掉标签 */

port1.mode      = TRUNK;       /* 上联骨干,承载 VLAN 10/20/30 */
port1.accept_vlan = {10, 20, 30};
port1.egress    = TAGGED;      /* 出帧保留 802.1Q 标签 */

/* 入帧过滤:无标签帧按 PVID 归类,VID 不在 accept_vlan 内则丢弃 */
/* 出帧插入:按 VLAN 表查 PCP,写入 802.1Q 标签 */

配置完成后,判断是否生效可以从三个观察点入手:一是用抓包工具看指定端口出帧是否带 0x8100 标签、VID 与 PCP 是否符合预期;二是查看芯片 VLAN 成员表和端口统计寄存器,确认被过滤帧计数在增加;三是构造一个 VID 不在允许列表内的帧,确认它被丢弃而不是被泛洪。若发现该丢的没丢,优先检查端口模式是否误设为 Hybrid 且未限制 accept_vlan;若发现该带标签的帧没带,检查出口 egress 是否被设成了 Untagged。

三、典型车载 VLAN 划分案例

下面给出一个教学用示例划分,假设一辆车有前视摄像头、毫米波雷达、中央网关、座舱主机和 OTA 模块。划分原则是:安全关键控制流量独立成 VLAN 并给高 PCP,音视频流量单独成 VLAN 给中等 PCP,诊断与 OTA 放在低优先级 VLAN,避免与实时流量争抢。

VLAN ID用途典型成员PCP 建议出口标签
10ADAS 感知前视摄像头、雷达、域控制器6Trunk 带标签
20车身控制网关、BCM、执行器5Trunk 带标签
30座舱音视频座舱主机、显示屏、功放3Trunk 带标签
40诊断与 OTAOBD 口、OTA 模块、网关1Trunk 带标签

在这个案例中,摄像头接在 Access 口、PVID=10,出帧去标签直接送给域控制器;域控制器上联口设为 Trunk,承载 VLAN 10/20/30/40,出帧保留标签。这样,当音视频流量突发时,PCP=6 的感知帧仍能被优先调度,而 PCP=1 的 OTA 帧在拥塞时可以被丢弃。需要注意,PCP 只是优先级标记,真正能否获得优先转发还取决于交换机队列调度和 TSN 配置,二者要配合使用。

工程建议:先画清楚“哪个端口属于哪个 VLAN、出口是否带标签”,再写配置。VLAN 划分混乱往往不是配置命令写错,而是端口成员关系没有提前定义清楚。
常见错误:把 Trunk 口误设为 Access 口,导致多个 VLAN 的帧被错误归类到 PVID;或把安全关键流量的 PCP 设得过低,在拥塞时被音视频流量挤占。配置后务必用抓包和统计寄存器双重确认。

掌握帧结构与 VLAN 配置后,下一步才能在此基础上讨论 TSN 的时间感知调度、帧抢占和流量整形。本节的重点是:先看清帧里有什么,再决定端口怎么过滤、怎么插入标签,最后用实际抓包和计数验证配置是否达到预期。