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 进行了详细的定义。

    参考博客
相关推荐
平生不喜凡桃李5 小时前
Linux网络:UDP
linux·网络·udp
weixiao04305 小时前
Linux网络 网络层
linux·网络·智能路由器
静若繁花_jingjing5 小时前
面试_项目问题_RPC调用异常
网络·网络协议·rpc
せいしゅん青春之我6 小时前
[JavaEE初阶] 防止网络传输中的中间人入侵---证书
服务器·网络·网络协议·java-ee
RTC老炮7 小时前
webrtc弱网-ReceiveSideCongestionController类源码分析及算法原理
网络·算法·webrtc
python百炼成钢8 小时前
3.Linux 网络相关
linux·运维·网络·stm32·单片机
2503_930123938 小时前
Kubernetes (四)网络插件详解:Flannel 与 Calico 的原理、数据流向与实战对比
网络·容器·kubernetes
星哥说事9 小时前
网络安全设备:入侵检测系统(IDS)、入侵防御系统(IPS)的配置与使用
网络·安全·web安全
问道飞鱼9 小时前
【HTTP知识】HTTP OPTIONS 预检请求深度解析与优化策略
网络·网络协议·http·option·预检
qq_4798754310 小时前
(4)计算机网络中的各种网络设备概述
网络·计算机网络·智能路由器