2、车载网络协议基础:CAN/CAN FD协议详解、LIN协议基础、以太网协议基础、车载网络拓扑结构
大家好,我是老张。在车载网络安全这个领域摸爬滚打了十几年,今天咱们来聊聊车载网络协议的基础。说实话,不管你是做测试还是做开发,这些协议都是绕不开的坎儿。我见过太多新人一上来就搞安全测试,结果连CAN报文都看不懂,那真是白费功夫。
车载网络协议,说白了就是车上各个ECU之间沟通的「语言」。你想想看,一辆车上有几十甚至上百个ECU,它们得互相说话、协同工作。没有一套统一的协议,那不乱套了?今天我就把最常用的几种协议掰开揉碎了讲给你听。
2.1 CAN/CAN FD协议详解
CAN总线,全称是Controller Area Network。这东西1986年就发明了,到现在还在用,生命力是真的强。我最早接触CAN总线是在2008年,那时候做车身控制模块的测试,用的还是经典CAN。
经典CAN(CAN 2.0),它的数据场最多只能带8个字节。你可能会问:「8个字节够用吗?」说实话,对于大部分控制信号,比如车速、转速、车门状态,8个字节绰绰有余。但问题是,现在车上功能越来越多,比如OTA升级、ADAS数据,8个字节就捉襟见肘了。
于是就有了CAN FD(Flexible Data-rate)。CAN FD最大的变化有两个:
- 数据场长度扩展:从8字节扩展到最多64字节
- 可变速率:数据段可以切换到更高的波特率,比如2Mbps甚至5Mbps
我举个例子你就明白了。经典CAN就像一条两车道的公路,限速60公里/小时,每辆车最多拉8个人。CAN FD呢,相当于把路拓宽到八车道,而且限速提到了120公里/小时,每辆车能拉64个人。效率提升不是一星半点。
重要概念:CAN报文结构
一个标准的CAN数据帧包含以下部分:
- SOF(帧起始):1位,同步信号
- 仲裁场:11位(标准帧)或29位(扩展帧)ID + RTR位
- 控制场:IDE位、保留位、DLC(数据长度码)
- 数据场:0-8字节(CAN)或0-64字节(CAN FD)
- CRC场:15位(CAN)或17/21位(CAN FD)
- ACK场:2位
- EOF(帧结束):7位
这里我要特别提一下仲裁机制。CAN总线是广播式的,所有节点都能看到总线上的报文。那如果两个节点同时发报文怎么办?靠ID仲裁。ID越小,优先级越高。我曾在项目中遇到过一个问题:某个ECU的ID设得太低,结果它一直抢占总线,导致其他高优先级报文发不出去。嗯,这个坑我踩过,你们要注意。
我的经验之谈:在做CAN FD测试时,一定要关注采样点位置。CAN FD的位时间更短,采样点设置不当会导致误码率飙升。我一般习惯把采样点设在75%-80%的位置,这个区间比较安全。
2.2 LIN协议基础
说完CAN,咱们聊聊LIN。LIN的全称是Local Interconnect Network,说白了就是CAN的「小弟」。为什么这么说?因为LIN总线成本低、速度慢,专门用来控制那些对实时性要求不高的设备,比如车窗、座椅、后视镜。
LIN总线有一个主节点和多个从节点。主节点负责调度,从节点只能听命令。这种主从结构的好处是简单,坏处是灵活性差。我记得有一次做测试,主节点坏了,整个LIN网络都瘫痪了,车窗都摇不下来。从那以后,我特别强调主节点的冗余设计。
LIN的报文格式是这样的:
- 同步间隔场:至少13个显性位,用于同步
- 同步场:0x55,用于时钟校准
- 标识符场:6位ID + 2位奇偶校验
- 数据场:1-8字节
- 校验和场:1字节
LIN的波特率通常只有20kbps,跟CAN的500kbps比起来,简直是龟速。但胜在便宜,一根线就能搞定。你想想看,车窗开关这种信号,每秒传一次就够了,要那么快干嘛?
注意:LIN总线没有错误重传机制。如果报文传错了,就丢了。所以对于安全相关的功能,比如刹车、转向,绝对不能用LIN。这是底线,不能碰。
2.3 以太网协议基础
接下来是重头戏——车载以太网。这几年车载以太网越来越火,原因很简单:数据量太大了。摄像头、激光雷达、高精地图,这些动辄几百兆甚至上G的数据,CAN和LIN根本扛不住。
车载以太网和普通以太网有什么不同?我总结了几点:
- 物理层不同:车载以太网用单对非屏蔽双绞线,普通以太网用两对或四对
- 速率不同:目前主流是100BASE-T1(100Mbps)和1000BASE-T1(1Gbps)
- 延迟要求不同:车载以太网对延迟极其敏感,尤其是ADAS系统
车载以太网最常用的协议栈是Some/IP和DDS。Some/IP是AUTOSAR的标准,适合传统的ECU通信。DDS呢,更适合分布式系统,比如自动驾驶。
我举个例子。Some/IP就像打电话,你拨号、对方接听、然后通话。DDS就像微信群发消息,你发一条,所有订阅的人都能收到。这两种模式各有优劣,看场景选择。
关键知识点:AVB/TSN
车载以太网要实现实时通信,离不开AVB(Audio Video Bridging)和TSN(Time-Sensitive Networking)。TSN的核心是时间同步和流量调度。简单说,就是给每个报文分配一个时间槽,确保高优先级报文准时到达。
我在做ADAS测试时,就遇到过因为TSN配置不对,导致摄像头数据延迟超过1ms,结果车辆紧急制动慢了半拍。这种问题在测试阶段发现还好,要是量产了,后果不堪设想。
2.4 车载网络拓扑结构
最后咱们聊聊拓扑结构。车载网络不是单一的总线,而是多种总线混合在一起的「网络之网」。常见的拓扑有这几种:
| 拓扑类型 | 特点 | 典型应用 |
|---|---|---|
| 总线型 | 所有节点共享一根线,成本低 | CAN、LIN |
| 星型 | 中心节点管理所有通信 | 以太网(交换机) |
| 环型 | 数据沿环传输,可靠性高 | FlexRay(已较少使用) |
| 混合型 | 多种拓扑组合 | 现代汽车(最常见) |
现代汽车的网络拓扑,我画个简图你就明白了:
网关(中央网关)
├── CAN总线1(动力系统:发动机、变速箱)
├── CAN总线2(车身系统:门窗、灯光)
├── CAN FD总线(ADAS:雷达、摄像头)
├── LIN总线(车窗、座椅)
└── 以太网(信息娱乐、OTA)
网关是核心,它负责不同总线之间的数据转发。比如,你按一下车窗开关,这个信号从LIN总线传到网关,网关再转发到CAN总线上的车身控制模块。没有网关,这些总线就是信息孤岛。
我记得有一次做渗透测试,发现网关的防火墙规则没配好,攻击者可以从信息娱乐系统直接访问动力系统的CAN总线。这要是被利用了,后果你懂的。所以,网关的安全配置是重中之重。
我的建议:在做网络拓扑设计时,一定要遵循「最小权限」原则。不同域之间尽量隔离,只开放必要的通信路径。比如,信息娱乐域和动力域之间,最好只允许特定ID的报文通过。
好了,这一章的内容就到这里。车载网络协议这块,内容确实不少,但都是基础中的基础。你把这些搞懂了,后面做安全测试才能得心应手。下一章咱们聊聊CANoe的基本操作,到时候我会手把手教你搭建第一个测试工程。
公众号:蓝海资料掘金营,微信deep3321