DoIP数据格式——报文举例
·

从报文方向、报文类型、各字节字段含义、诊断命令语义及封装流程五个维度展开,结合ISO 13400(DoIP协议)和ISO 27145(诊断消息承载)标准分析:

1. 报文方向(Message direction)
- 内容:
client->vehicle - 含义:该报文由诊断客户端(如诊断工具、上位机)发送至车辆(车辆中的DoIP实体,如ECU),属于请求报文(request message)。
2. 报文类型(Message type)
- 内容:
Functionally addressed request message (read protocol identification InfoType identifier) - 含义:
- 功能寻址(Functionally addressed):DoIP的寻址方式之一,通过**源地址(SA)和目标地址(TA)**标识发送方和接收方(而非IP/MAC地址)。
- 请求报文(request message):客户端向车辆发起诊断请求,本例中请求的内容是读取“协议识别”(protocol identification)类型的诊断信息(InfoType identifier)。
3. 各字节字段含义(Data byte 0~14)
表格中Data byte对应字节偏移,Description说明字段功能,Byte value是字段的十六进制值,Mnemonic是助记符(部分公司内部标识,如GH_PT可能为示例标注)。以下逐字段解析:
(1) ISO 13400 协议头部(Byte 0~11)
ISO 13400定义了DoIP报文的基本结构,前12字节(0~11)是协议头部,用于标识报文的类型、长度、地址等元信息。
| 字节 | 字段功能 | 值(Hex) | 关键说明 |
|---|---|---|---|
| 0 | 协议版本(protocol version) | 0x01 |
ISO 13400协议版本号(如0x01表示协议第一版)。 |
| 1 | 版本按位取反(inverse protocol version) | 0xFE |
Byte 0的逐比特取反(如0x01取反后为0xFE),用于版本校验(接收方取反后应等于Byte 0,否则版本不匹配)。 |
| 2~3 | 负载类型(payload type) | 0x8001 |
标识DoIP报文的负载类型,0x8001对应诊断消息(根据ISO 13400,其他类型如0x0001为车辆识别、0x0002为路由激活等)。 |
| 4~7 | 负载长度(payload length) | 7(4字节表示) |
指示诊断负载(Byte 8及之后)的字节数,本例中为7(即Byte 8~14共7字节)。 |
| 8~9 | 源地址(source address, SA) | 0x0E00 |
客户端的标识(功能寻址中,SA由DoIP实体分配,非IP地址)。 |
| 10~11 | 目标地址(target address, TA) | 0x0E00 |
车辆中诊断实体的标识(如ECU的DoIP地址,本例中与SA相同,实际场景中可不同)。 |
(2) ISO 27145-3 诊断负载(Byte 12~14)
ISO 27145定义了诊断消息的统一承载,将UDS(ISO 14229)诊断服务封装到DoIP中。本例中Byte 12~14是**读数据服务(RDDBI)**的具体命令。
| 字节 | 字段功能 | 值(Hex) | 关键说明 |
|---|---|---|---|
| 12 | 服务标识符(Service Identifier, SID) | 0x22 |
UDS服务码,0x22对应Read Data By Identifier(读数据由标识符,RDDBI)。 |
| 13 | 数据标识符高字节(DataIdentifier #1 HB) | 0xF8 |
DID(Data Identifier)的高8位,与LB组合成完整DID。 |
| 14 | 数据标识符低字节(DataIdentifier #1 LB) | 0x10 |
DID的低8位,本例中完整DID为0xF810(即`0xF8 << 8 |
| DID含义 | 0xF810 |
本例中DID对应**“协议识别”(protocol identification)**,即请求读取的诊断信息类型是“协议相关数据”(如DoIP版本、支持的协议等)。 |
4. 报文整体语义
结合各字段,该报文的完整语义是:
客户端(SA=0x0E00)向车辆中的诊断实体(TA=0x0E00)发送功能寻址请求,请求读取“协议识别”类型的诊断信息,诊断命令为RDDBI(SID=0x22),数据标识符为0xF810(协议识别)。
5. 封装与传输流程
表格下方说明了报文的下层封装:
- 该数据段(Byte 0~14)作为**服务数据单元(SDU)**传递给下层协议(如以太网)。
- 下层协议(如UDP/IP/以太网)会添加以太网头部(MAC地址、类型)、IP头部(源IP、目的IP)、UDP头部(端口号,DoIP默认使用UDP 13400),最终封装为完整的以太网帧发送。
总结
该报文是DoIP功能寻址下的诊断请求示例,核心逻辑是:
- 通过ISO 13400头部(Byte 0~11)标识协议版本、负载类型、长度和地址;
- 通过ISO 27145-3负载(Byte 12~14)携带UDS诊断命令(RDDBI+DID=0xF810),请求“协议识别”信息;
- 逐层封装为以太网帧,通过车载以太网传输。
若需更深入的细节(如ISO 13400中0x8001的定义、DID 0xF810的具体数据结构),可进一步查阅相关标准(ISO 13400-2、ISO 27145-3、ISO 14229)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)