DoIP(Diagnostic communication over Internet Protocol)是基于以太网的通讯协议对UDS协议的数据进行传输,参考标准ISO13400。
DoIP诊断经由通用的统一诊断服务UDS协议引入诊断服务,通过传输控制协议TCP、用户数据报协议UDP和以太网协议IP,完成外部测试设备与ECU间的诊断通信。
DoIP旨在替代传统的基于CAN总线的诊断通信方式。它可以通过标准的IP网络连接到车辆中的电子控制单元(ECU)进行诊断、编程和配置等操作。
DoIP的使用场景主要包括以下几个方面:
DoIP的主要应用场景:
1)车辆检测与维修;
2)车辆/ECU的软件刷写
3)总装终检线工位的检测与维修
4)远程
1)远程诊断:当车辆在故障时,车辆制造商可以通过远程网络连接到车辆中的ECU,以进行诊断和故障排除。
2)远程编程:当需要在车辆中安装新的软件或升级现有的软件时,可以通过DoIP连接到车辆中的ECU进行远程编程。
3)远程配置:车辆制造商可以通过DoIP连接到车辆中的ECU,以进行配置和调试等操作。
DoIP的协议定义主要有:ISO 13400系列以及ISO 14229-5,在应用层部分依然遵循ISO14229-1。
ISO 13400 包含以下规范:
- Part 1: General information and use case definition
- Part 2: Transport protocol and network layer services
- Part 3: Wired vehicle interface based on IEEE 802.3
- Part 4: Ethernet Diagnostic Connector
2 网络拓扑
下图是ISO 13400-2标准里的一张图,展示了DoIP的拓扑结构。
主机(host):连接到基于IP协议的网络的节点。在互联网世界中,主机这个词很常用。在车载以太网中,我们可以将主机理解为支持IP协议的车辆ECU。
DoIP节点(DoIP node):车辆内支持DoIP诊断协议的主机,仅支持对自身的DoIP诊断。
DoIP网关(DoIP gateway):车辆内支持DoIP诊断协议的主机,它不仅支持对自身的DoIP诊断,还可以支持对其所连接的车辆子网络上ECU的诊断。
DoIP边缘节点(DoIP edge node):以太网激活线(在ISO 13400-3中有定义,可以简单理解为诊断仪用来触发DoIP诊断的硬线信号)所连接的DoIP网关。
DoIP实体(DoIP Entity):DoIP节点和DoIP网关统称为DoIP实体。
网络节点(Network Node):连在IP网络上,但不能实现DoIP的节点。
外部测试设备(External test equipment):此部分为外部测试设备,通常为OBD诊断仪或者其他诊断客户端。
- DoIP架构模型必须实现以下特征:
①车辆与测试设备 能够加入到网络中并识别对方;
②汽车具有声明存在且被 检测到的能力;
③获取车辆基本状态信息(如Power Mode 状态);
④通信建立,如双方通信请求建立,保持,以及对 网关的控制等;
⑤汽车网关实现诊断设备与车辆子网组件 之间的数据路由;
⑥错误状态处理。
3 DoIP的接收方式和协议格式
3.1 端口
DoIP是基于TCP/UDP进行传输的,就需要定义对应的端口号,客户端和服务端可以在此端口上进行收发数据。在DoIP报文中用到了以下三种端口:
UDP_DISCOVERY:端口类型 UDP,端口号 13400,该端口有以下两个应用场景:
1) 被用于诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点控制报文,此时该端口在报文中被设置为目的端口。
2) 被用于DoIP节点在没有收到请求的时候发送的UDP报文,如车辆声明报文。此时该端口同样被设置为目的端口,源端口可以为该端口,也可以由发送方动态定义。
UDP_TEST_EQUIPMENT_REQUEST:端口类型 UDP,端口号是动态定义(49152-65535):该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。
TCP_DATA:端口类型 TCP,端口号 13400:该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。
3.2 报文格式
DoIP报文由DoIP报头和Payload(有效载荷)组成,在车载以太网数据帧中的位置及通用格式如下图所示:
在ISO 13400-2中对Generic DoIP header structure的说明如下:
1)DoIP报头包含:DoIP协议版本号,目前为0x02(DoIP 2012)。
2)协议版本号取反,目前为0xFD。注意:协议书上特别说明了Protocol version可以为0xFF,设这个值的作用是,当客户端和服务端的协议版本不匹配,可以设置此值绕过协议头版本不匹配而拒绝请求的case。
3)Payload类型,分为3大类:
①节点管理类,包含DoIP报头否定应答、车辆声明及标识、路由激活、在线检查;
②车辆信息类,包含DoIP实体状态、诊断电源模式信息;
③诊断数据类,包含诊断报文。
关于每个类型的含义如下表所示,具体含义参考标准即可。
DoIP协议主要使用TCP/IP协议栈进行通信,它定义了一系列的消息格式和通信规则。它包括以下几个关键组件:
(1)DoIP实体:它是指通过DoIP协议连接到车辆中的ECU的设备,可以是诊断工具或其他支DoIP协议的设备。
(2)DoIP路由器:它是指将DoIP消息从IP网络转发到车辆中的CAN总线或其他网络的设备。
(3)DoIP服务器:它是指在车辆中运行的软件模块,用于处理和响应通过DoIP协议发送的消息。
(4)DoIP消息:它是指通过DoIP协议传输的数据包,包括请求消息和响应消息。
(5)DoIP地址:它是指用于标识ECU和DoIP实体的IP地址。
在使用DoIP协议进行诊断、编程和配置等操作时,需要遵循以下的标准规范:
ISO 13400-2:它是指DoIP协议的标准规范,包括消息格式、通信规则和安全要求等。
ISO 15765-2:它是指车辆网络诊断协议(UDS)的标准规范,它定义了诊断请求和响应的消息格式和通信规则。
ISO 14229-1:它是指诊断服务数据单元(Diagnostic Services Data Unit,DSDU)的标准规范,它定义了诊断服务请求和响应的消息格式和通信规则。
以上标准规范的详细内容可以通过国际标准化组织(ISO)的官方网站获取。
基于DoIP的远程诊断过程主要涉及到以下几个步骤:
1.建立DoIP连接:首先需要建立DoIP连接,即在远程诊断工具和车辆中的ECU之间建立一个TCP/IP连接。在建立连接时,需要通过DoIP路由器将TCP/IP连接转发到车辆中的CAN总线或其他网络。
2.发送诊断请求:一旦建立了DoIP连接,远程诊断工具可以向车辆中的ECU发送诊断请求,请求特定的诊断服务。诊断请求包括请求的诊断服务ID、数据以及其他必要的参数。
3.接收诊断响应:车辆中的ECU接收到诊断请求后,将根据请求的服务类型生成相应的诊断响应。诊断响应包括响应的诊断服务ID、数据以及其他必要的参数。
4.处理诊断响应:远程诊断工具接收到诊断响应后,将对响应数据进行处理和解析,以获取有关车辆状态的诊断信息。可以使用此信息进行故障排除和维护操作。
5.关闭DoIP连接:完成诊断操作后,需要关闭DoIP连接,释放TCP/IP资源。
需要注意的是,远程诊断过程中需要保证诊断请求和响应的安全性和完整性。为此,可以使用DoIP协议中定义的安全机制,例如基于TLS的加密和身份验证等。此外,还需要遵循相关的法律和隐私规定,以确保数据的保密性和合法性。
连接状态
DoIP实体内管理着一个DoIP connection table ,用来记录和维护诊断通信的逻辑连接。上图就是这个表中的一个元素,即一个逻辑连接的状态机。上图中的方框就是连接所处的状态,[Step]是状态之间跳转时发生的事情。
[Step1] 当一个新的套接字建立,逻辑连接的状态就从“listen”跳转到“socket initialized”,同时启动一个定时器, initial inactivity timer。
[Step2] 当DoIP实体接收到tester发来的一个routing activation信息后,逻辑连接的状态就从“socket initialized”跳转到“Registered [Pending for Authentication]” ,此时 initial inactivity timer被停止,启动一个名为general inactivity timer的定时器。
[Step3] 在完成Authentication之后,逻辑连接的状态就从“Registered [Pending for Authentication]”跳转到“Registered [Pending for Confrmation]” 。
[Step4] 在完成Confrmation之后,逻辑连接的状态就从“Registered [Pending for Confrmation]”跳转到“Registered [Routing Active] ” 。
[Step5] 如果initial timer 或general inactivity timer 过期后仍没收到后续请求,或者authentication 和 confrmation 被拒绝了,又或者外部测试设备对alive check 消息没有响应,则逻辑连接进入“Finalize”状态。
[Step6]进入Finalize后,此时TCP套接字将被关闭,并重新回到“listen”状态。
4.2 车辆发现
有两种方式把外部诊断设备与车上的DoIP节点网络连接起来:
(1) 直接连接
外部诊断设备直接与DoIP节点连接,如下图所示:
(2)网络连接
外部诊断设备与DoIP网络节点不是直接连接,而是通过路由器连接。
不管是哪种连接方式,都要经历以下几个步骤:
① 物理层连接与IP地址分配
最先要做的是在诊断设备和DoIP节点间建立物理连接,即连接以太网线。之后采用DHCP协议进行IP地址分配。
有的时候一辆车上是存在多个DoIP节点的,这个时候与诊断设备相连的DoIP节点叫做边缘节点-Edge Node(或DoIP master),其余DoIP节点是普通节点,普通节点与诊断设备之间的DoIP通信都需要经过DoIP边缘节点的转发,所以边缘节点充当了路由器的作用,在直接连接的情况下有时也会作为DHCP Server,为诊断设备和车上其它DoIP节点分配IP地址。
详细步骤如下图所示,需要注意的一点是DoIP边缘节点有一个硬线激活线,在建立物理连接的时候要连接该硬线激活线,才能激活边缘节点的DoIP通信。边缘节点与车上其它节点的连接如何激活标准中没有定义,主机厂可自定义。
② DoIP节点发送车辆声明报文
DoIP设备启动后,首先通过UDP广播的形式把一条DoIP报文(vehicle announcement message,Payload Type为0x0004)发给网络上的所有的其他节点,其中就包括诊断仪,目的端口是UDP_DISCOVERY,其中这条消息携带了DoIP设备的DoIP版本、VIN、logical address等信息,这条信息会发送三次,而之前监听在UDP_DISCOVERY端口的诊断仪接收到这条信息,就知道了DoIP设备的基本信息。
③ 诊断设备请求车辆信息
如果诊断设备没有收到DoIP节点的车辆声明报文,则需要主动请求车辆信息(DoIP request消息的Payload Type为0x0001),使用UDP协议,目的端口是UDP_DISCOVERY,源端口是动态定义的UDP_TEST_EQUIPMENT_REQUEST。
整理车辆发现过程如下:
当一辆车和外部测试设备都连接到DoIP网络中,并且IP 地址配置完成,DoIP实体将通过车辆公告信息广播其VIN、 EID、GID和逻辑地址3次,外部测试设备通过广播发送车辆 识别请求来触发车辆识别响应,从而完成车辆声明及标识 步骤。打开Socket(套接字)是外部测试设备向车辆内部DoIP 实体发起连接的第一步,必须在交换任何报文前完成,一 旦建立了连接,必须执行一些初始化操作。为了激活初始 化连接中的路由,外部测试设备将发送一个路由激活请求 消息到DoIP实体。如果外部测试设备符合条件,DoIP实体 将发送一个路由激活成功的响应,此时就可以对有效的 DoIP报文(如DoIP诊断报文)进行转发或处理。DoIP会话 示例如下图所示。
4.3 DoIP报头处理流程
如果接收到来自DoIP实体不正确的DoIP报文,外部测 试设备不得发送通用DoIP报头的否定应答报文。通用DoIP 报头否定应答报文只能用于确定先前发送的DoIP报文的错误条件。
4.4 DoIP会话
DoIP会话就是传输DoIP诊断数据的整个流程,如下图所示:
① 添加车辆至列表
在经过上文的物理连接建立和车辆发现步骤后,诊断设备已经获取到了DoIP节点的必要信息,此时诊断设备应将该DoIP节点的信息添加至车辆列表中,供操作人员选择。
② 建立TCP连接
操作人员选择该车辆后,诊断设备与DoIP节点间建立TCP连接。
③ 路由激活
TCP连接建立成功后,诊断设备发送路由激活报文,DoIP节点给出响应。诊断设备向操作人员指示连接成功。
④ 诊断通信
路由激活步骤执行完毕后,就可以进行诊断通信了,在诊断设备和DoIP节点间传输诊断数据。
⑤ 操作结束,关闭TCP连接
所有诊断操作完成后,操作人员注销诊断设备,诊断设备关闭与DoIP节点间的TCP连接。
DoIPd的数据格式
在DoIP中,数据格式遵循了ISO 13400-2标准中规定的格式,即UDS(Unified Diagnostic Services)格式。
UDS格式是一种用于诊断通信的数据交换格式,其格式由一个请求帧和一个响应帧组成。请求帧和响应帧分别包含一个帧头和一个帧体。
帧头中包含了帧的长度和帧的类型信息,以及一些标志位,用于标识请求帧还是响应帧,以及请求帧和响应帧之间的关系。
帧体中包含了具体的诊断数据信息,包括诊断服务的标识符、诊断参数等信息。帧体的格式与具体的诊断服务相关,不同的诊断服务对应不同的帧体格式。
DoIP在UDS格式的基础上增加了一些DoIP特有的数据字段,用于标识DoIP会话和DoIP消息的信息,例如DoIP会话ID、DoIP消息类型、DoIP消息长度等。这些信息用于在DoIP会话中进行消息的传输和管理。
在DoIP中,数据的格式由UDS格式和DoIP特有的数据字段组成,具体格式和内容可以参考相关的标准文档,例如ISO 13400-2和ISO 13400-3标准。
DoIP的消息类型
在DoIP中,消息类型是指消息的用途和目的,用于在DoIP会话中对消息进行分类和管理。根据DoIP协议规范,消息类型包括以下几种:
1)功能请求消息(0x00000001)
功能请求消息用于向车辆发送功能请求,并获取对应的功能响应。功能请求消息包含了诊断服务的标识符和相关的参数,用于描述要执行的诊断服务以及参数的值。
2)功能响应消息(0x00000002)
功能响应消息用于向远程诊断工具返回诊断服务的结果。功能响应消息包含了诊断服务的标识符和相关的参数,以及诊断服务的执行结果和返回值等信息。
3)连接控制请求消息(0x00000003)
连接控制请求消息用于进行DoIP会话的管理,例如建立会话、终止会话、激活会话等操作。连接控制请求消息包含了相应的控制码和参数,用于描述要执行的操作。
4)连接控制响应消息(0x00000004)
连接控制响应消息用于返回对应的连接控制请求的执行结果。连接控制响应消息包含了相应的控制码和状态码等信息,用于描述操作的执行结果和状态。
5)车辆识别请求消息(0x00000005)
车辆识别请求消息用于向车辆发送识别请求,以获取车辆的识别信息。车辆识别请求消息不包含诊断服务标识符,而是包含相应的控制码和参数,用于描述要执行的操作。
6)车辆识别响应消息(0x00000006)
车辆识别响应消息用于返回对应的车辆识别请求的执行结果。车辆识别响应消息包含了车辆的识别信息,例如车辆VIN码、ECU标识符等信息。
以上消息类型仅是DoIP协议规范中规定的几种消息类型,实际应用中可能会根据具体的需求和应用场景来定义和使用其他的消息类型。
DoIP和UDS、DDS、DCM、DEM之间的关系和区别
DoIP、UDS、DDS、DCM和DEM都是与汽车诊断和通信相关的标准和协议,它们之间的关系和区别如下:
1.DoIP(Diagnostics over Internet Protocol,Internet诊断协议)
DoIP是一种基于IP网络的汽车诊断通信协议,旨在将现代汽车的诊断和维护功能扩展到远程和云端环境中。DoIP通过TCP/IP协议栈提供了高速、安全和可靠的汽车诊断通信服务。
2.UDS(Unified Diagnostic Services,统一诊断服务)
UDS是一种用于汽车诊断通信的数据交换格式,旨在实现诊断通信的标准化和统一。UDS格式由一个请求帧和一个响应帧组成,用于描述诊断服务的标识符、参数和返回值等信息。
3.DDS(Distributed Data Service,分布式数据服务)
DDS是一种用于分布式系统的数据通信协议,旨在实现分布式应用程序之间的数据共享和通信。DDS提供了可靠性、实时性和安全性等关键特性,适用于多种应用场景,包括汽车诊断和通信。
4.DCM(Diagnostic Communication Manager,诊断通信管理器)
DCM是一种用于管理汽车诊断通信的软件模块,旨在实现诊断通信的协议转换、消息路由和网络管理等功能。DCM通常实现了UDS格式和其他诊断通信协议之间的转换和集成。
5.DEM(Diagnostic Event Manager,诊断事件管理器)
DEM是一种用于管理汽车诊断事件和故障信息的软件模块,旨在实现诊断信息的收集、处理和存储等功能。DEM通常与DCM、UDS和其他诊断通信协议紧密集成,用于实现全面的汽车诊断和维护功能。
综上所述,DoIP是一种汽车诊断通信协议,UDS是一种用于诊断通信的数据交换格式,DDS是一种分布式数据通信协议,DCM是一种诊断通信管理软件模块,DEM是一种诊断事件管理软件模块。它们之间的关系是密切的,通常在实现汽车诊断和维护功能时会同时使用这些协议和技术。