2. CAN总线基础
CAN(Controller Area Network)是车载与工业控制领域最常用的现场总线之一。要做好CAN网络异常检测与安全监控,必须先理解它的底层“游戏规则”:报文长什么样、多个节点同时发言时谁先说话、出错后如何收敛、以及位定时与物理层如何决定信号能否被正确采样。本节围绕这四件事展开,为后续的异常识别与入侵检测建立判据基础。
一、CAN协议帧结构:数据帧是监控的基本单位
CAN 2.0A 使用11位标识符的标准帧,CAN 2.0B 使用29位标识符的扩展帧。二者在仲裁段长度不同,但数据帧主体结构一致。以标准数据帧为例,其字段顺序为:帧起始(SOF)、仲裁段(11位ID + RTR)、控制段(IDE、r0、4位DLC)、数据段(0~8字节)、CRC段(15位CRC + CRC界定符)、ACK段(ACK槽 + ACK界定符)、帧结束(EOF,7个隐性位)。
监控系统最常提取的字段包括:ID(用于判断报文合法性)、DLC(判断长度是否异常)、数据字节(用于周期性与数值范围检测)、以及帧间隔时间(用于周期抖动分析)。需要特别注意的是,CAN帧没有源地址与目的地址,ID既表示内容优先级,也常被用作“报文身份”,因此ID伪造是常见攻击面。
标准数据帧字段(从左到右):
SOF | 11位ID | RTR | IDE | r0 | DLC(4) | Data(0~8B) | CRC(15) | CRCdel | ACK | ACKdel | EOF(7)
扩展帧差异:
SOF | 11位基本ID | SRR | IDE | 18位扩展ID | RTR | r1 | r0 | DLC | Data | CRC | ACK | EOF
二、仲裁机制:非破坏性逐位仲裁
CAN采用载波监听多路访问/冲突避免(CSMA/CA)与逐位仲裁。总线上显性位(逻辑0)会覆盖隐性位(逻辑1)。当多个节点同时发送时,每个节点在发送每一位的同时回读总线电平;若某节点发送隐性位却读到显性位,说明有更高优先级报文在竞争,该节点立即退出发送并转为接收,且不会破坏已获胜报文的任何一位,这就是“非破坏性仲裁”。
仲裁结果由ID决定:ID数值越小,优先级越高。因此安全监控中若发现某低优先级ID长期抢占高优先级ID的发送窗口,或高优先级ID出现异常高频,往往意味着总线负载异常或存在恶意注入。仲裁段之后,RTR位区分数据帧与远程帧,IDE位区分标准帧与扩展帧,这些位也是异常检测的特征点。
三、错误处理:错误计数与节点状态机
CAN节点内置发送错误计数器(TEC)与接收错误计数器(REC),并据此在错误主动(Error Active)、错误被动(Error Passive)与总线关闭(Bus Off)三种状态间迁移。检测到错误时,节点会发送错误帧:错误主动节点发送主动错误帧(6个显性位),错误被动节点发送被动错误帧(6个隐性位)。
常见错误类型包括:位错误、填充错误、CRC错误、格式错误与ACK错误。位填充规则要求发送方在连续5个相同极性位后插入1个相反位,接收方自动去除;若违反该规则即触发填充错误。错误处理机制使总线具备故障收敛能力,但也会被攻击者利用:例如持续注入错误帧可迫使某节点进入Bus Off,从而造成“合法节点被踢出总线”的拒绝服务效果。
| 错误类型 | 触发条件 | 典型原因 | 监控关注点 |
|---|---|---|---|
| 位错误 | 回读电平与发送不一致 | 仲裁丢失、物理层干扰 | 是否集中在仲裁段 |
| 填充错误 | 连续6个相同极性位 | 位定时偏差、噪声 | 错误帧频率突增 |
| CRC错误 | CRC校验不匹配 | 干扰、注入篡改 | 是否伴随ID异常 |
| 格式错误 | 固定格式位出现非法电平 | 帧结构被破坏 | 是否来自同一节点 |
| ACK错误 | 发送方未收到显性ACK | 无接收节点、总线断开 | 节点掉线排查 |
四、位定时与物理层特性
CAN位时间被划分为若干时间段:同步段(Sync_Seg)、传播段(Prop_Seg)、相位缓冲段1(Phase_Seg1)与相位缓冲段2(Phase_Seg2)。采样点位于Phase_Seg1与Phase_Seg2之间。常用参数包括波特率、采样点位置(通常建议75%~87.5%)与同步跳转宽度(SJW)。若采样点设置不当,长线缆或节点间晶振偏差会导致采样错误,表现为间歇性错误帧。
物理层方面,高速CAN采用差分信号CAN_H与CAN_L,显性电平对应约2V压差,隐性电平对应约0V压差,终端电阻为120Ω,两端各一个。常见物理层问题包括:终端电阻缺失导致反射、屏蔽接地不当引入共模干扰、支线过长导致信号完整性下降。这些问题在监控数据中常表现为错误计数上升、重传增多与周期抖动。
典型位定时配置(500 kbps,采样点80%):
Sync_Seg = 1 TQ
Prop_Seg = 6 TQ
Phase_Seg1 = 1 TQ
Phase_Seg2 = 2 TQ
SJW = 1 TQ
总位时间 = 10 TQ,采样点位于第8个TQ结束处
五、案例与复盘:从错误帧定位物理层故障
某测试台架在运行约20分钟后频繁出现CRC错误与填充错误,监控系统记录到错误帧集中在两个节点之间。排查发现:该段支线长度超过1米,且一端终端电阻未接入。恢复120Ω终端并缩短支线后,错误计数在10分钟内回落至基线。复盘要点:错误帧不是“软件问题”的同义词,应先核对位定时与物理层,再怀疑协议栈或应用逻辑。
综上,CAN的帧结构决定了可观测字段,仲裁机制决定了优先级与竞争行为,错误处理决定了节点状态与故障收敛,位定时与物理层决定了信号能否被可靠采样。这四者共同构成后续异常检测与安全监控的底层判据:任何偏离基线的ID、DLC、周期、错误计数或采样行为,都值得进一步关联分析。