3. 车载以太网数据链路层:MAC地址、VLAN标签、以太网帧结构、MAC层流量控制(802.3x)

数据链路层,说白了就是让数据在物理线路上“有规矩地跑”。

车载以太网里,这一层尤其关键。为什么?因为车上跑的报文,优先级、实时性、隔离性,一个都不能少。我刚开始做车载项目时,总觉得链路层就是封装解封装,没啥技术含量。直到有一次,因为VLAN配置错了,导致ADAS的雷达数据串到了娱乐系统的CAN网关里,差点让测试车在路试时“抽风”。

嗯,从那以后,我再也不敢小看这一层了。

3.1 以太网帧结构:车里的“快递包裹”长什么样?

先看最基础的东西——帧结构。车载以太网用的帧,和标准IEEE 802.3基本一致,但有些字段在车里会被“玩出花”。

字段 长度(字节) 说明 车载场景注意点
前导码(Preamble) 7 同步时钟用 物理层处理,链路层不关心
SFD 1 帧起始定界符 同上
目标MAC 6 接收方地址 单播/多播/广播,车里常用多播
源MAC 6 发送方地址 每个ECU有唯一MAC
802.1Q标签(可选) 4 VLAN + 优先级 车载必用,后面细讲
EtherType / 长度 2 标识上层协议 0x8100表示带VLAN标签
载荷(Payload) 46~1500 IP数据包 车里常用巨帧(最大9000)
FCS 4 CRC校验 硬件自动计算,丢帧靠它
个人经验: 车载环境里,我建议尽量用标准帧长,别为了省带宽硬塞巨帧。有些老款交换芯片对超过1500字节的帧处理有bug,我踩过这个坑。

3.2 MAC地址:ECU的“身份证”

每个车载以太网节点,都有一个48位的MAC地址。前24位是OUI(厂商代码),后24位是序列号。

但车里有个特殊点:很多ECU的MAC地址是动态分配的,或者由OEM统一规划。为什么?因为量产车成千上万台,如果每个ECU都用出厂固化的MAC,管理起来就是灾难。

  • 静态MAC: 用于网关、域控制器等固定节点。我习惯在BOM阶段就锁定。
  • 动态MAC: 用于传感器、摄像头等可替换部件。上电时通过SOME/IP或DHCP分配。
  • 多播MAC: 车载音视频流常用。比如0x01-00-5E-xx-xx-xx,对应IP多播组。
避坑指南: 我曾经遇到过一台测试车,两个摄像头MAC地址冲突,导致交换机MAC表不停抖动,整个网络丢包率飙升到30%。排查了整整两天才发现是产线烧录时重复了。所以,MAC地址唯一性管理一定要在产线流程里做校验。

3.3 VLAN标签:把一辆车“隔”成多个网络

VLAN(虚拟局域网)是车载以太网的灵魂。没有VLAN,你想想看——ADAS的紧急制动报文和娱乐系统的音乐流混在一起,万一拥堵丢包,后果不堪设想。

802.1Q标签插在源MAC和EtherType之间,共4字节:

  • TPID(2字节): 固定0x8100,告诉交换机“我带了VLAN标签”。
  • TCI(2字节): 包含3位PCP(优先级)、1位DEI(丢弃指示)、12位VID(VLAN ID)。

车载里,VLAN ID的规划通常是这样的:

VLAN ID 用途 优先级(PCP) 典型报文
1 管理/诊断 0(尽力而为) DoIP、UDS诊断
10 ADAS传感器 5(高优先级) 雷达点云、摄像头视频
20 动力/底盘控制 7(最高) 制动、转向、加速请求
30 信息娱乐 3(中优先级) 音频、视频、导航
100 OTA升级 1(低优先级) 固件包、日志上传
关键点: 车载交换机必须支持802.1Q的Tagged/Untagged端口配置。我建议所有ECU端口都配成Tagged模式,这样VLAN信息不会丢失,方便云端远程诊断时溯源。

3.4 MAC层流量控制(802.3x):防止“撑死”接收端

车载网络里,发送端和接收端的处理速度可能不匹配。比如摄像头以100Mbps狂发视频流,但接收端的域控制器CPU正忙着做目标检测,来不及处理。这时候就需要流量控制。

802.3x定义了两种机制:

  • Pause帧: 接收端缓存快满时,发一个Pause帧给发送端,告诉它“停一下,等我消化完”。Pause帧里有个时间参数,单位是512比特时间。
  • 优先级流量控制(PFC,802.1Qbb): 车载里更常用。因为Pause帧是停掉所有流量,但车里有些高优先级报文(比如制动信号)不能停。PFC可以针对特定优先级队列做暂停。

我个人的习惯是:在车载交换机上,对ADAS和动力域端口开启PFC,对娱乐和诊断端口只开普通Pause。这样既能保证关键报文不丢,又不会让低优先级流量饿死。

实战建议: 别把Pause帧的暂停时间设得太长。我见过一个项目,工程师把时间设成了最大值,结果发送端一停就是几十毫秒,导致视频流卡顿。一般设成4~8个时间单位就够了。

3.5 本章知识体系:一张图看懂

下面这张SVG图,把数据链路层的核心逻辑串起来了。从帧结构出发,到MAC地址、VLAN标签,再到流量控制,你可以看到它们在实际车载网络中的协作关系。

车载以太网数据链路层核心知识体系 车载以太网数据链路层核心知识体系 数据链路层 以太网帧结构 MAC地址 VLAN标签 MAC层流量控制 前导码+SFD MAC地址 VLAN标签 载荷+FCS 静态MAC 动态MAC 多播MAC 唯一性管理 TPID+TCI PCP优先级 VID划分 Tagged端口 Pause帧 PFC 暂停时间 优先级队列 核心要点 • 帧结构是基础,VLAN标签是车载网络的“隔离墙” • MAC地址必须全局唯一,产线校验不能省 • 流量控制用PFC,别让高优先级报文被Pause帧“误伤”

3.6 小结:链路层是车载网络的“交通规则”

数据链路层不负责数据内容,它只关心数据怎么传、传给谁、能不能传。MAC地址是门牌号,VLAN标签是小区分区,流量控制是红绿灯。

这三样东西配合好了,车载网络才能稳定、安全、高效。我见过太多项目,链路层配置一塌糊涂,上层应用再怎么优化也救不回来。

所以,别觉得链路层“底层”就不重要。恰恰相反,它是整个车载通信的基石。