随着汽车新功能(辅助驾驶、信息娱乐、软件更新、远程诊断等)的出现,其内部电子系统需要传输的数据量日益增多,以往基于CAN/CANFD网络的诊断协议逐渐不能满足要求,于是基于以太网的诊断协议便应运而生了。

车辆以太网诊断协议,英文名称“Diagnostic over Internet Protocol”,简称“DoIP”。2011年,国际标准化组织首次发布了ISO 13400-1:2011国际标准,其中明确了DoIP的概念、应用场景。2012年发布了ISO 13400-2:2012,详细规定了传输层、网络层的服务,以及DoIP报文的具体格式。2019年发布了ISO 13400-2:2019,对之前的协议进行改进,提升了稳定性。2025年发布了ISO 13400-2:2025,本文基于该版本进行介绍。
DoIP协议在开放互联参考模型(OSI)中的位置如下图所示(与传统协议进行对比):

简单理解:DoIP协议的物理层和数据链路层依赖于百兆以太网,位于传输层TCP/UDP协议之上,同时又位于应用层协议(比如UDS)之下。
DoIP协议的报文由报文头和负载两部分组成。
报文头长度固定为8字节,包括:协议版本号、版本号取反、负载类型和负载长度,如下面的表格所示:
| 名称 | 长度(字节数) |
|---|---|
| 协议版本号 | 1 |
| 版本号取反 | 1 |
| 负载类型 | 2 |
| 负载长度 | 4 |
其中:
协议版本号:长度1字节,取值范围包括:
0x00(ISO 13400-1:2011);
0x02(ISO 13400-2:2012);
0x03(ISO 13400-2:2012);
0x04(ISO 13400-2:2025);
0x05~0xFE(保留);
2.协议版本号取反:协议版本号按位取反(长度1字节)。与协议版本号配合使用,作为协议验证模式,以确保接收到格式正确的DoIP报文;
3.负载类型:长度2字节,取值范围:0x0000~0xFFFF(下文详述)。
4.负载长度:长度4字节,取值范围:0~4 294 967 295。(四字节无符号数的表达范围,2的32次方)。负载长度的单位为字节。有些报文不需要负载,因此长度可以为0;
DoIP协议对负载类型进行了定义与归类,如下面的表格所示:
| 取值 | 名称 | 协议 |
|---|---|---|
| 0x0000 | 通用报文头负响应 generic DoIP header negative acknowledge | UDP_DISCOVER UDP_TEST_EQUIPMENT_REQUEST TCP_DATA |
| 0x0001 | 车辆识别请求消息 vehicle identification request message | UDP_DISCOVER |
| 0x0002 | 带EID的车辆识别请求消息 vehicle identification request message with EID | UDP_DISCOVER |
| 0x0003 | 带VIN的车辆识别请求消息 vehicle identification request message with VIN | UDP_DISCOVER |
| 0x0004 | 车辆声明消息/车辆识别应答消息 vehicle announcement message/ vehicle identification response message | UDP_DISCOVER UDP_TEST_EQUIPMENT_REQUEST |
| 0x0005 | 路由激活请求 routing activation request | TCP_DATA |
| 0x0006 | 路由激活应答 routing activation response | TCP_DATA |
| 0x0007 | 车辆保活请求alive check request | TCP_DATA |
0x0008 | 车辆保活应答alive check response | TCP_DATA |
0x0009 ~ 0x4000 | 保留 | |
0x4001 | DoIP实体状态请求 DoIP entity status request | UDP_DISCOVER |
| 0x4002 | DoIP实体状态应答 DoIP entity status response | UDP_TEST_EQUIPMENT_REQUEST |
| 0x4003 | 诊断电源模式信息请求 diagnostic power mode information request | UDP_DISCOVER |
| 0x4004 | 诊断电源模式信息应答 diagnostic power mode information response | UDP_TEST_EQUIPMENT_REQUEST |
0x4005 ~ 0x8000 | 保留 | |
| 0x8001 | 诊断消息diagnostic message | TCP_DATA |
| 0x8002 | 诊断消息正响应 diagnostic message positive acknowledgement | TCP_DATA |
| 0x8003 | 诊断消息负响应 diagnostic message negative acknowledgement | TCP_DATA |
| 0x8004 | 周期性诊断消息 periodic diagnostic message | TCP_DATA |
0x8005 ~ 0x8FFF | 保留 | |
| 0x9000 | 保留 | |
| 0x9001 | DOIP网关连接的子网传输协议负载消息结构 | TCP_DATA |
0x9002 ~ 0x9FFF | 保留 | |
0xF000 ~ 0xFFFF | 为制造商保留 reserved for manufacture-specific use |
负载的内容根据类型不同而有所不同,将在后面的文章中陆续介绍。
好了,关于DoIP的报文结构就先介绍到这里。
北岛夜话



发表评论