车联网安全-Can总线通信协议

admin 2023年11月20日21:08:08评论14 views字数 2564阅读8分32秒阅读模式

 Can总线是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

CAN总线的特点

CANH和 CANL分别连接到OBD-II连接器的引脚6和引脚14(一般情况)

CANH 3.5V左右  CANL 1.5V左右


短帧Can

数据场8字节,数据量小,发送/接收时间短,实时性高,被干扰概率小,适合汽车通信。


双线差分信号

单片机的数据信号为正逻辑信号,经CAN发送器中的差分放大器转换为双向的差分信号,以负逻辑信号形式表示数据。

01,U diff = CAN_H - CAN_L


多主方式工作

各节点平等,任意一个节点均可以在任意时刻主动网总线上发报文,而不区分主从,每条报文内容通过标识符(ID)识别,标识符在网络中唯一。仲裁实现——非破坏性仲裁:


回读+线与


回读

step1:只有总线处于空闲状态时,ecu才能向总线发送信息,CAN构件通过RX线去检测总线电平,如果某一段时间内,总线电平一直为1,表示总线空闲,信息就会被发出去。

step2:在发送过程中,接收器(RX线〉接收发送的信息,检查是否正确(发出去的位和回读的位是否一致(一位一位的进行比较),不一致停发,并转为接收状态。


线与  为什么上面的回读会读到不一致的位呢?这归功于线与机制。线与机制设定标识符中位于前方的0具有高优先段,O的个数越多(ID值越小)优先级越高(可以理解为总线O显性电平覆盖1隐性电平),即表现为:总线报文中ID越小,优先级越高。

车联网安全-Can总线通信协议

NRZ不归零制:

比起归零制,相同字节大小能携带更多信息,但是电平跳变不明显,容易因为误差而导致错误帧

位填充:

不归零制如果长时间不跳变保持相同电平会有误差,为了减少误差,位填充可以解决部分这个问题

5011:每五个相同的极性位,填充一个相反的极性位

数据一致性:

接口抗电磁干扰能力、CRC检验、错误报文重发,临时错误恢复,永久错误的关闭等

车联网安全-Can总线通信协议

Can帧的格式

数据帧:

数据帧一共有两种类型:标准帧和扩展帧,它们最本质的区别为帧ID的长度不同。其中标准帧的帧ID范围为0-7FF,扩展帧的帧ID范围为0-1FFF FFFF

车联网安全-Can总线通信协议

0.SOF 帧起始

一位显性0,用于同步,仅有总线空闲期间可发送(当总线上有连续11位隐性位)

1.仲裁场

标准帧:11bit ID + 1bit RTR + IDE(控制场)

扩展帧:11bit ID + SRR +IDE + Extended ID +RTR

车联网安全-Can总线通信协议

2.控制场

标准帧:IDE + r0 + DLC

扩展帧:r1 + r0 + DLC

DLC 表示数据场长度 0~8字节有效 9~15字节无效

3.数据场

存放数据

4.CRC场

FCS + DEL

 发送节点从SOF开始到数据场结束,计算一个FCS冗余码放到CRC场前15位中,接受节点收到后同样进行计算,结果和CRC场的FCS比较,检查帧是否有效;

DEL: CRC界定符,隐性1固定格式

#仅对CRC界定符之前的数据进行位填充(5011)

5.ACK场

ACK + EDL

 当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性0。发送节点根据此结果判断发送成功。

发送节点通过读到ACK位显性0,发送成功。


远程帧:

 接收节点向发送节点请求数据,无数据场,其余格式和数据帧一样 RTR=1 SRR =1

车联网安全-Can总线通信协议


错误帧:

 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了

错误帧由错误标志和错误界定符两个部分组成

在CAN总线通信中,一共有五种错误:位错误、ACK错误、填充错误、CRC错误、格式错误。

1.位错误(ACK和仲裁场除外)

 节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误

2.ACK错误

 当发送节点Node_A在ACK槽时间段内没有回读到显性位,那么发送节点Node_A就会检测到一个ACK应答错误。这表示没有一个节点成功接收该帧报文

3.填充错误

 在需要执行位填充原则的帧段(数据帧遥控帧的SOF~CRC序列),检测到连续六个同性位,则检测到一个填充错误

4.CRC错误

 接收节点Node_B计算出的CRC序列值与发送节点Node_A发来的CRC序列值不一致,那么接收节点就检测到一个CRC错误

5.格式错误

如果在必须发送预定值的区域内检测到了非法值,那么就检测到一个格式错误。CAN报文中,有预定值的区域包括:

  • 数据帧和远程帧的CRC界定符、ACK界定符、EOF;

  • 错误帧界定符

  • 过载帧界定符


错误状态:

主动错误状态:

处于主动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出主动错误标志(六个连续的显性位),破坏发送的错误数据帧,随后发送8bit错误界定符+3bit帧间间隔(11位连续隐形位)表示总线空闲

被动错误状态:

处于被动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出被动错误标志(六个连续的隐形位),不影响发送的错误数据帧。

bus off状态:

节点处于总线关闭状态,那么该节点不能收发报文;处于总线关闭状态的节点,只能一直等待,等到检测到128次11个连续的隐性位时,TEC和REC置0,重新回到主动错误状态。


三态转换:

在CAN节点内,有两个计数器:发送错误计数器(TEC)和接收错误计数器(REC)

TEC:

发送节点在发送时检测出错误,发送错误标志/过载标志时增加(+8) ;发送单元收到一次ACK后—1 (TEC=0时不操作);

REC:

节点接收到错误标志/过载标志后增加

车联网安全-Can总线通信协议



一条简单的CAN总线UDS诊断报文

02 10 01 00 00 00 00 00
02表示消息UDS服务的有效字节数 10 01 为两个字节
10表示请求的UDS服务ID
01表示请求UDS服务的subfuctions
00 00 00 00 00是具体的数据,这里数据为空


Can总线攻击面:

主要有重放攻击、恶意消息注入、DOS攻击、假冒节点攻击等多种方式,留待后续的文章更新

原文始发于微信公众号(安全攻防屋):车联网安全-Can总线通信协议

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月20日21:08:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   车联网安全-Can总线通信协议https://cn-sec.com/archives/2222785.html

发表评论

匿名网友 填写信息