CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
DoIP简介
一.DoIP产生的背景
二.DoIP的应用场景
三.DoIP相关协议标准
-3.1.DoIP主要相关标准
-3.2.相关标准的层次关系
四.DoIP的网络拓扑
五.DoIP物理连接与端口
-5.1.DoIP物理连接
-5.2.DoIP端口
六.DoIP报文格式
-6.1.节点管理类报文
-6.2.状态信息类报文
-6.3.诊断报文
七.DoIP诊断通信流程
八.UDSonIP
-8.1.UDS服务的特殊规定
-8.2.PDU映射
回到顶部
DoIP简介
一.DoIP产生的背景
二.DoIP的应用场景
三.DoIP相关协议标准
-3.1.DoIP主要相关标准
-3.2.相关标准的层次关系
四.DoIP的网络拓扑
五.DoIP物理连接与端口
-5.1.DoIP物理连接
-5.2.DoIP端口
六.DoIP报文格式
-6.1.节点管理类报文
-6.2.状态信息类报文
-6.3.诊断报文
七.DoIP诊断通信流程
八.UDSonIP
-8.1.UDS服务的特殊规定
-8.2.PDU映射
回到顶部
# DoIP简介 ## 一.DoIP产生的背景
DoIP:Diagnostic communication over Internet Protocol,基于因特网的诊断通信,简称DoIP。随着汽车智能化程度的不断提高,传统CAN/CAN FD已经无法完全满足汽车通信数据增长的要求,因此以太网被各大主机厂纳入车载通信网络。DoIP就是在UDS统一诊断服务基础上,利用以太网进行车辆诊断的技术。 有了DoIP,UDS的数据传输就可以搭载在DoIP之上,并在DoIP前序逻辑都正确的情况下,进行UDS数据的传输。DoIP并不仅仅只是UDS的载体,它也有自己的一些逻辑。毕竟车载以太网通过网络能够将车内与车外进行网络的连接,而DoIP又是诊断的入口,因此DoIP还关系到车辆的安全性问题。简单的说,DoIP能够进行车辆发现,状态查询,路由激活(含安全认证),诊断数据收发。 ## 二.DoIP的应用场景
DoIP的应用场景主要有四个: 1. 车辆数据的读写,比如VIN,控制器序列号,系统名称等车辆数据的读写。 2. 车辆故障诊断,主要用于车辆的检测与维修。诊断仪或者电脑向目标DoIP节点发送请求,节点反馈实时的故障信息或运行参数,便于快速定位故障点。 3. 控制器的软件刷写,即[Bootloader](./bootloader.html)。在车辆设计、装配、售后阶段,使用外部刷新设备通过TCP/IP协议在安全访问通过后与车辆内部节点建立通信,按照升级流程对DoIP节点进行数据升级和配置参数修改。 4. 车辆总装线终检工位的检测与维修。在车辆装配下线阶段,外部检测设备按照固定步骤对接入局域网的车辆进行终检工位的全功能检测,外部测试设备会对车内多个DoIP节点进行并行通信,完成批量检测。 除了上述故障诊断相关功能以外,用户也可以在DoIP中加入一些自定义功能。 ## 三.DoIP相关协议标准
### 3.1.DoIP主要相关标准
DoIP核心标准是ISO 13400,主要相关标准如下: - ISO 14229-1: Road Vehicles -- Unified Diagnostic Services (UDS) -- Part 1: Specification and requirements - ISO 14229-2: Road Vehicles -- Unified Diagnostic Services (UDS) -- Part 2: Session layer services - ISO 14229-5: Road Vehicles -- Unified Diagnostic Services (UDS) -- Part 5: Unified Diagnostic Services on Internet Protocol implementation (UDSonIP) - ISO 13400-2: Road vehicles -- Diagnostic communication over Internet Protocol (DoIP) -- Part 2: Transport protocol and network layer services - ISO 13400-3: Road vehicles -- Diagnostic communication over Internet Protocol (DoIP) -- Part 3: Wired vehicle interface based on IEEE 802.3 ### 3.2.相关标准的层次关系
上述相关标准的层次关系见下图,DoIP与DoCAN复用ISO 14229-1与ISO 14229-2标准,从传输层、网络层到数据链路层与物理层则是不同的。因为DoIP基于以太网,而DoCAN基于CAN总线。 ![](images/2023-09-20-15-42-22-image.png) ## 四.DoIP的网络拓扑
ISO 13400-2提供了一张典型的DoIP网络拓扑图,如下图所示。 ![](images/2023-09-20-16-42-02-image.png) 从图中可以看出,整车的网络拓扑被分为了两个部分,即内部网络和外部网络。从图中可以看出DoIP的网络拓扑有以下几种角色组成。 **1.Test equipment测试设备** 图中的Client1(test equipment)为外部测试设备,通常为OBD诊断仪或者PC诊断客户端。 **2.DoIP edge node gateway** DoIP edge node gateway首先是个网关gateway,作为一个网关它的子网内挂载着若干ECU,与DoIP gateway一样。 其次它是车内网与车外网交互的一个入口,具有控制着DoIP协议栈是否工作的一个开关功能。从图中可以看出External test equipment和DoIP edge node gateway之间有一条线叫做Activation line,这条线的功能就是对DoIP协议栈进行使能作用的。 **3.DoIP gateway** DoIP gateway是网关,它的子网内挂载着若干ECU。相比DoIP edge node gateway,DoIP gateway没有激活线,不具备使能DoIP协议栈的功能。 **4.DoIP node** 支持以太网连接并同时支持DoIP协议的非网关ECU认为是DoIP node。 拓扑图中除了上述四种角色之外还有Network node,这是一些支持以太网通信的车内或者车外设备,并不一定支持DoIP,在DoIP拓扑中是可有可无的。 整个车辆网络由上述四种角色组成,外部测试设备作为客户端,对车内网的各个支持DoIP协议栈的ECU进行诊断。车外网的外部测试设备通过OBD-II与车内网的DoIP edge node gateway进行通信,DoIP edge node gateway用来使能车内网的DoIP功能。在路由打通后,发送的诊断数据根据目的地址的不同分别流向车内网的不同ECU。 ## 五.DoIP物理连接与端口
### 5.1.DoIP物理连接
DoIP最常用的物理连接方式如下图所示,连接线一端是OBD-II插头用于连接车上的OBD-II插座,另一端是水晶头用于连接电脑或者OBD诊断仪。 ![](images/2023-09-20-17-07-54-image.png) ISO 13400-3提供了DoIP五根线(以太网两对双绞线加一根激活线)在OBD-II插头上分布的推荐方式如下图所示,需要注意的是DoIP五根线在OBD-II插头上分布的方式是允许厂家自定义的所以并不一定与下图完全一致。 ![](images/2023-09-20-17-36-42-image.png) ### 5.2.DoIP端口
DoIP报文基于TCP或UDP,不管是TCP还是UDP,都包含源端口号和目的端口号,在DoIP报文中用到了以下三种端口: **1.UDP_DISCOVERY:端口类型-UDP,端口号-13400** 该端口有以下两个应用场景: - 被用于诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点控制报文,此时该端口在报文中被设置为目的端口。 - 被用于DoIP节点在没有收到请求的时候发送的UDP报文,如车辆声明报文。此时该端口同样被设置为目的端口,源端口可以为该端口,也可以由发送方动态定义。 **2.UDP_TEST_EQUIPMENT_REQUEST:端口类型-UDP端口号-动态定义(49152-65535)** 该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。 当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。 **3.TCP_DATA:端口类型-TCP,端口号-13400** 该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。 ## 六.DoIP报文格式
DoIP数据帧在以太网数据帧中的位置以及通用格式如下图所示。 ![](images/2023-09-20-18-45-43-image.png) **1.Protocol Version(长度8位)** 定义DoIP协议版本号,通常取0x02。 **2.Inverse Protocol Version(长度8位)** 协议版本号取反,通常取0xFD(当Protocol Version取0x02时)。 **3.Payload Type(长度16位)** 定义数据类型,表示本帧数据的用途,可分为3类: 类型1:节点管理类报文(0x0001~0x0008) 类型2:状态信息类报文(0x4001~0x4004) 类型3:诊断报文(0x8001~0x8003) **4.Payload Length(长度32位)** 定义数据长度(标识后面的数据长度)。 **5.DoIP Payload** 包含Payload Type对应的具体数据:分为源地址(长度16位)、目的地址(长度16位)、应用数据(长度0~1448字节,典型的应用数据是UDS数据)。 ### 6.1.节点管理类报文(0x0001~0x0008)
0x0001~0x0004: 用于识别车辆请求,在外部测试设备与DoIP边缘节点建立诊断连接前的交互。 0x0005~0x0006: 用于激活请求与响应,激活后Socket使能并建立Socket连接,才可以进行诊断通信。 0x0007~0x0008: 用于检查当前建立的诊断连接Socket是否仍在使用,如果不再使用,则关闭Socket释放资源。 | Payload type | Payload type name | Chapter | Support | Port and protocol | | ------------ | ------------------------------------------------------------ | ------- | ------- | --------------------------------------------------------- | | 0x0000 | Generic DoIP header negative acknowledge | 7.1.2 | 强制 | UDP_DISCOVERY
UDP_TEST_EQUIPMENT_REQUEST
TCP_DATA | | 0x0001 | Vehicle identification request message | 7.1.4 | 强制 | UDP_DISCOVERY | | 0x0002 | Vehicle identification request message with EID | 7.1.4 | 可选 | UDP_DISCOVERY | | 0x0003 | Vehicle identification request message with VIN | 7.1.4 | 强制 | UDP_DISCOVERY | | 0x0004 | Vehicle announcement/Vehicle identification response message | 7.1.4 | 强制 | UDP_DISCOVERY
UDP_TEST_EQUIPMENT_REQUEST | | 0x0005 | Vehicle announcement/Vehicle identification response message | 7.1.5 | 强制 | TCP_DATA | | 0x0006 | Routing activation request | 7.1.5 | 强制 | TCP_DATA | | 0x0007 | Routing activation response | 7.1.7 | 强制 | TCP_DATA | | 0x0008 | Alive check response | 7.1.7 | 强制 | TCP_DATA | ### 6.2.状态信息类报文(0x4001~0x4004)
| Payload type | Payload type name | Chapter | Support | Port and protocol | | ------------ | ------------------------------------------ | ------- | ------- | -------------------------- | | 0x4001 | DoIP entity status request | 7.1.9 | 可选 | UDP_DISCOVERY | | 0x4002 | DoIP entity status response | 7.1.9 | 可选 | UDP_TEST_EQUIPMENT_REQUEST | | 0x4003 | Diagnostic power mode information request | 7.1.8 | 强制 | UDP_DISCOVERY | | 0x4004 | Diagnostic power mode information response | 7.1.8 | 强制 | UDP_TEST_EQUIPMENT_REQUEST | ### 6.3.诊断报文(0x8001~0x8003)
标识外部测试设备与DoIP实体之间的诊断报文类型,分别代表诊断报文、诊断肯定响应报文和诊断否定响应报文。 | Payload type | Payload type name | Chapter | Support | Port and protocol | | ------------ | ------------------------------------------ | ------- | ------- | ----------------- | | 0x8001 | Diagnostic Message | 7.1.6 | 强制 | TCP_DATA | | 0x8002 | Diagnostic message positive acknowledgment | 7.1.6 | 强制 | TCP_DATA | | 0x8003 | Diagnostic message negative acknowledgment | 7.1.6 | 强制 | TCP_DATA | ## 七.DoIP诊断通信流程
DoIP的整个诊断通信流程大致可以分为5步:车辆连接、车辆声明(也叫车辆发现)、TCP通信连接及路由激活、诊断数据交互、TCP连接关闭: 1. 车辆连接: Tester和DoIP网关之间要建立正确的物理连接,通过车辆激活线激活DoIP网关的诊断功能,然后分配Tester及DoIP网关的IP地址,分配IP地址一般通过DHCP动态分配或Auto IP分配。 2. 车辆声明: 车辆连接并上电后,车辆将自身的识别信息以广播形式自发3次于所在网络中。Tester若未获取车辆自动上报的识别信息,Tester需发送车辆信息识别请求报文(identification request),如果网络中有车辆的话,车辆对这个车辆识别请求信息进行响应,发送车辆识别请求响应信息(车辆声明),测试设备便发现了被测车辆。 3. TCP通信连接及路由激活: Tester端和DoIP实体通过TCP三次握手机制建立TCP连接,然后Tester与DoIP实体节点之间进行路由激活,来激活车载以太网通信诊断套接字(Socket),Tester发送路由激活请求报文信息至DoIP实体节点,DoIP实体确认Tester的逻辑地址、激活类型等信息是否合法,通过后,DoIP实体回复路由激活响应报文,实现路由功能的激活。 4. 诊断数据交互: Tester发送诊断请求报文(DoIP Payload Type 0x8001),诊断请求报文中包含目标的逻辑地址,用来区分不同的诊断实体,边缘节点网关收到请求后回复诊断请求确认ACK(DoIP Payload Type 0x8002),告知Tester收到诊断请求,与此同时会发送诊断请求给车内所需诊断通信的DoIP实体节点。车内节点收到请求后回复诊断响应报文(DoIP Payload Type 0x8001),该响应报文经由DoIP网关转发给Tester。若边缘节点网关判定Tester发送的诊断请求有无效信息时(无效的目标地址,信息超长等),此时边缘节点网关会回复NACK(DoIP Payload Type 0x8003)。 5. TCP连接关闭: 当Tester端退出诊断通信连接时,用于DoIP通信的套接字TCP_DATA Socket被关闭,DoIP诊断通信断开。 如下图诊断过程中,诊断网关首先接收来自Tester的请求。该请求包含诊断数据包,其中携带所需的诊断服务和待诊断ECU的逻辑地址信息。随后网关从该诊断数据包中提取有关内容,并将其打包为可在总线或网络上发送的报文。例如,如果要通过CAN总线对ECU进行寻址,网关需要将带有相应的诊断请求标志符(如0x600)的报文发送到总线,然后等待来自ECU的响应。在收到来自总线或网络的响应(如带标志符0x700的CAN报文)之后,网关会将原始诊断服务的响应返回给测试仪。网关会在返回给测试仪的响应中添加ECU的逻辑地址,以便Tester能够区分并分配响应。这样,Tester可以向位于不同的总线系统和网络的多个ECU发送请求,而无需按照发送请求的顺序等待响应。 ![](images/2023-09-20-20-23-40-image.png) ## 八.UDSonIP
当UDS被用于DoIP的时候,有一些针对以太网特有的规则,UDSonIP的内容在ISO 14229-5中定义。 ### 8.1.UDS服务的特殊规定
部分UDS服务在应用于DoIP的时候,由于以太网通信的特性,会有下文所述的一些特殊规则。 **1.0x10诊断会话控制** 诊断会话控制切换会导致TCP连接中断,在再次开始诊断前要重新建立TCP连接,并发送路由激活报文。 **2.0x11复位ECU** ECU复位会同样会导致TCP连接断开,路由激活失效,在再次开始诊断前也要重新建立TCP连接,并发送路由激活报文(针对所有相关DoIP节点)。 ### 8.2.PDU映射
ISO 14229-2中定义的T_PDU与ISO 13400-2中定义的DoIP_PDU映射关系如下。 ![](images/2023-09-20-20-00-32-image.png) 作为对比,ISO 14229-2中定义的T_PDU与ISO 15765-2中定义的N_PDU映射关系如下。 ![](images/2023-09-20-20-11-15-image.png) UDSonIP在其他方面与UDSonCAN没有太大的不同。