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校验 | 硬件自动计算,丢帧靠它 |
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多播组。
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(低优先级) | 固件包、日志上传 |
3.4 MAC层流量控制(802.3x):防止“撑死”接收端
车载网络里,发送端和接收端的处理速度可能不匹配。比如摄像头以100Mbps狂发视频流,但接收端的域控制器CPU正忙着做目标检测,来不及处理。这时候就需要流量控制。
802.3x定义了两种机制:
- Pause帧: 接收端缓存快满时,发一个Pause帧给发送端,告诉它“停一下,等我消化完”。Pause帧里有个时间参数,单位是512比特时间。
- 优先级流量控制(PFC,802.1Qbb): 车载里更常用。因为Pause帧是停掉所有流量,但车里有些高优先级报文(比如制动信号)不能停。PFC可以针对特定优先级队列做暂停。
我个人的习惯是:在车载交换机上,对ADAS和动力域端口开启PFC,对娱乐和诊断端口只开普通Pause。这样既能保证关键报文不丢,又不会让低优先级流量饿死。
3.5 本章知识体系:一张图看懂
下面这张SVG图,把数据链路层的核心逻辑串起来了。从帧结构出发,到MAC地址、VLAN标签,再到流量控制,你可以看到它们在实际车载网络中的协作关系。
3.6 小结:链路层是车载网络的“交通规则”
数据链路层不负责数据内容,它只关心数据怎么传、传给谁、能不能传。MAC地址是门牌号,VLAN标签是小区分区,流量控制是红绿灯。
这三样东西配合好了,车载网络才能稳定、安全、高效。我见过太多项目,链路层配置一塌糊涂,上层应用再怎么优化也救不回来。
所以,别觉得链路层“底层”就不重要。恰恰相反,它是整个车载通信的基石。