目录
[5. 如何保证DoIP的网络安全](#5. 如何保证DoIP的网络安全)
1.什么是DoIP
DoIP全称Diagnostic Over Internet Protocol。
为什么要提这个话题?个人认为这是一个趋势:在智能网联汽车未发展之前,汽车ECU的升级、故障的诊断只能通过车主线下到4S店进行处理;
随着IoT的发展,汽车通过互联网进行连接,这就给OEM和车主极大的方便;当汽车有故障时,OEM通过互联网可以对ECU检索诊断信息,甚至可以进行远程维修;当汽车ECU需要升级时,OEM通过互联网对目标ECU进行升级。
这些功能实现主要依赖DoIP这个协议。
与传统的KWP2000或者DoCAN(Diagnostics on CAN)相比,DoIP具备更高数据传输速率、更高的带宽可加速ECU更新,通过使用现有的以太网基础设施降低了汽车布线的复杂性和成本,也给未来功能扩展提供了灵活性。
2.DoIP和UDS是什么关系
做诊断的朋友对UDS肯定是非常熟悉了。
UDS全称Unified Diagnostic Services,是诊断设备与车辆ECU通信的协议,属于应用层协议,具体可参考ISO 14229-1。它定义了汽车诊断通信的一系列服务,包括读取\清除DTC、读写DID等。UDS独立于物理层,这意味着它可以在不同的通信协议上实现,例如CAN、K-line、FlexRay以及以太网。
DoIP是传输层协议,规定了如何使用以太网技术让诊断设备与车内ECU之间进行通讯。它符合ISO 13400标准,其总体目标是封装UDS (Unified Diagnostic Services)等协议标准的诊断消息,并将其路由到ECU,如下图所示:
DoIP协议定义了如何建立和维护诊断会话、如何发送和接收诊断消息、如何处理错误等。它使用特定的消息格式和通信规则来确保数据的正确传输和解析。换句话说,UDS定义了各种诊断服务的具体内容和行为,而DoIP则负责将这些服务的数据通过IP网络传输。
3.DoIP消息格式
在车载以太网模型中,DoIP位于应用层(Layer 5~7),拆解出来如下图:
进一步的,DoIP Header和Payload具体包含如下内容:
- Protocol Version:用于表示当前使用的DoIP协议版本,例如0x02代表DoIP_ISO13400_2_2012,0x03代表DoIP_ISO13400_2_2019;
- Inverse Protocol Version:协议版本的取反;
- Payload Type,总结如下表所示:
可以看到,在标准里对DoIP报文的Payload类型分为了四大类:
- Generic DoIP header negative acknowledge(0x0000):当DoIP实体接收到DoIP报文中报头不符合规则时, 需回复Generic DoIP header NACK 报文,数据部分仅有1字节,具体错误码如下:
- 车辆识别(蓝色部分):该类型报文用于识别网络上被诊断的车辆,通过这类报文可以获取车辆的VIN码、GID(Group Identification)、EID(Entity Identification)、DoIP Entity的逻辑地址等等信息;
- 路由激活:客户端使用源地址进行路由激活,服务器响应等。
- Alive Check:用于维持不同测试设备的连接;
- 节点信息:用于获取DoIP实体的一般信息,包括诊断电源模式、节点类型(Gateway\Node)、当前实体一次逻辑请求最大可处理数据长度等等;
- 诊断消息:定义了将诊断消息(即诊断请求)路由到车辆网络并从车辆网络(即诊断响应)返回到客户端DoIP实体的消息格式,具体如下:
4.通信流程示例
在ISO 13400-2-2019中提出了基于DoIP的整车网络架构,如下:
上图中,Clinet1通过以太网与车内边缘节点DoIP Edge Node Gateway 1连接,后续与车内其他节点通信由Gateway进行转发。在外部网络我们看到Client 1有Activation Line与边缘节点连接,它主要用于DoIP的有线连接场景,通过控制电压来激活或停用与车辆诊断相关的通信,从而减少电磁干扰(EMC)和边缘节点的功耗。
在理清DoIP通信流程前,我们先了解几个概念:
Client:与DoCAN一样,Client主要发送诊断请求,它可以是外部任何设备;
DoIP Gateway:该网关主要用于路由诊断请求给车内节点,这样的好处就是车内ECU不一定都要实现DoIP;只要是在车内挂上总线的ECU都有可能被诊断;
Logical Address:诊断网关需要两个有效信息来识别和转发诊断请求和响应,(1)车内ECU诊断的逻辑地址,该ID是在整车网络内要求唯一;(2)网关需要识别总线系统,并将诊断请求或者响应转发至对应总线。
因此,诊断流程可以以一句话概括:DoIP Gateway首先接收Tester的请求,请求包含所需的诊断服务和要诊断的ECU的逻辑地址;Gateway剔除诊断数据包Header,并将其打包成可以目标ECU所在的总线格式进行转发;最后响应给Tester同理。总体框架如下:
进一步,该通信流程可以细化为如下图所示:
这里讨论DoIP有线连接流程:
- 首先进行物理连接,激活线激活DoIP Gateway相关功能,并IP地址配置,这里通常有DHCP(Dynamic Host Configuration Protocol)和Auto-Configuration两种 ;
- 根据标准,有两种方式实现车辆发现,第一种:一旦网络连接成功,DoIP Gateway(Server)会主动发送3次Vehicle announcement message,如上图Alt 1;第二种,Tester(Client)主动发送Vehicle ID request,由DoIP实体响应,如Alt 2;该步骤主要是交换车辆VIN、EID、逻辑地址等等,举例如下:
- 完成UDP协议的信息交换后,Client与Server建立TCP连接,同时Client发送Routing activation request,该请求由DoIP Gateway解析,如果DoIP报头是有效的,并且接收到的逻辑地址与Tester的配置逻辑地址相匹配,那么Tester和ECU之间的数据路由就会被激活;
- 接下来就可以进行正常的诊断通信,举例如下:
诊断请求
ACK响应
数据传输
5. 如何保证DoIP的网络安全
在ISO13400-2-2019中提到了使用TLS(Transport layer security)来建立Client和Server之间的安全通信,包括合法性、完整性和机密性,但不是强制实现。
在Client DoIP实体和Server DoIP实体开始通过TLS交换DoIP消息之前,首先在TLS握手中协商安全的TCP连接:双方就TLS协议的版本达成一致,选择通用密码套件,验证证书,并完成TLS会话密钥交换。
不过在车辆发现阶段,使用UDP进行通信也很容易遭受攻击。
随着汽车行业的互联程度越来越高,对网络安全的需求只会增加。未来版本的DoIP可能包括更强大的身份验证和加密机制,以防止网络攻击。