SOME/IP(Scalable service-Oriented MiddlewarE over IP)是一种面向服务的中间件协议,运行在 IP 网络之上,主要用于汽车电子系统中的控制器局域网通信。它由宝马集团提出,并已被 AUTOSAR 标准采纳,成为车载以太网通信的核心协议之一。
SOME/IP 的设计目标是满足汽车行业对高带宽、低延迟和灵活服务发现的需求,适用于从车载诊断到高级驾驶辅助系统(ADAS)等多种场景。
SOME/IP 具有以下优势:
- 面向服务:以服务为粒度进行接口定义和调用,便于软件模块化与复用。
- 动态发现:通过服务发现机制,客户端可以动态查找并订阅所需服务。
- 灵活扩展:支持多种传输层协议(TCP/UDP),可根据可靠性要求灵活选择。
- 跨域通信:适用于不同域控制器之间的高效数据交互。
SOME/IP 协议栈中涉及几个关键概念,理解它们有助于掌握协议的工作方式。
服务是 SOME/IP 通信的基本单元,由服务接口(Service Interface)定义,包含方法(Method)、事件(Event)和字段(Field)等元素。服务提供方(Server)实现并发布服务,服务消费方(Client)通过服务发现找到并调用服务。
服务发现(SD)是 SOME/IP 的重要组成部分,负责在网络上动态发布、查找和管理服务。通过 SD 报文,服务提供方可以广播自身能力,服务消费方可以主动查找所需服务,并建立通信关系。
SOME/IP 支持多种通信模式,以适应不同的应用需求:
- 请求/响应(Request/Response):客户端发送请求,服务端返回响应,适用于远程过程调用。
- 事件通知(Event Notification):服务端主动向已订阅的客户端推送事件数据。
- 字段访问(Field Access):提供对服务状态属性的读取和写入能力。
SOME/IP 报文由消息头和消息体组成。消息头包含协议版本、消息类型、服务 ID、方法 ID 等关键字段,用于路由和识别消息。消息体则承载具体的序列化数据。
一个典型的 SOME/IP 报文结构如下:
| 字段 | 长度(位) | 说明 |
|---|---|---|
| Message ID | 32 | 服务 ID 与方法 ID 的组合,用于标识消息 |
| Length | 32 | 从 Request ID 到消息体末尾的长度 |
| Request ID | 32 | 客户端生成的请求标识,用于匹配响应 |
| Protocol Version | 8 | 协议版本号 |
| Interface Version | 8 | 服务接口版本号 |
| Message Type | 8 | 消息类型,如请求、响应、通知等 |
| Return Code | 8 | 返回码,标识调用结果 |
SOME/IP 的通信测试
基于VLAN ID的测试
| Service Name | VLAN ID | VLAN Name | Server | ServerIP |