入门车载以太网(7) -- DoIP

目录

1.什么是DoIP

2.DoIP和UDS是什么关系

3.DoIP消息格式

4.通信流程示例

[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有线连接流程:

  1. 首先进行物理连接,激活线激活DoIP Gateway相关功能,并IP地址配置,这里通常有DHCP(Dynamic Host Configuration Protocol)和Auto-Configuration两种 ;
  2. 根据标准,有两种方式实现车辆发现,第一种:一旦网络连接成功,DoIP Gateway(Server)会主动发送3次Vehicle announcement message,如上图Alt 1;第二种,Tester(Client)主动发送Vehicle ID request,由DoIP实体响应,如Alt 2;该步骤主要是交换车辆VIN、EID、逻辑地址等等,举例如下:
  3. 完成UDP协议的信息交换后,Client与Server建立TCP连接,同时Client发送Routing activation request,该请求由DoIP Gateway解析,如果DoIP报头是有效的,并且接收到的逻辑地址与Tester的配置逻辑地址相匹配,那么Tester和ECU之间的数据路由就会被激活;
  4. 接下来就可以进行正常的诊断通信,举例如下:

诊断请求

ACK响应

数据传输

5. 如何保证DoIP的网络安全

在ISO13400-2-2019中提到了使用TLS(Transport layer security)来建立Client和Server之间的安全通信,包括合法性、完整性和机密性,但不是强制实现。

在Client DoIP实体和Server DoIP实体开始通过TLS交换DoIP消息之前,首先在TLS握手中协商安全的TCP连接:双方就TLS协议的版本达成一致,选择通用密码套件,验证证书,并完成TLS会话密钥交换。

不过在车辆发现阶段,使用UDP进行通信也很容易遭受攻击。

随着汽车行业的互联程度越来越高,对网络安全的需求只会增加。未来版本的DoIP可能包括更强大的身份验证和加密机制,以防止网络攻击。

相关推荐
车载测试工程师2 天前
CAPL学习-ETH功能函数-事件过程函数参考补充说明
tcp/ip·以太网·capl·canoe·doip
车载测试工程师5 天前
CAPL学习-DoIP测试仪配置函数
网络协议·以太网·capl·canoe·doip
赖small强6 天前
【Linux 网络基础】libwebsockets HTTPS 服务端实现机制详解
linux·网络·https·tls·libwebsockets
车载测试工程师7 天前
CAPL学习-IP API函数-1
网络·学习·tcp/ip·capl·canoe·doip
赖small强7 天前
【Linux 网络基础】HTTPS 技术文档
linux·网络·https·tls
赖small强9 天前
【Linux 网络基础】libwebsockets 技术文档
linux·网络·https·tls·lib·websockets
赖small强20 天前
【ZeroRange WebRTC】KVS WebRTC 示例中的 HTTP 通信安全说明
https·webrtc·tls·aws sigv4·信道安全·时间与重放控制
赖small强22 天前
【ZeroRange WebRTC】TLS 底层原理与工作机制(深入解析)
webrtc·tls·ecdhe·tls 1.3·前向保密(pfs)·密钥派生(hkdf)·流量密钥
小凡子空白在线学习1 个月前
UDS中时间参数相关
uds
IAMeee1 个月前
从项目中学习CAN和CANFD报文结构(新手入门)
自动化测试·can·uds·canfd·1024程序员节