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

    参考博客
相关推荐
熏鱼的小迷弟Liu2 小时前
【计算机网络】HTTP中GET和POST的区别是什么?
网络协议·计算机网络·http
彬彬醤2 小时前
全局网络:重构数字时代的连接范式
运维·服务器·网络·数据库·重构·代理模式
上海云盾商务经理杨杨3 小时前
2025年数字藏品行业DDoS攻防指南:技术升级与合规防御双轨制
服务器·网络·安全·web安全·ddos
上海云盾商务经理杨杨3 小时前
2025年链游行业DDoS与CC攻击防御全解析:高带宽时代的攻防博弈
网络·web安全·网络安全·ddos·web3.0
人类群星闪耀时3 小时前
5G网络的安全挑战与应对策略:技术剖析与Python实战
网络·5g·安全
CyberSecurity_zhang4 小时前
信息安全 -- 什么是侧信道攻击
网络·信息安全·侧信道攻击
董厂长6 小时前
LLM :Function Call、MCP协议与A2A协议
网络·人工智能·深度学习·llm
敲上瘾7 小时前
从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
服务器·网络·网络协议·http·网络安全·https·密码学
zzr9157 小时前
深入探讨 UDP 协议与多线程 HTTP 服务器
linux·服务器·网络协议·tcp/ip·ubuntu·http·udp
栀栀栀栀栀栀8 小时前
五一の自言自语 2025/5/5
网络