THECARHACKER’SHANDBOOK解读第二章

admin 2026-04-25 04:53:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本章详细解析汽车总线协议,重点介绍CAN总线的工作原理、数据包结构及在车辆网络中的应用。CAN总线通过差分信号传输数据,OBD-II连接器提供标准接入点。文档还对比了ISO-TP协议的扩展传输机制、CANopen的对象字典架构以及LIN协议的主从控制模式,为车辆通信安全研究提供技术基础。 综合评分: 78 文章分类: 车联网安全,IoT安全,技术标准,协议分析,其他


cover_image

THE CAR HACKER’S HANDBOOK 解读第二章

原创

朝阳 朝阳

Sec朝阳

2026年3月27日 14:16 浙江

在小说阅读器读本章

去阅读

总线协议

本章讨论车辆通信中常见的不同总线协议。

总线协议控制着数据包在车辆网络中的传输,多个网络和数百个传感器在这些总线系统上通信,发送控制车辆行为及网络在任何时刻掌握信息。

其中一种协议,CAN 总线,存在于所有车辆的标准位置:OBD-II 连接器上。不过车辆 CAN 总线传输的数据包本身并未统一。

车辆关键通信,如转速管理和制动,发生在高速 CAN 线上,而非关键通信,如车门锁和空调控制则用在低速 CAN 线上。

1、CAN 总线

CAN 是一种在制造业和汽车行业中使用的简单协议。现代车辆配备了许多小型嵌入式系统和电子控制单元(ECU),这些设备可以使用 CAN 协议进行通信。

CAN 通过两根导线运行:CAN 高电平(CANH)、CAN 低电平(CANL)。CAN 采用差分信号,意味着信号进入时,CAN 会在一条线路上提高电压,同时降低另一条线路的电压。差分信号用于对噪声具备容错性的环境,如汽车系统和制造业。

上图为 CAN 差分信号,使用 PicoScope 捕获的信号,该设备同时监听 CANH(顶部较深的线)和 CANL(图底较浅的线)。

传感器和 ECU 配置收发器,用于检查是否同时触发两个信号;如果不是,收发器会将该数据包作为噪声来拒绝。

2、OBD-II 连接器

许多车辆配置了 OBD-II 连接器,也成为诊断链路接口(DLC),用于车辆内部网络通信。通常在方向盘柱下方或仪表盘其他相对容易接近的位置。

3、寻找 CAN 连接

CAN 在寻找电缆时很容易找到,它的静止电压是 2.5V。当信号输入时,会增加或减去 1 V。CAN 线穿过车辆,连接 ECU 和其他传感器,且总是双线成对。如果用万用表检查车辆内的电线电压,会发现它们静止电压为 2.5 V,或者波动 1 V,如果发现一根传输电压为 2.5 V的线,几乎可以判断是 CAN。

可以在 OBD-II 连接器的第 6 和第 14 针脚找到 CANH 和 CANL 连接。

在图中,6号和14号引脚用于标准高速CAN线路(HS-CAN)。中速和低速通信使用其他引脚。

注:这里的 CANH 和 CANL 指的是 CAN 高电平和低电平,与传输速度无关,仅代表这两个针脚为标准高速CAN(500kbps)。

一些汽车在中速和低速中使用 CAN,但许多车用不同的通信协议。我们会发现并非所有的总线都通过 OBD-II 暴露。

4、CAN 总线包发布

CAN 包有两种类型:标准包和拓展包。拓展包类似于标准包,但有更大的空间存放 ID。

标准数据包

每个 CAN 总线都包含 4 个关键元素:

仲裁 ID:仲裁 ID 是一条广播信息,用于识别试图通信设备的 ID,尽管任何一个设备都可以发送多个仲裁 ID。如果同时沿总线发送两个 CAN 数据包,仲裁 ID 较低的会优先处理,紧急程度也会更高。

标识符拓展(IDE)对于标准 CAN 来说,始终为 0。

数据长度码(DLC),这是数据的大小,范围是 0-8字节。

标准 CAN 总线数据包携带最大数据大小可达 8 字节,但有些系统会填充数据包达到 8 字节。

这里一定要清晰一点,CAN 数据包中的数据长度才是8字节,也就是图中 Data 部分,整个 CAN 数据包实际上要 44 到 108 个字节(标准帧)。

这里再介绍一下 CAN 总线包的特性,他其实是广播式的,同一网段所有 ECU 都能看到每个数据包,和 UDP 差不多,

这里我们整体拆解一下 CAN 数据包。

1、帧开始

首先最开头的部分,帧开始,1bits 大小,我们也能观察到图中电路的变化,电路水平从 1 变为 0 了,相当于告诉大家我要开发发包了。

2、仲裁ID

紧接着 11 bits 的仲裁 ID(Arbitration ID),这是报文 ID,这部分越小,优先级越高。

3、远程发送请求(RTR)

我们看到仲裁 ID 后面跟着 1 bits 的数据,这是远程发送请求(RTR),0 代表数据帧(我要发送数据);1 代表远程帧(我要获取数据)。

4、标志扩展位(IDE)与保留位(R0/R)

在整个仲裁 ID 结束后,我们能看但两个单独的字节,其中 IDE 为标志扩展位,0 代表标准帧(11 位 bits ID),1  代表扩展帧(29 位 bits ID)。

还有 1 字节的保留位,目前固定为 0 ,留以后升级协议使用(比如 CAN FD 就在动这里)。

5、数据长度码(DLC)与数据段

4 字节组成,代表后面 Data 段字节数 0-8。

Data,0-64 bits(8 字节)。

6、校验段(CRC)

这里是循环冗余校验,15 bits 大小。

7、校验界定符

DEL,1 bit,固定为 1。

8、应答段与帧结束EOF

ACK,1 bit,发送方发 1,接收方收到了会将其置为 0,作为回应。

7 bits,全是1,代表数据结束。

5、ISO-TP 协议

ISO 15765-2,也称为 ISO-TP,是一种通过 CAN 总线发送数据包的标准,通过 CAN 数据包串联,将 8 字节 CAN 限制扩展到支持最多 4095 字节。ISO-TP 最常见的用途是诊断和 KWP 消息(CAN 的替代协议),但也可用于需要通过 CAN 传输大量数据时。

can-utils 程序包含 isotptun,这是一个可用于 SocketCAN 的概念验证隧道工具,允许两个设备通过 CAN 进行 IP 隧道传输。

为了将 ISO-TP 封装 CAN,第一个字节用于扩展寻址,每个数据包只剩 7 字节用于数据。

以下这张图作为区分:

我们所提及的 ISO 15765-2,也就是 ISO-TP,他本质适用于传输的。

这里这些协议栈相互交错,比较难区分。

协议区分

这里再归纳一下:

UDS (ISO 14229 汽车诊断协议)

主要作用于应用层,他是定义了诊断服务 ID(SID) 和数据格式。他只规定请求什么和如何响应,完全独立于底层的通信介质。

核心字段如SID(0x22 读服务 0x2E 写服务) + Indentifier(如 0xF190 VIN码)

DoIP (ISO 13400 基于 IP 的诊断通信协议)

是位于传输层/网络层拓展,他本质是诊断仪与网关之间的边缘节点协议,他利用 TCP/IP 承载 UDS,主要在复杂的 IP 网络中定位车辆并建立诊断逻辑连接。

他的核心机制就是路由激活、车辆发现、节点地址映射,解决从“外网”进入到“内网”的准入问题。

ISO-TP (ISO 15765-2 CAN 传输协议)

他定位于传输层,其实他的本质是 CAN 总线专用的数据拆解与流控协议。因为底层 CAN 链路层的数据长度(DLC)受限制,他必须在应用层和链路层之间做一个切片管理。

他的核心机制才是 SF(单帧)、FF(首帧)、CF(连续帧)、FC(流控帧)。

而我们最熟悉的是 CAN 协议 (ISO 11898),他的定位是数据链路层与物理层,它的本质是汽车底层串行通信协议。他只负责在总线上进行位仲裁、拆分信号传输、CRC 验证和基础数据帧投递。

6、CANopen 协议

CANopen 是基于 CAN 总线的高层协议,他最核心的特点就是把 11 位的 CAN ID 给拆了。

Function Code(4位):代表这帧报文功能(如紧急停止、发送数据)

Node ID(7位):代表是哪个设备的 ID。

合起来这两个叫做 COB-ID。

该协议的核心灵魂是对象字典:

CANopen :每个设备里都有一个大表,叫对象字典,每一行都有一个 Index(索引) 和 Sub-index(子索引),比如索引 0x6060 对应模式选择,0x6040 对应控制字,如果想改参数,就直接去这张表中找对应行即可。

7、 本地互联网协议(LIN)

本地互连网络(LIN)是所有车辆协议中最便宜的一种。它的设计是为了补充 CAN。它没有仲裁或优先权代码;相反,单个主节点负责所有传输。

这里就截个图简单介绍一下。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Sec朝阳 朝阳 朝阳《THE CAR HACKER’S HANDBOOK 解读第二章》

评论:0   参与:  0