SOME/IP

SOME/IP背景

SOME/IP的全称是Scalable service-Oriented MiddlewarE over IP,为基于IP的可扩展的面向服务的中间件,由宝马的Lars Völker博士在2011年设计并提出。SOME/IP是车载网络的通信中间件,位于应用程序和传输层之间,可以为控制器提供一种面向服务的通信方式,适配多种操作系统(如FreeRTOS、RTA-OS、QNX、Linux、Android等),甚至在没有操作系统的嵌入式设备上也可以使用。

什么是SOME/IP?

SOME/IP是定义在传输层之上的一种面向服务的中间件协议. 是汽车以太网面向服务架构的SOA的重要内容.

SOME/IP功能:

  1. 序列化
  2. RPC远程调用
  3. 服务发现SD
  4. 发布 / 订阅
  5. SOME/IP传输协议

1. 序列化

SOME/IP协议对序列化的解释为数据在PDU(Protocol Data Units 协议数据单元), 展开来说就是将不同的数据结构转换为可在网络中传输的形式, 或者说是数据在网络上传输的封装和排列规则. 发送规则将数据一种特定的规则进行序列化, 接受方将数据以同样的规则进行反序列化, 从而得到发送方到接受方所发送的所有数据. 这部分定义既包含了报文头部也包含了载荷数据, 不仅定义了头部的格式 各字段的长度和含义, 还定义了各种数据结构在有效载荷中的排列规则.

2. RPC 远程调用

通过RPC来请求其他主机上面的服务, 基于Request / Response的模式来实现. 客户端发起请求, 服务端接受请求并处理, 并将结果返回给客户端. (当我们在调用服务的时候, 就像直接调用本地的服务一样)

在SOME/IP中除了同步的调用方式, 还支持异步调用的Fire/Forget, 客户端发起请求后,不需要等待服务器的处理请求, 可以直接执行后面的代码, 同时服务器也不需要返回结果

3. 服务发现

SOME/IP SD可以认为是SOME/IP协议的核心, 提供了一种可以动态的发现和获取服务的状态的机制. 所谓的面向服务的通信: 首先要知道哪些可以提供服务, 并且需要知道哪些服务的状态和提供方, 然后才可以使用和消费这个服务.

4. 发布 / 订阅功能

SOME/IP只会在需要的时候才发送数据, 这主要是通过发布 / 订阅的机制来实现的. 客户端在发现想要使用的服务后, 会对服务进行订阅, 当条件满足后, 服务器会将客户端所需要的服务发送出去.

5. SOME/IP 传输协议

主要解决了数据有可能被分片的问题. 在网络中, 数据都是通过IP协议传输的, 由于数据链路层MTU的限制, 导致可能会出现IP分片. 由于IP分片存在诸多的问题, 为了防止IP出现分片, 设计了SOME/IP TP(传输协议)

IP分片的问题

IP分片虽然能解决MTU限制, 但存在以下限制:

  • 重组开销大: 接受端需缓存所有分片, 直到最后一个分片到达, 消耗内存和计算资源
  • 分片丢失影响整体: 任一IP分片丢失会导致整个数据包无法重组, 需全部重传

所以有了SOME/IP在应用层实现分片和重组, 规避了IP分片, 在应用层自定义重传逻辑...

服务

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

方法(Method)

客户端调用服务端的代码. 有两种形式:

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

事件(Event)

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

字段(Field)

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

消息格式

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

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

服务发现主要用于

  • 定位服务实例
  • 检测服务实例状态是否在运行
  • 发布/订阅行为管理
    SOME/IP SD 也是 SOME/IP 消息,遵循 SOME/IP 消息格式,有固定的 Message ID、Request ID 以及 Message Type 等。并对 SOME/IP Payload 进行了详细的定义。

    参考博客
相关推荐
IT大白鼠9 小时前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Julien200410 小时前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
kekekzt11 小时前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
mooooooooooye13 小时前
2026 年跨平台 SSH 客户端怎么选?Xterminal、Termius、MobaXterm 谁更合适
服务器·网络·ssh
Blockchina14 小时前
Codex 实战:从一句需求到可验收的 Linux 主机巡检脚本
运维·服务器·网络
江安下小雨16 小时前
muduo网络库(十六):新增连接池模块
网络·c++
aiot1891893521816 小时前
机场候机大厅高空场景技术红线!蓝牙AOA不能做手机导航??!!
大数据·网络·人工智能·蓝牙aoa
从入门到退休16 小时前
企业远程控制选型:向日葵SDK vs RustDesk自建,谁是更务实的选择?
运维·服务器·网络·远程工作·远程控制
Learn-Share_HY17 小时前
[IT Network]如何配置反向路徑過濾器(rp_filter),以解決路由不對稱問題?
linux·嵌入式硬件·物联网·网络协议·tcp/ip·http·iot
fb_1234517 小时前
网络技术基础
网络