SOMEIP报文格式部分字段概述(二)

书非借而不能读也!
为了提高效率,现在参考了某网友的(忘记来源了)相关文章。

【SOMEIP报文格式部分字段概述】
SOMEIP报文格式部分字段概述(二)_第1张图片
【Message ID】
Message ID是一个32位标识符,用于将RPC调用分派给应用程序的method并识别event 。 Message ID必须能唯一标识service的method或event。
Message ID的分配取决于用户; 然而,对于整个系统(即车辆),消息ID必须是唯一的。 消息ID可以与CAN ID进行比较,并且应该使用类似的过程进行处理。

 为了构造不同的method, event和field ,它们被聚集到service中。 service具有一组method , event和field以及services ID,该ID仅用于此service。
Service-ID应该是16位长度无符号整数(uint16)。  Service-ID=0xFFFE用来编码非SOME / IP服务。同一车辆内的不同服务应具有不同的Service-ID。
Method和event应在service内部使用16位Method ID来识别,对Event和notification来说,称为Event ID。

【Request ID】
Request ID允许客户端区分相同的Method的多个call 。 Request ID对于客户端和服务器的一个组合来说,需要时唯一的。 在生成响应消息时,服务器必须将请求中的Request ID复制到response消息中。 这允许客户将响应映射到发出的请求,即使有多个请求未完成。
只要响应已经接收到或者不再期望这个响应(超时),就可以重新使用Request ID。 在汽车使用案例中,只有很少数量的未完成的请求在被继续等待。 小型系统里在没有并行请求的可能性的情况下, Request ID可能总是设置为相同的值。
在AUTOSAR 架构下, Request ID需要结构化。 即使对于非AUTOSAR系统,也需要对调用者的客户端ID进行编码。
Request ID包含Client ID 和Session ID。
ECU的实施者可以按照他的实施要求来定义Client ID,并且服务器不需要知道这个布局或定义,因为他只是将整个Request-ID复制到Response中。
Client ID是ECU内Call客户端的唯一标识符。 Session ID是客户端为每个call选择的唯一标识符。 如果不需要进行Session处理,则Session ID应设置为0x0000。
Client ID还应通过具有可配置前缀或固定值支持其在整个车辆中唯一性(例如,Client ID的最高位是诊断地址或为特定应用程序/SWC配置专门Client ID)。
注意: Client ID不用于Service Discovery。
Request/Response method需要使用以ID以0x0001开头的session 来处理。
Event, notification event和Fire&Forget methods 需要使用session处理,如果应用需要的话。比如因为功能安全的需要。
对于events,notification events,和 Fire&Forget methods ,Session ID需要以0x0001开头,且每次message发出的时候递增。
当Session ID达到0xFFFF,则其回到0x0001重新开始。

【Version】
Protocol Version是一个8位字段,其中包含SOME/IP的协议版本,目前应该被设置为0x01 。
Interface Version 是一个8位字段,其中包含Service Interface的Major Version 。

【Message Type】
Message Type用来区别不同类型的message,且应当包含如下的值:
SOMEIP报文格式部分字段概述(二)_第2张图片
常规request(消息类型0x00)将在未发生错误时由response(消息类型0x80)应答。如果发生错误,则会发送error消息(消息类型0x81)。 也可以发送不需要响应消息的请求(消息类型0x01)。为了通过notification更新值,存在一个callback接口(消息类型0x02)。
对于所有消息,存在可选的acknowledgment 报文(ACK) 。 这是为那些并不告知收到消息的某些传输层协议(如UDP)而定义的。 ACK只在interface specification要求时才被传输。 本文档中仅规定了REQUEST_ACK的用法。 所有其他ACK现在都是信息性的,不需要实施。

【Return Code】
Return Code用于表示request是否已成功处理。 为了简化header布局,每条消息都传输Return代码。
类型为REQUEST, REQUEST_NO_RETURN和Notification的消息必须将返回码设置为0x00(E_OK)。 允许的特定消息类型的返回码是:
SOMEIP报文格式部分字段概述(二)_第3张图片
注意:
Return Code不适用于SOME / IP-SD。

【Payload】
SOME / IP payload字段的大小取决于使用的传输协议。 对于UDP,SOME / IP有效载荷应该在0到1400字节之间。限制为1400字节是为了允许将来对协议栈进行更改(例如更改为IPv6或添加安全机制)。 由于TCP支持有效载荷的分段,所以自动支持更大的尺寸。

你可能感兴趣的:(SOMEIP报文格式部分字段概述(二))