SOME/IP 学习笔记

定义

SOME/IP 即 Scalable service-Oriented MiddlewarE over IP,是定义在传输层(TCP/UDP)之上的面向服务的中间件,是汽车以太网面向服务的架构 SOA 中的重要内容。
image
image

功能

SOME/IP 支持:

  • 序列化
  • RPC 远程调用
  • 服务发现 SD
  • 发布/订阅
  • UDP 拆包组包

服务

服务是 SOME/IP 的核心,服务端提供服务,客户端使用服务。服务由零个或多个方法事件以及字段组成。

方法 Method

客户端调用服务端的函数/程序/服务/方法。方法有两种形式:

  • Request & Response:常规的客户端请求,服务端响应
  • Fire & Forget(Request_NoReturn):单向客服端请求,服务端不响应
    image

事件 Event

客户端向服务端订阅事件组 EventGroup,当事件组有更新时,服务端发布消息,通知所有订阅的客户端
image

字段 Field

方法和事件的组合,提供 Getter/Setter 两个方法用于获取/设置字段值,以及一个 Notification 事件,当字段值变化时,服务端发布消息,通知订阅的客户端。
image

消息格式

TCP/UDP 的 Payload 部分,由 SOME/IP Header 和 SOME/IP Payload 组成

image
image
各字段含义如上图,其中 Message Type 取值及含义如下表:

Message Type 报文类型 说明
0x00 REQUEST 请求,需要回复
0x01 REQUEST_NO_RETURN 请求,不需要回复
0x02 NOTIFICATION Notifier/Event,不需要回复
0x80 RESPONSE 回复
0x81 ERROR 错误

服务发现 SOME/IP SD

服务发现主要用于

  • 定位服务实例
  • 检测服务实例状态是否在运行
  • 发布/订阅行为管理

SOME/IP SD 也是 SOME/IP 消息,遵循 SOME/IP 消息格式,有固定的 Message ID、Request ID 以及 Message Type 等。并对 SOME/IP Payload 进行了详细的定义。
image
SOME/IP SD 只用 UDP 协议的 30490 端口通信。

SOME/IP SD 的 Payload 中主要包含 Entry 和 Option:

Entry

用于提供服务、发现服务、订阅事件组。Entry 有服务和 EventGroup 两种:

服务 Entry

image

EventGroup Entry

image

Entry 的类型有
image

有的类型具有相同的值,这时需要通过 Entry 中的 TTL 字段来区分到底是 Start 还是 Stop,是ACK 还是 NACK。

SOME/IP SD 提供了两种动态发现服务的机制。一种是 Offer Service(Type = 0x01),由服务端广播其提供的服务;另一种是 Find Service(Type = 0x00),由客户端请求可用的服务。

Option

Option 字段用来传输 Entry 的附加信息,包括对于服务实例的 IP 地址、传输协议、端口号等信息。
image

例如 Type = 0x04 时
image

有关 SOME/IP SD 报文格式的详细解析可以参考 SOME/IP-SD 深入浅出 -熊猫眼老阿姨 一文。

Reference

posted @ 2021-10-02 12:58  Zijian/TENG  阅读(7257)  评论(0编辑  收藏  举报