3、车载以太网数据链路层:MAC地址与帧结构、VLAN标签与优先级、MAC安全与MACsec基础
好,咱们今天聊聊数据链路层。这一层在车载以太网里,说实话,比传统IT网络要“重”得多。为什么?因为车上跑的报文,很多都是跟安全、实时控制相关的。你丢一个CAN报文可能车抖一下,但丢一个以太网诊断报文,可能ECU就进跛行模式了。
我个人习惯,看数据链路层先看三个东西:地址怎么标、帧怎么装、安全怎么保。咱们一个一个来。
3.1 MAC地址:不只是个编号
MAC地址,48位,6个字节。这个大家都知道。但在车上,我遇到过一个问题:很多工程师以为MAC地址只要唯一就行,随便写一个。嗯,这里要注意——车载网络里,MAC地址是有分配规范的。
为什么?因为诊断工具、刷写工具,很多时候是靠MAC地址来识别节点的。你乱写一个,轻则工具连不上,重则两个ECU冲突,整个网段瘫痪。
关键点:车载ECU的MAC地址,建议使用OUI(组织唯一标识符)中分配给汽车领域的那一段。比如,IEEE给某Tier1分配了特定段,你就别用别的。
我建议,在项目初期就定好MAC地址分配表。哪个ECU用哪个段,写清楚。我曾经在一个项目里,因为MAC地址冲突,排查了整整两天。最后发现是两个供应商用了同一个私有地址段。你说冤不冤?
3.2 帧结构:以太网帧在车上怎么变
标准以太网帧,大家应该都背过:前导码、目标MAC、源MAC、类型/长度、数据、FCS。但在车载环境里,帧结构有两点特殊之处。
第一,帧长。 标准以太网帧最小64字节,最大1518字节。但车载诊断报文,很多是短报文,比如UDS的单个请求可能就几个字节。这时候,如果按标准帧发,后面全是填充字节。浪费带宽吗?其实还好,但要注意:有些老旧交换机对短帧处理有问题,会丢包。
第二,帧类型。 车载以太网常用0x0800(IPv4)、0x8100(VLAN)、0x88E5(MACsec)。我建议你记住0x8100,因为VLAN在车上太常用了。
小技巧:抓包时,看到帧类型是0x8100,别慌。这不是错误,是VLAN标签。后面跟着的4个字节,才是真正的VLAN信息。
3.3 VLAN标签与优先级:给报文分个“车道”
VLAN,说白了就是在同一个物理网络里,划出几个逻辑网络。车上为什么需要这个?你想想看,诊断流量、控制流量、娱乐流量,都跑在同一根线上。如果不分开,诊断报文把带宽占满了,控制报文就卡住了。这能忍?
VLAN标签,4个字节。其中12位是VLAN ID,3位是优先级(PCP)。优先级这个,我重点说一下。
PCP优先级,从0到7。7最高,0最低。在车载网络里,我建议这样分配:
| 优先级 | 用途 | 典型报文 |
|---|---|---|
| 7 | 最高优先级,安全关键 | 制动控制、转向控制 |
| 5-6 | 高优先级,实时诊断 | UDS诊断请求、刷写数据 |
| 3-4 | 中优先级,普通数据 | 传感器数据、状态上报 |
| 0-2 | 低优先级,非关键 | 日志上传、OTA下载 |
我在项目中遇到过一个问题:某供应商把诊断报文优先级设成了0。结果在交换机里,跟娱乐流量抢带宽,诊断超时。后来改到5,问题解决。说白了,优先级不是摆设,你得真用起来。
3.4 MAC安全与MACsec基础
MACsec,IEEE 802.1AE。这东西在车上越来越重要。为什么?因为现在很多攻击,是从链路层入手的。比如,伪造一个MAC地址,冒充网关发报文。你应用层再安全,链路层被攻破了,也没用。
MACsec的原理,说白了就是在以太网帧后面加一个安全标签(SecTAG)和一个ICV(完整性校验值)。它提供两种保护:
- 加密: 数据部分加密,防止窃听。
- 完整性校验: 防止报文被篡改。
但注意,MACsec不是万能的。它只保护一跳(点对点)。也就是说,从ECU A到交换机这一段是安全的,但交换机内部处理时,报文是明文的。所以,如果你需要端到端安全,还得靠IPsec或TLS。
警告: 不要以为用了MACsec就万事大吉。我曾经见过一个项目,MACsec配置错了,导致所有诊断报文都被丢弃。排查了三天,最后发现是密钥协商失败。嗯,MACsec的密钥管理,是个坑,后面咱们会专门讲。
MACsec在车载上的典型应用场景:
- 网关与域控制器之间的通信
- 诊断工具与ECU之间的直连
- OTA刷写时的安全通道
我个人习惯,在项目初期就把MACsec的密钥管理方案定好。是用预共享密钥,还是用802.1X动态协商?车上环境,预共享密钥更常见,但密钥更新是个麻烦事。你想想看,几千台车,每台车的密钥都不一样,怎么管理?
好了,这一章就到这。数据链路层,说白了就是给报文“穿衣服”。地址穿对、标签贴对、安全锁锁好,这层就稳了。下一章,咱们聊网络层,IP地址怎么分、路由怎么走。到时候见。