1 什么是SOME/IP?
- SOME/IP,全称叫做Scalable Service-Oriented Middleware over IP,由 BMW 集团于 2011 年开发。这个名字非常清楚地表明它是一种中间件解决方案,可以在控制单元之间实现面向服务的通信。面向服务的体系结构使不同网络上的软件组件更容易相互通信;为了使不同网络上的这些应用程序能够相互理解,必须有某种中间件,其主要作用是解析消息格式并使消息的预期接收者可以理解。SOME/IP 专为此目的而设计。更具体地说,SOME/IP 提供了很多中间件功能,如序列化和远程过程调用 (RPC),以使 ECU 软件能够相互通信。
- SOME/IP 可以在操作系统(Genivi、 AUTOSAR、Linux 和 OSEK)和非操作系统嵌入式系统上实现。它也成为自适应 AUTOSAR 实施的首选中间件。
- SOME/IP 支持信息娱乐域以及车辆中其他域的功能, 可以替换MOST和CAN 总线协议。
- Supported by ARXML and FIBEX databases as well as Franca IDL
2 SOME/IP 的主要中间件功能
- (1)序列化:这是数据在数据单元中表示的方式,可以是 UDP 或 TCP 消息。当数据通过网络传输时,读取数据的ECU可能有不同的架构、操作系统等,只有有一致的数据传输机制才能保证互操作性。SOME/IP 允许序列化,来实现 transforming into and from on-wire representation。
- (2)远程过程调用 (RPC):这是一种客户端 ECU 远程调用服务端ECU提供的服务的方法。它是客户端 ECU 在需要来自服务器的一些数据时采用的一种数据交换方法。RPC 可以有返回值也可以没有返回值,即客户端可以请求数据作为响应,或者简单地调用一个函数来在服务器端执行某些任务。
- (3)服务发现:服务发现 (SD) 协议是 SOME/IP 的核心功能。在面向服务的架构中,服务(即函数功能实体【方法、事件或字段】)必须是可发现的。SOME/IP SD 协议管理提供动态查找功能并能配置其访问权限【是提供服务还是阻止它可用】。
- (4)发布/订阅:客户端可以订阅服务器的内容,从而可以动态地接收来自服务器的更新数据。SOME/IP 的发布/订阅功能动态配置客户需要哪些数据(事件/字段)并共享这些数据。Pub/Sub 由 SOME/IP SD 管理。
- (5)UDP 消息分段:允许通过 UDP 传输较大长度的SOME/IP 消息。
3 SOME/IP 报文PDU在各层中封装
SOME/IP 本质上是位于传输层之上的应用层通信协议,它是位于TCP/UDP报文的Payload部分。我们可以参考【1.1各层的PDU之间的‘信息接力’】来理解SOME/IP 报文是如何一步步在以太网4层网络架构中封装的,本质上就是每一层都要有特定的报文头。发送就是加报文头的过程,接收就是去除报文头的过程。发送的具体过程为:
- 应用层填充【SOME/IP 发送的消息,即SOME/IP Data Payload】
- 【应用层SOME/IP Data Payload】+ SOME/IP中间件添加的SOME/IP 报文头
- 【SOME/IP 报文】+ 传输层添加的TCP或者UDP报文头
- 【传输层报文】+ 网络层的添加IP报文头
- 【网络层报文】+ 链路层添的加MAC报文头