第2章 车载网络协议基础

各位同学,今天我们来聊聊车载网络协议。说实话,我刚入行那会儿,面对CAN、CAN FD、以太网这些协议,也是一头雾水。但后来我发现,搞懂这些协议,其实就是搞懂车上的通信语言。你想想看,一辆智能汽车里,几十个ECU要协同工作,没有统一的协议怎么行?

2.1 CAN总线协议基础

CAN总线,全称Controller Area Network。这东西在车上用了快四十年了,至今仍是主力。我做过一个项目,客户非要全车换以太网,结果发现成本翻了三倍,最后还是老老实实保留了CAN。

CAN总线的核心特点:

  • 差分信号传输:CAN_H和CAN_L两根线,抗干扰能力强。我在测试时遇到过,线束被夹了一下,单端信号全乱了,但CAN还能正常跑。
  • 多主站架构:任何节点都能主动发消息,靠仲裁机制决定谁先发。优先级低的节点会自动退让。
  • 报文格式:标准帧11位ID,扩展帧29位ID。我个人习惯用标准帧,够用且效率高。

重点:CAN报文结构

一个标准CAN数据帧包含:SOF(起始帧)、仲裁场(ID+RTR)、控制场(DLC)、数据场(0-8字节)、CRC场、ACK场、EOF(结束帧)。

这里有个坑,我踩过。CAN总线的最大传输速率是1Mbps,但实际应用中,500kbps是主流。为什么?因为线束长度和节点数量会影响信号质量。我曾经为了追求速度,把速率调到1Mbps,结果在整车上测试时,总线错误帧满天飞。

避坑指南:我曾经在CAN总线终端电阻上吃过亏。记住,CAN总线两端必须各接一个120欧姆的终端电阻。少了它,信号反射会让你怀疑人生。

2.2 CAN FD协议基础

CAN FD,就是CAN的升级版。FD代表Flexible Data-rate。说白了,就是CAN跑不快了,得提速。

CAN FD相比CAN的改进:

  • 可变速率:数据段可以跑8Mbps,仲裁段还是原来的速率。这个设计很聪明,既兼容了老设备,又提升了效率。
  • 更大数据场:从8字节扩展到64字节。我做过一个OTA升级项目,用CAN FD传输固件,速度比CAN快了将近5倍。
  • 改进的CRC:17位或21位CRC,安全性更高。

嗯,这里要注意。CAN FD和CAN在物理层上是兼容的,但数据链路层不同。也就是说,CAN FD节点可以和CAN节点共存于同一总线,但CAN FD节点之间通信时,CAN节点只能当旁观者。

个人经验:我建议在防火墙规则中,对CAN FD报文要特别关注。因为数据场大了,攻击者可以塞更多恶意数据。我曾经在测试中发现,一个64字节的CAN FD报文,如果填充了精心构造的数据,能直接让接收ECU的缓冲区溢出。

2.3 车载以太网基础

车载以太网,这几年火得不行。为什么?因为自动驾驶和智能座舱需要高带宽。CAN那1Mbps的速率,传个高清视频都费劲。

车载以太网的关键技术:

  • 100BASE-T1 / 1000BASE-T1:单对非屏蔽双绞线,传输距离15米左右。我刚开始用的时候,总觉得这线太细了,不靠谱。结果测试下来,EMC性能比传统以太网还好。
  • AVB / TSN:时间敏感网络,保证实时性。说白了,就是让数据包按时到达,不卡顿。
  • SOME/IP:面向服务的中间件协议,后面会细讲。

车载以太网和普通以太网最大的区别是什么?你想想看,普通以太网是CSMA/CD,冲突了就重传。但在车上,你不能让安全气囊的触发信号因为冲突而重传。所以车载以太网用了不同的物理层和MAC层设计。

防火墙视角:车载以太网引入了IP地址和端口的概念,这意味着我们可以用传统的网络防火墙技术。但要注意,车载环境对延迟极其敏感,防火墙规则不能太复杂。

2.4 SOME/IP协议基础

SOME/IP,全称Scalable service-Oriented MiddlewarE over IP。这名字够长,但核心就一句话:让ECU之间像调用本地函数一样调用远程服务。

SOME/IP的核心概念:

  • Service / Method / Event:服务提供者发布服务,消费者调用方法或订阅事件。
  • SD(Service Discovery):服务发现协议,让ECU自动找到对方。我见过一个项目,SD报文占用了30%的网络带宽,后来优化了发布周期才解决。
  • 序列化:数据按TLV格式打包,支持复杂数据结构。

说实话,SOME/IP的报文结构有点复杂。一个典型的SOME/IP报文包含:Message ID、Length、Request ID、Protocol Version、Interface Version、Message Type、Return Code,然后是Payload。

安全提醒:我曾经在渗透测试中,通过伪造SOME/IP的Service Discovery报文,让一个ECU误以为自己是服务提供者,结果把错误的数据发给了所有订阅者。所以,防火墙必须对SOME/IP的SD报文做深度检测。

好了,这四种协议是车载网络的基础。搞懂了它们,你才能理解防火墙规则为什么要这么写。下一章,我们开始实战,写第一条防火墙规则。

课后思考:如果你要在CAN总线上实现一个简单的防火墙,你会怎么设计?是过滤ID,还是过滤数据内容?我个人建议先从ID过滤开始,因为简单可靠。等熟悉了,再考虑深度包检测。