SOME/IP--协议英文原文讲解2

前言
SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:

1. SOME/IP协议讲解

2. SOME/IP-SD协议讲解

3. python/C++举例调试讲解


4.1 Specification of SOME/IP Message Format (Serialization)

SOME/IP消息格式规范--序列化

Serialization describes the way data is represented in protocol data units (PDUs) as payload of either UDP or TCP messages, transported over an IP-based automotive in-vehicle network.

序列化描述了基于UDP/TCP传输层的 的发送、接收的数据包的数据组织方式。简单的理解:我们用UDP/TCP发送、接收我们的自定义数据。不过现在是把这个自定义数据 替换成SOME/IP定义好的格式。用SOME/IP定义数据的方式 组织 数据的过程 就称为序列化。

4.1.1 Limitation

Reordering of out-of-order segments of a SOME/IP message is not supported. 

SOME/IP由于网络差或干扰数据乱序,这种乱序SOME/IP协议本身是不支持恢复的

也就是说SOME/IP协议本身不负责 传输数据的 稳定完整性。

简单理解:需要数据传输可靠则选择TCP传输协议,否则可选择UDP协议(具体怎么选择,后面章节有专门讲解)

4.1.2 Header -- 消息头的数据格式 -- 后面有详解
[PRS_SOMEIP_00030]
Upstream requirements: RS_SOMEIP_00027
[The structure of header layout shall consist of -- 消息头结构的布局(内存布局)组成
• Message ID (Service ID/Method ID) [32 Bits]
• Length [32 Bits]
• Request ID (Client ID/Session ID) [32 Bits]
• Protocol Version [8Bits]
• Interface Version [8 Bits]
• Message Type [8 Bits]
• Return Code [8 Bits]
]

[PRS_SOMEIP_00941]
Upstream requirements: RS_SOMEIP_00027
In case of E2E communication protection being applied, the E2E header is placed
after Return Code, depending on the chosen Offset value for the E2E header. The
default Offset value is 64 bit, which puts the E2E header exactly between Return Code
and Payload

E2E保护 是一种数据校验,E2E的header的大小 和 配置有关,具体参见AUTOSAR_FO_PRS_E2EProtocol.pdf 此专题不做讨论。

[PRS_SOMEIP_00031]
Upstream requirements: RS_SOMEIP_00027
For interoperability reasons the header layout shall be identical for all implementations
of SOME/IP. The fields are presented in transmission order i.e. the fields on the top left
are transmitted first

头部布局的互操作性要求

  • 互操作性原因

    • 为了实现互操作性,SOME/IP 的头部布局在所有实现中必须保持一致
  • 字段传输顺序

    • 字段按照 传输顺序 描述:
      • 位于左上角的字段 最先被传输。(网络字节序)
      • 依次向右下角的字段传输。

这确保了不同系统之间在使用 SOME/IP 协议时,能够正确解析和处理数据包头部。

4.1.2.1 Message ID [32 Bit]
[PRS_SOMEIP_00034]
Upstream requirements: RS_SOMEIP_00021, RS_SOMEIP_00022, RS_SOMEIP_00023, RS_-
SOMEIP_00027
The Message ID shall be a 32 Bit identifier that is used to identify
• the RPC call to a method of an application
• or to identify an event.
Note: The assignment of the Message ID is up to the user / system designer. However,
the Message ID is assumed be unique for the whole system (i.e. the vehicle).

消息 ID 的定义和用途
  • 消息 ID(Message ID) 是一个 32 位标识符,用于以下目的:
    1. 标识应用程序中 方法的 RPC 调用
    2. 标识一个 事件
注意事项
  • 消息 ID 的分配由用户或系统设计者决定。
  • 系统范围内唯一性
    • 消息 ID 应在整个系统中(如车辆范围内)保持唯一。

 4.1.2.2 Method ID [16 Bit]
[PRS_SOMEIP_00245]
Upstream requirements: RS_SOMEIP_00016, RS_SOMEIP_00027
The Message ID header field shall be structured into a 16 Bit Service ID header field
(to distinguish up to 2^16 services) and a 16 bit Method ID header field to distinguish
up to 2^16 service elements (namely methods and/or events). This structuring of the
Message ID header field is illustrated as shown in [PRS_SOMEIP_00755].
Note: It is common practise and recommended to split the ID space of the Method ID
between Methods and Events/Notifications. Methods would be in the range 0x0000-
0x7FFF (first bit of Method-ID is 0) and Events/Notifications would use the range
0x8000-0x8FFF (first bit of the Method-ID is 1).

Message ID 的结构
  • Message ID 的头部字段由以下两个部分组成:

    1. 16 位服务 ID(Service ID)
      • 用于区分多达 2162^{16}216 个服务。
    2. 16 位方法 ID(Method ID)
      • 用于区分多达 2162^{16}216 个服务元素(包括方法和/或事件)。
  • Message ID 的结构示例可以参考 [PRS_SOMEIP_00755]。

推荐的 Method ID 分配规则
  • 分配方法:(这个是建议的通用做法,如果有人自己定制规则区分方法和事件也是可以的)
    • 方法(Methods):使用范围 0x0000 - 0x7FFF(即 Method ID 的第一位为 0)。
    • 事件/通知(Events/Notifications):使用范围 0x8000 - 0x8FFF(即 Method ID 的第一位为 1)。
备注
  • 推荐做法:将 方法(Methods)事件/通知(Events/Notifications) 的 ID 空间分开管理。

[PRS_SOMEIP_00755] Message ID header field

Eventgroup is a logical grouping of events and notification events of fields inside a service in order to allow subscription.

Eventgroup 是服务内部的一种逻辑分组,用于将以下内容组织在一起:

  1. 事件(Events)
  2. 字段的通知事件(Notification Events of Fields)
目的
  • Eventgroup 的设计是为了便于 订阅(Subscription)

事件有 事件ID ,事件组有组ID(后面会讲)

简而言之,Eventgroup 是一种机制,用来将服务内相关的事件和通知逻辑地组织起来,以便客户端可以通过订阅 Eventgroup 来获取这些事件的更新或通知。(因此订阅是以组来订阅的)

下面截图 是订阅报文解析的截图:

[PRS_SOMEIP_00365]

A SOME/IP Eventgroup shall at least contain one event.

事件组不能为空,至少要包含一个事件。

[PRS_SOMEIP_00366]

Events as well as field notifiers shall be mapped to at least one SOME/IP Eventgroup

事件必须要绑定在一个 或 多个事件组上。

4.1.2.3 Length [32 Bit] -- 长度字段
[PRS_SOMEIP_00042]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00040
Length field shall contain the length in Byte starting from Request ID/Client ID until
the end of the SOME/IP message

解释了length从哪里开始计算 -- 从后一个字段(Request ID/Client ID)到整条消息的最后。

4.1.2.4 Request ID [32 Bit]
The Request ID allows a server and client to differentiate multiple parallel uses of the
same method, getter or setter.

给同一个client标记请求的顺序的。
client给server发送的requestID 是多少,server就得回复多少。
client并发发送多个同样的请求,但是携带的参数不通,则需要通过这个requestID 来区分

仅用于method/getter/setter

[PRS_SOMEIP_00043]
Upstream requirements: RS_SOMEIP_00025, RS_SOMEIP_00027
[The Request ID shall be unique for a request-response pair to differentiate between
multiple calls of the same method.](证明了回复和请求的requestID 是相同的)

[PRS_SOMEIP_00704]
Upstream requirements: RS_SOMEIP_00027
When generating a response message, the provider shall copy the Request ID from
the request to the response message.(证明了请求和回复的requestID 相同)

服务端不需要关系RequestID的合理性 只需要拷贝回复就行,如果不合理则需要client端自己负责。
Note:
This allows the client to map a response to the issued request even with more than one
request outstanding.

规则说明
  • 在生成响应消息时,提供方(Provider) 应该将请求消息中的 Request ID 复制到响应消息中。
注意事项
  • 这种机制的意义在于:
    • 即使客户端同时发出了多个请求,也能通过 Request ID 将响应消息与对应的请求进行正确匹配。
总结

这种设计确保了在 并发请求 场景下,客户端能够可靠地识别和处理每个响应消息,避免数据混淆或误匹配问题。

[PRS_SOMEIP_00044]
Upstream requirements: RS_SOMEIP_00025
Request IDs must not be reused until the response has arrived or is not expected to
arrive anymore (timeout).

保证并发时的唯一性:
在未收到回复之前,或者认为回复超时之前,Request ID 不能重复。
收到回复了 可以重复 -- 由client 负责。


0voice · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9128.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fullcalendar @fullcalendar/react 样式错乱丢失问题和导致页面卡顿崩溃问题

问题描述: 我使用 fullcalendar的react版本时,出现了一个诡异的问题,当我切换到 一个iframe页面时(整个页面是一个iframe嵌入的),再切换回来日历的样式丢失了!不仅丢失了样式还导致页面崩溃了&…

基于SpringBoot的高校一体化服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

第3章 基于三电平空间矢量的中点电位平衡策略

0 前言 在NPC型三电平逆变器的直流侧串联有两组参数规格完全一致的电解电容,由于三电平特殊的中点钳位结构,在进行SVPWM控制时,在一个完整开关周期内,直流侧电容C1、C2充放电不均匀,各自存储的总电荷不同,电容电压便不均等,存在一定的偏差。在不进行控制的情况下,系统无…

Spring Security(maven项目) 3.0.2.9版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

Python Matplotlib库:从入门到精通

Python Matplotlib库:从入门到精通 在数据分析和科学计算领域,可视化是一项至关重要的技能。Matplotlib作为Python中最流行的绘图库之一,为我们提供了强大的绘图功能。本文将带你从Matplotlib的基础开始,逐步掌握其高级用法&…

【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2

个人主页:Icomi 专栏地址:蓝桥杯嵌入式组入门与进阶 大家好,我是一颗米,本篇专栏旨在帮助大家从0开始入门蓝桥杯并且进阶,若对本系列文章感兴趣,欢迎订阅我的专栏,我将持续更新,祝你…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…

DeepSeek-R1:开源Top推理模型的实现细节、使用与复现

核心观点 ● 直接用强化学习就可以让模型获得显著的推理能力,说明并不一定需要SFT才行。 ● 强化学习并不一定需要复杂的奖励模型,使用简单的规则反而取得意想不到的效果。 ● 通过知识蒸馏让小模型一定程度上也有推理能力,甚至在某些场景下…

【10.2】队列-设计循环队列

一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…

2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)

目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …

中文输入法方案

使用了三年的自然码双拼,毫无疑问是推荐使用双拼输入法。 三年积累下来的习惯是: 1 自然码方案 2 空格出字 字母选字 直到如今,想要做出改变,是因为这样的方案带来的痛点: 1 使用空格出字就无法使用辅助码&#…

【东雪莲病毒|罕见病毒|Traitor Virus】

恶意程序分析:东雪莲病毒(Traitor Virus) 项目地址:东雪莲病毒|罕见病毒|Traitor Virus(Github) 代码效果展示 一、代码概述 这是一款使用Python编写的恶意程序。在获取管理员权限后,会对计算机系统执行一系列破坏性…

《Java核心技术 卷II》日期和时间API的时间线

日期和时间API Java1.0的Date类过于简单,大部分被弃用。 Java1.1引入Calendar类,但没有处理诸如闰秒之类的问题。 Java 8引入java.time.API,修正过去缺陷。 时间线 1967年,铯133原子的特性推导出了秒的精确定义。之后由原子钟网络…

IO进程寒假作业DAY6

请使用互斥锁 和 信号量分别实现5个线程之间的同步 使用互斥锁 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include &…

mybatis(112/134)

多对一 第一种方法&#xff1a; 一的表参数设置&#xff1a; <association property"clazz" javaType"Clazz"> <id property"cid" column"cid"/> <result property"cname" column"cname"/> <…

读书笔记:《华为突围ERP封锁全纪实》

文章背景&#xff1a; 2019年5月&#xff0c;华为被美国制裁&#xff0c;其ERP系统面临断供风险。ERP系统是企业核心管理软件&#xff0c;一旦中断&#xff0c;华为的全球业务将陷入瘫痪。面对这一生死存亡的危机&#xff0c;华为启动了“突围”计划&#xff0c;历经数年艰苦奋…

【C++】设计模式详解:单例模式

文章目录 Ⅰ. 设计一个类&#xff0c;不允许被拷贝Ⅱ. 请设计一个类&#xff0c;只能在堆上创建对象Ⅲ. 请设计一个类&#xff0c;只能在栈上创建对象Ⅳ. 请设计一个类&#xff0c;不能被继承Ⅴ. 请设计一个类&#xff0c;只能创建一个对象&#xff08;单例模式&#xff09;&am…

K8s运维管理平台 - KubeSphere 3.x 和4.x 使用分析:功能较强,UI美观

目录标题 Lic使用感受优点&#xff1a;优化点&#xff1a; 实操首页项目 | 应用负载 | 配置 | 定制资源定义存储监控告警集群设置 **KubeSphere 3.x** 和 **4.x**1. **架构变化**&#xff1a;2. **多集群管理**&#xff1a;3. **增强的 DevOps 功能**&#xff1a;4. **监控与日…

SpringBoot或SpringAI对接DeekSeek大模型

今日除夕夜&#xff0c;deepseek可是出尽了风头&#xff0c;但是我看网上还没有这方面的内容对接&#xff0c;官网也并没有&#xff0c;故而本次对接是为了完成这个空缺 我看很多的博客内容是流式请求虽然返回时正常的&#xff0c;但是他并不是实时返回&#xff0c;而是全部响应…