当接收到的DoIP报文格式错误或者负载类型不支持时,接收方应发送“通用报文头负响应报文”。

“通用报文头负响应报文”由报文头(8字节)+负响应码(1字节)组成,其负载类型的取值为0x0000(更多信息见上一篇文章)。以协议版本号为0x03为例,其报文格式为:
0x03 0xFC 0x00 0x00 0x00 0x00 0x00 0x01 0xXX
其中0xXX为负响应码,其取值及含义如下面的表格所示:
| 取值 | 描述 | 动作 |
|---|---|---|
| 0x00 | 格式不正确 | 关闭套接字 |
| 0x01 | 未知的负载类型 | 丢弃报文 |
| 0x02 | 报文过长 | 丢弃报文 |
| 0x03 | 内存溢出 | 丢弃报文 |
| 0x04 | 负载长度无效 | 丢弃报文 |
| 0x05 ~ 0xFF | 保留 |
解释如下:
若接收到的报文不符合DoIP报文头的规范(比如“协议版本号”与“版本号取反”不匹配),或DoIP服务器不支持该版本,则应发送一条“通用报文头负响应”报文,并将否定码设置为0x00;
若接收到的报文的负载类型不被支持,则DoIP实体应发送一条“通用报文头负响应”报文,并将否定码设置为0x01;
若接收到的报文的负载长度超过了当前DoIP实体所支持的最大值,无论当前内存使用情况如何,均应发送一条“通用报文头负响应”报文,并将否定码设置为0x02;
若接收到的报文的负载长度超过了当前DoIP 实体可用的内存,则应发送一条“通用报文头负响应”报文,并将否定码设置为0x03;
若接收到的报文的负载长度与特定负载类型所期望的长度不匹配,则 DoIP 实体应发送一条“通用报文头负响应”报文,并将否定码设置为0x04。这包括针对特定负载类型的最小长度、固定长度和最大长度的检查;
当DoIP实体作为服务器运行并通过UDP接收到负载类型为0x0000或0x0004的DoIP消息时,应丢弃该消息且不发送“通用报文头负响应”报文;
北岛夜话



发表评论