DoIP(Diagnostic communication over Internet Protocol)是基于车载以太网的诊断,在OSI 七层模型中属于传输层,其传输的诊断数据也是基于UDS,即DoIP是在以太网网络上传输UDS诊断数据的传输协议。DoIP带宽高,适合传输大量数据的场景,如车上的OTA软件升级。
ISO 13400-1中给出的协议体系如下:
DoIP报文也是基于TCP或UDP,但在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能。DoIP报文的结构如下图所示:
我们知道不管是TCP还是UDP,都包含源端口号和目的端口号,在DoIP报文中用到了以下三种端口:
该端口有以下两个应用场景:
该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。
当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。
该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。
我们可以看到DoIP报文由首部和数据两部分组成,我们先来看一下首部四个参数的定义:
长度一字节,代表遵照ISO 13400 的那个版本,定义如下:
是上面协议版本字节取反后的数值,即 = 协议版本 XOR 0xFF。
例如:协议版本 = 0x02,该字节 = 0x02 ^ 0xFF = 0xFD
数据类型即DoIP报文的类型,不同类型功能不同,数据部分的解析方式也不一样,我们在下一篇文章中详细介绍每一种报文类型。
我们先来看最后一个参数——数据长度,就是指DoIP报文中DoIP层数据的长度,不包括DoIP报头,只是数据长度,4字节,可以为0,最大为0xFFFFFFFF(4GB)。