SOME/IP协议(一)
1. 介绍
SOME/IP(Scalable service-Oriented MiddlewarE over IP)是一个面向汽车或嵌入式系统的通信协议,支持 RPC、事件通知和有线格式(底层序列化)。
SOME/IP应在不同的操作系统(如AUTOSAR、GENIVI和OSEK)上实现,甚至在没有操作系统的嵌入式设备上实现。SOME/IP应用于ECU客户端/服务器之间的串行化。SOME/IP的实现允许AUTOSAR解析RPC、PDU并将信号传输到应用程序。
1、RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许程序调用其他地址空间(通常是共享网络的另一台机器上)的过程或子程序,就像是本地调用一样,而不需要程序员显式地编写网络代码。RPC的目标是使远程计算看起来像是本地计算。
2、SOME/IP(Service-Oriented Middleware over IP)序列化是指将数据转换为符合 SOME/IP 协议规范的二进制格式,以便在网络上传输。SOME/IP 是一种轻量级的通信协议,通常用于汽车电子领域中的通信和服务发现。在SOME/IP中,数据通过网络传输之前,需要进行序列化,以确保发送和接收方都能正确地解释和处理数据。序列化的过程涉及将结构化的数据对象转换为字节流,以便能够在网络上传输。反之,接收方需要进行反序列化,将字节流还原为原始的数据对象序列化是网络通信中常见的操作,它确保在不同系统之间的数据交换能够准确、高效地进行。SOME/IP定义了一种特定的序列化格式,包括对整数、浮点数、字符串等不同数据类型的编码规则。这有助于确保不同系统之间的数据交换的一致性和互操作性。总的来说,SOME/IP序列化是指将通信数据按照协议规范进行编码,以便通过网络进行可靠的传输。这有助于实现分布式系统中各个模块之间的通信和协作)
1.1 为什么需要SOME/IP
基本动机是规范“另一种 RPC 机制”来替代当前的基础设施/技术,以实现如下目标:
- 满足嵌入式系统对资源消耗的硬性要求
- 与尽可能多的用例和通信伙伴相兼容
- 至少在有线格式上与 AUTOSAR 兼容,如:AUTOSAR 不需要修改标准就可以通过接受和发送能与之通信的 PDUs(Protocol Data Unit)
- 提供汽车用例所需要的功能
- 可从小型平台扩展到大型平台
- 可在不同的操作系统上实现(如:AUTOSAR,GENIVI,及 OSEK),甚至不带操作系统的嵌入式设备上
- 可用于 ECU 内部 C/S 间通信的数据序列化
- SOME/IP 的实现允许 AUTOSAR 解析 PRC 的 PDU 和发送信号给应用
1.2 文档结构
SOME/IP 协议规范(PRS,Protocol Specification)描述了以下两方面内容:
- 有线格式(序列化)
-协议头格式
-不同数据类型如何按照 SOMP/IP 进行序列化 - 事件和基于 RPC 的通信协议
-传输协议
-PRC 通信规则
2. 缩略语和缩写
下面缩略语和缩写表中的术语都是与 SOME/IP 协议相关,但并未包含在 AUTOSAR 的 glossary 中。
表 3.1 SOME/IP 缩略语和缩写表
序号 | 缩略语/缩写 | 描述 |
---|---|---|
1 | Byte Order Mark | Byte Order Mark(BOM)是一种 Unicode 码,U+FEFF,是位于文本流起始位置的魔术字,用来表明文本的编码方式 |
2 | Method | 被调用的方法、过程、函数,或子程序 |
3 | Parameters | 方法或事件的输入、输出、输入/输出参数 |
4 | Remote Procedure Call(RPC) | 从一个 ECU 上调用另一个 ECU 上的方法,采用消息进行信息传输 |
5 | Request | 请求,客户端发送消息触发服务端的方法调用 |
6 | Response | 响应,服务端将方法调用的结果发送消息到客户端 |
7 | Request/Response Communication | 包含 Request 和 Response 的 RPC |
8 | Event | 事件,发生时被触发或周期性被触发的单向传输数据,由数据的生产者发送给消费者 |
9 | Field | 字段,代表一种状态,因此,在执行 Getter、Setter 和 notifier 操作时始终是个有效值 |
10 | Notification Event | 通知事件,notifier 的事件消息字段 |
11 | Getter | Request/Response 调用,允许对字段进行读操作 |
12 | Setter | Request/Response 调用,允许对字段进行写操作 |
13 | Notifier | 字段值发生变化时,发送带有新值的事件消息 |
14 | Service | 服务,零个或多个方法、零个或多个事件、零个或多个字段的逻辑组合 |
15 | Service Interface | 服务接口,服务的正式规范,包括方法、事件和字段 |
16 | EventGroup | 事件组,服务内部字段的事件和通知事件的逻辑分组,以允许订阅 |
17 | Service Instance | 服务的实例化,单个服务在整车中可以有一个或多个实例,在单个 ECU上也可以被多次实例 |
18 | Server | 服务器,提供服务实例的 ECU 在该服务实例的上下文中被称为服务器 |
19 | Client | 客户端,使用服务器服务实例的 ECU 在改服务实例的上下文中被称为客户端 |
20 | Fire and Forget | 没有响应消息的请求称为 fire&forget |
21 | User Datagram Protoco | UDP,用户数据报协议,一种使用简单无连接通信模型的标准网络协议 |
22 | Union | 共用体,动态采用不同数据类型的数据结构 |
23 | Non-extensible (Standard) struct | 不可扩展结构体,无标记的序列化结构。最多以兼容的方式在结构的末尾添加新成员,可选成员不支持 |
24 | Extensible struct | 可扩展结构体,带有标记的序列化结构。以兼容的方式新成员可以添加到任意位置,支持可选成员 |
3. 协议规范
SOME/IP 通过以太网提供面向服务的通信。它基于列出服务提供功能的服务定义。服务可以由零个或多个事件、方法和字段组成而成。
- Events:提供从提供者触发式或循环发送的数据到订阅者。
- Methods:为订阅者提供了发出 RPC 调用的可能性,远程程序运行在提供者端。
- Fields:由以下三个方面的一个或多个组合
(1) Notifier,事件发生时,由服务提供者发送数据给服务订阅者
(2) Getter,被服务订阅者调用,用来显示的向服务提供者查询值
(3) Setter,被服务订阅者调用,按需修改服务提供者端的值
Notifier 和 Event 的主要区别在于:Event 只在事件发生的时候才会发送,而 Notifier除了在事件发生后发送数据外,在订阅后也可直接发送数据。
3.1 SOME/IP 消息格式(序列化)规范
序列化描述了 PDU 中基于车载以太网传输的 UDP 或 TCP 消息载荷的表述方式。
3.1.1 限制
不支持对 SOME/IP 消息的无序段进行重新排序。
3.1.2 Header
SOME/IP的报文格式如下图所示,由消息头部(Header)和消息体(Payload)组成,Header主要包括以下字段: