DoIP即基于IP的诊断协议,是指通过以太网协议进行统一诊断服务(Unified Diagnostic Services,UDS)通信,DoIP遵循的标准为ISO13400。DoIP架构实现基于互联网OSI 7层模型(详见ISO/IEC 7498-1中规定的OSI基本参考模型)。ISO13400为DoIP指定了传输层、网络层、数据链路层和物理层。DoIP诊断协议和CAN诊断协议类似,两者的架构对比如下图所示。
网络层与传输层
ISO-13400规定,DoIP通信在网络层上支持IPv6和IPv4协议。对于IPv4,要支持地址解析协议(ARP),对于IPv6要支持邻居发现协议(NDP)。
DoIP通信在传输层上需要同时支持UDP协议与TCP协议,使用的端口号定义如下表所示。
端口类型 |
端口号 |
说明 |
UDP_DISCOVERY |
13400 |
用于诊断设备发送给DoIP节点的车辆信息请求报文和DoIP节点管理报文。
用于DoIP节点在没有收到请求的时候发送的UDP节点信息获取报文,如车辆声明报文。 |
UDP_TEST_EQUIPMENT_REQUEST |
动态定义
(49152-65535) |
用于诊断设备向DoIP节点发送UDP报文。
用于DoIP节点向诊断设备发送响应报文。 |
TCP_DATA |
13400 |
用于诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。
当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。 |
—— DOIP报文格式
DoIP报文使用TCP/IP协议进行发送,所以DoIP报文前要封装ETH首部、IP首部及TCP/UDP首部。DoIP报文与以太网报文之间的关系如下图所示:
DoIP报文内容分为5部分内容:
(1)Protocol Version:所遵循的ISO13400协议版本,长度为1字节;
(2)Inverse Protocol Version:Protocol Version取反,长度为1字节;
(3)Payload Type:负载类型,用于标识这一帧报文的用途,长度为2字节,负载类型分为三大类:节点管理类、节点信息类、诊断通信;
(4)Payload Length:负载长度,用于标识传输数据的长度,长度为4个字节,也就是说DoIP报文最大长度为4 GB /4294967295 bytes;
(5)DoIP Payload:包含Payload Type对应的具体数据,又可以划又分为源地址(标识数据由谁发出)、目的地址(标识数据由谁接收)、应用数据(UDS诊断服务数据)。
负载类型的具体说明如下表所示。
负载类型值 |
名称 |
含义 |
0x0000 |
Generic DoIP header negative acknowledge |
通用DoIP报头否定响应 |
0x0001 |
Vehicle identification request message |
车辆信息请求 |
0x0002 |
Vehicle identification request message with EID |
带有EID的车辆信息请求 |
0x0003 |
Vehicle identification request message with VIN |
带有VIN的车辆信息请求 |
0x0004 |
Vehicle announcement/Vehicle identification response message |
车辆公告信息/车辆识别响应信息 |
0x0005 |
Routing activation request |
路由激活请求 |
0x0006 |
Routing activation response |
路由激活应答 |
0x0007 |
Alive check request |
已激活的socket是否在使用请求 |
0x0008 |
Alive check response |
已激活的socket是否在使用应答 |
0x4001 |
DoIP entity status request |
DoIP实体状态请求 |
0x4002 |
DoIP entity status response |
DoIP实体状态应答 |
0x4003 |
Diagnostic power mode information request |
DoIP实体电源状态信息请求 |
0x4004 |
Diagnostic power mode information response |
DoIP实体电源状态信息应答 |
0x8001 |
Diagnostic Message |
DoIP诊断信息 |
0x8002 |
Diagnostic message positive acknowledgment |
DoIP诊断信息肯定应答 |
0x8003 |
Diagnostic message negative acknowledgment |
DoIP诊断信息否定应答 |
—— DOIP诊断通信流程
当诊断设备与车内DoIP节点建立网络连接时,首先进行物理连接,之后DoIP节点主动发出3次声明报文,3次报文间隔时间不超过500ms。诊断设备也可以主动向DoIP节点发送请求获取节点信息。
经过物理连接建立和车辆发现步骤后,诊断设备已经获取到了DoIP节点的信息,此时应该DoIP节点的信息添加至车辆列表中。
操作员在诊断设备上选择要诊断的DoIP节点辆后,诊断设备与DoIP节点间建立TCP连接。
TCP连接建立成功后,诊断设备发送路由激活报文,DoIP节点给出响应,诊断设备向操作人员指示连接成功。
路由激活步骤执行成功后,就可以进行诊断通信了,操作员使用诊断设备向DoIP节点请求所需要的诊断数据。
诊断操作完成后,操作员关闭诊断设备,诊断设备关闭与DoIP节点间的TCP连接。
DoIP诊断通信流程如下图所示: