1. 背景

SOME/IP是一种汽车中间件解决方案,其全称是Scalable Service-Oriented Middleware over IP,即位于 IP 协议层以上的一种面向服务的可扩展的中间件。

  • 中间件:该术语起源于复杂的软件系统开发,用以实现软件组件之间的数据交换,这种数据交换通常需要经由网络,中间件的任务就是确保需要交换数据的软件组件在网络中透明地传输数据。SOME/IP 作为一种中间件负责组织传输复杂数据(消息传递)并约定软件组件之间的函数调用(远程过程调用,RPC)。
    如今汽车中的软件数目十分庞大,并且还会随着汽车内部功能和系统的分布扩张而不断增加。这些分布式功能可能使用到一个 ECU 中的不同进程,也可能扩展到不同 ECU 的各种进程中去,随着系统复杂度的增加,不可能仅仅将消息放入到网络中传输就完成功能的实现,还需要使用 RPC 来正确控制这些分布式功能;另外,不同 ECU 可能使用不同的软件架构以及操作系统,因此还需要中间件来桥接不同的便携式操作系统接口(如 Linux 或 QNX 和 AUTOSAR 系统之间的衔接)。
  • 可扩展性:表示 SOME/IP 能够实现不同硬件平台、不同操作系统或嵌入式固件以及不同应用软件的异构设备之间的可扩展性和互操作性。
  • 面向服务:面向服务通信的概念是与传统汽车电子行业中的面向信号通信相对应的一个概念,面向服务通信是仅当客户端请求或服务器通知特定订阅者时,才在客户端与服务器间交换数据。这确保了不会浪费带宽,并且仅在需要的时间进行数据通信。
    高端信息娱乐系统最需要基于服务提供的复杂接口,如复杂的数据类型、对数据库的访问、列表的传输等。在其他使用车载网络的系统中,CAN 总线的使用仍占主导地位,信息在网络中传输,由接收器决定如何处理该信息。但是,在新型应用领域,如辅助驾驶领域,CAN 的通信方式越来越不适用。另外,在 CAN 中,数据长 8Byte,且没有大量的头信息,这些均限制了 RPC 或服务发现( Service Discovery , SD )的使用。
  • 位于 IP 协议层以上:这表明了 SOME/IP 协议在汽车以太网协议栈中所处的位置,汽车以太网协议栈总共可划分为五层,分别为物理层、数据链路层、网络层、传输层、应用层,SOME/IP 协议是一种应用层协议。
    SOME/IP 是一种汽车中间件解决方案。从一开始就被设计为能够完美适配不同尺寸和不同操作系统的设备,像是小型 ECU 如摄像头、 AUTOSAR ECU、以及信息娱乐 ECU 如车载信息娱乐系统(Head Units),还有远程通信设备等,都可以使用 SOME/IP 协议有效地交换 ECU 间的消息。同时 SOME/IP 还支持信息娱乐领域的功能以及车辆中其他领域的功能,使 SOME/IP 能够用于 MOST 以及更传统 CAN 方案的替换方案。

2. SOME/IP协议

2.1 面向服务的通信

区别于传统 CAN/LIN 等面向信号(Signal-Oriented)的通信方式,SOME/IP 提供面向服务(Service-Oriented)的通信方式。

  • 面向信号的通信——为了将信号进行传输;
    • 基于信号的通信解决方案中的软件和硬件紧密耦合,ECU 之间的通信是静态定义的。
    • 基于信号的通信是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。
  • 面向服务的通信——为了对服务的相关信息进行传输。
    • 发送方仅在接收方需要时才发送数据。优点在于总线上不会出现过多不必要的数据,从而降低负载,不过这仅仅是基于服务通信的一方面。当谈论到自动驾驶、ADAS、联网汽车等时,面向服务的架构 (SOA) 是必不可少的。在以太网和 SOME/IP 的支持下,SOA 将整个系统建模为 service interface,可以轻松地将新软件添加到系统中,而无需担心与其他软件的兼容性。
      在这里插入图片描述

SOME/IP 为应用程序提供抽象的面向服务的接口,因此,应用程序不需要处理 IP 地址和端口,而只需要处理服务。Server 端提供了一个实现服务接口的服务实例(服务接口,直白理解就是服务与外界通信的接口,也就是服务模块与外界沟通的基本出入口)。Client 端则通过SOME/IP 方式使用服务实例。

2.2 SOME/IP通信机制

[图片]

  • Request & Response Method(双向方法):客户端发送请求,服务端回复响应,是一种有问有答的对话方式。
  • Fire & Forget Method(单向方法):客户端发送请求,服务端不需要响应,是一种只问不答的对话方式。
  • Event(事件):客户端首先使用了 SOME/IP-SD 订阅(Subscribe)某一事件组(Event Group),当事件组中包含的事件发生之后,服务端就会自动给订阅了该事件的客户端发送相关的通知(Notification),Notification 消息不需要接收方进行回复。请注意,SOME/IP 协议中的 Event 总是分组在一个 Event Group 中,因此只能订阅 Event Group 而不是Event本身。
  • Fields(字段):Field 表示可以远程访问的“属性”,即客户端可以远程访问的服务端中的变量。

2.3 SOME/IP协议报文格式

SOME/IP 协议在 OSI 七层网络结构中位于应用层,从功能上讲,SOME/IP是一种将服务接口进行打包或解包的中间件:从应用层发送的数据按照 SOME/IP 的格式打包后,再传递到下层的 TCP/IP 或 UDP/IP层,再进行逐层打包和封装,最终通过物理层以比特流的形式进行传输;接收时则按照与打包相反的规则进行解包。
在这里插入图片描述

2.3.1 Message ID [32 Bit]

Message ID 用于唯一标识服务的 Method 或 Event,可区分不同的服务。Message ID 对于整个车辆系统来说必须是唯一的 。
Message ID 的结构:

  • 前 16 位是 Service ID,每个服务需要有一个唯一的服务 ID,由系统集成商进行标识。
  • 后 16 位是 Method ID。
    对于 Method ,Message ID 的结构如下:
    Service ID [16 Bit]
0 [1 Bit]
Method ID [last 15 Bit]
    其中 Method ID 的第一个位(bit)是 0。使用 16 位的 Service-ID 和从 0 位开始的16位的 Method-ID (对于实际值,Method-ID中还剩下15位),这将允许最多 65536个服务,每个服务最多 32768 个方法。
    对于 Events 和 Notifications ,Message ID 的结构如下:

在这里插入图片描述

对于 Events 来说,Method ID 的第一个位(bit)是 1。这意味着每个服务最多可以有32768 个事件或通知。

Method ID 的最高位可用来判断具体的通信方式,即采用的是 Method 还是Event 。

2.3.2 Length [32 Bit]

Length 字段长度为 32位,包含从 Request ID 开始到 SOME/IP 消息结束的长度,长度是以字节为单位的。注意,Length 不包括 Message ID 和 Length 。

2.3.3 Request ID [32 Bit]

Request ID 是客户端的唯一标识符,要能在响应到达前或超时前不被重用。

  • 在生成响应消息时,服务器必须将 Request ID 从请求中复制到响应消息中去,这才使得客户端可以将响应对应到发出的请求上。
    Request ID 前 16 位是 Client ID,用来区分特定的客户端,在整车系统中该值必须唯一;后 16 位是 Session ID,用来标识同一客户端的多次请求。
    Client ID [16 Bit]
Session ID [16 Bit]

Session ID 主要用于 Request & Response 类型的多次调用,每调用一次,Session ID 增加 1。
如果会话不在活动状态,Session ID 设置为 0x0000,当会话处于活动状态时,Session ID 设置为 [0x0001, 0xFFFF] 范围内的值。当 Session ID 为 0x0000 时,服务器并不会对这个请求作出反应。

2.3.4 Protocol Version [8 Bit]

该字段存放 SOME/IP 协议的版本号,用来识别使用的 SOME/IP 头格式(不包括 payload 的格式)。目前固定为 1。

2.3.5 Interface Version [8 Bit]

该字段存放服务接口的版本号,用来识别服务接口的主版本号。

2.3.6 Message Type[8 Bit]

Message Type 字段用于区分不同类型的消息

2.3.7 Return Code [8 Bit]

Return Code 用来表示请求是否被成功处理。为了简化 header 布局,每个消息中都会传输 Return Code 字段。

2.3.8 Payload [variable size]

Payload 由 Event 的数据元素或 Method 的参数组成,大小取决于所使用的传输层协议,对于UDP,payload 介于 0 到 1400个字节之间,由于 TCP 支持 payload 分段,所以支持更大的长度。
注意:SOME/IP 所有的 Header 字段必须以网络字节顺序(大端字节序)编码。Payload 内参数的字节顺序应由配置来定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94687.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94687.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是负载均衡,有哪些常见算法?

文章目录1.什么是负载均衡2.负载均衡的分类2.1 二层负载均衡2.2 三层负载均衡2.3 四层负载均衡2.4 七层负载均衡3.负载均衡工具3.1 LVS3.2 Nginx3.3 HAProxy4.常见负载均衡算法5.面试回答模板1.什么是负载均衡 为了提升web应用的各方面能力,我们一般会把多台机器组…

PyTorch 核心三件套:Tensor、Module、Autograd

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录引言1 Tensor1.1 🛠️Tensor 的核心用…

python源码是如何运行起来的

为什么要了解底层原理 写出高质量代码 问题定位 满足好奇心 机械通感 开始 当我们编写并运行一行 print(Hello, World!) 时,背后究竟发生了什么?Python 代码是如何从我们可读的文本,变成计算机可以执行的指令的呢? 很多人将…

MacOS Docker 安装指南

MacOS Docker 安装指南 引言 Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。Docker …

Cisco 3750X交换机更新到IOS 15.2后无法启动 提示:Boot process failed...

背景及故障现象 一台新购入的二手Cisco 3750X-48P,原机自带IOS软件版本为12.x,可以正常工作。 但将IOS版本升级到15.2之后,在启动过程中卡住。 第一次加载IOS软件时是正常的,提示: Loading "flash:/c3750e-uni…

Redis Redis 常见数据类型

Redis 提供了 5 种数据结构,理解每种数据结构的特点对于 Redis 开发运维非常重要,同时掌握每种数据结构的常见命令,会在使用 Redis 的时候做到游刃有余。 一、预备知识 官方文档:Commands | Docs (redis.io) 1、最核心的两个命令…

金融风控实战:Spring Boot + LightGBM 贷款预测模型服务化(超详细版)

金融风控实战:Spring Boot LightGBM 贷款预测模型服务化(超详细版)一、整体架构设计二、模型训练与优化1. 特征工程(Python)2. 模型评估与优化三、Spring Boot 服务实现1. 项目结构2. ONNX 模型服务3. 特征工程服务4.…

前端学习 7:EDA 工具

目录 EDA 工具 Design Ware Synopsys CoreTools 套件 VCS verdi Design Compiler EDA 工具 常用的EDA工具主要来自三家公司:Synopsys、Cadence和Mentor(已被Siemens收购)。EDA,全称电子设计自动化(Electronics …

windows有一个企业微信安装包,脚本执行并安装到d盘。

以下是将本地已有的企业微信安装包安装到D盘的完整PowerShell脚本&#xff0c;包含详细的错误处理和进度反馈&#xff1a; <# .SYNOPSIS使用本地企业微信安装包安装到D盘 .DESCRIPTION自动检测本地安装包&#xff0c;静默安装到指定目录支持.exe和.msi格式安装包 #># 强制…

[LVGL] 布局系统 lv_flex, lv_grid | 输入设备 lv_indev | union

第五章&#xff1a;布局系统&#xff08;lv_flex, lv_grid&#xff09; 欢迎回来&#xff01; 在第四章&#xff1a;样式&#xff08;lv_style&#xff09;中&#xff0c;我们掌握了如何通过色彩、字体和圆角等特性美化部件。当界面元素具备视觉吸引力后&#xff0c;如何优雅…

Linux中的mkdir命令

基本语法mkdir 命令的基本语法如下&#xff1a;mkdir [选项] 目录名创建单个目录要创建一个新目录&#xff0c;只需在 mkdir 后跟上目录名称。例如&#xff1a;mkdir new_folder这会在当前工作目录下创建一个名为 new_folder 的目录。创建多个目录可以一次性创建多个目录&#…

基于大数据的美食视频播放数据可视化系统 Python+Django+Vue.js

本文项目编号 25003 &#xff0c;文末自助获取源码 \color{red}{25003&#xff0c;文末自助获取源码} 25003&#xff0c;文末自助获取源码 目录 一、系统介绍二、系统录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询数据6.2 新…

微信小程序精品项目-基于springboot+Android的计算机精品课程学习系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

(五)系统可靠性设计

2024年博主考软考高级系统架构师没通过&#xff0c;于是决定集中精力认真学习系统架构的每一个环节&#xff0c;并在2025年软考中取得了不错的成绩&#xff0c;虽然做信息安全的考架构师很难&#xff0c;但找对方法&#xff0c;问题就不大&#xff01; 本文主要是博主在学习过程…

Shuffle SOAR使用学习经验

Shuffle SOAR 1. 基础操作与配置1.1 环境搭建与系统要求1.1.1 硬件与操作系统要求Shuffle SOAR 平台作为一款开源的安全编排、自动化与响应&#xff08;SOAR&#xff09;工具&#xff0c;其部署方式灵活&#xff0c;支持云端和自托管两种模式。对于自托管部署&#xff0c;官方推…

腾讯云 EdgeOne 产品分析与免费套餐体验指南

本文围绕腾讯云 EdgeOne 展开&#xff0c;全方位介绍它的核心能力、免费套餐内容&#xff0c;以及如何快速上手、监控和排查常见问题&#xff0c;帮助个人开发者和中小企业在不产生额外成本的前提下体验高性能的边缘加速与安全防护。 一、产品概述 EdgeOne 定位 一体化云服务平…

npm ERR! Unsupported URL Type “workspace:“: workspace:./lib

如下 npm install npm ERR! code EUNSUPPORTEDPROTOCOL npm ERR! Unsupported URL Type "workspace:": workspace:./libnpm ERR! A complete log of this run can be found in: D:\IDEA\nodejs\node_cache\_logs\2025-08-06T08_21_32_592Z-debug-0.log原因及解决 pac…

微积分: 变化与累积

微积分,这门研究变化与累积的数学分支,其核心思想竟与东方哲学中"易"的概念不谋而合。《易经》有云:“易有太极,是生两仪”,而微积分正是通过"微分"与"积分"这对辩证统一的操作,揭示了世间万物变化与永恒的奥秘。 #mermaid-svg-UjO6qqMm0h…

web-vue工作流程

接续bmcweb流程。 当登录openbmc web页面后,浏览器会根据index.html中的js文件中的routes信息,自动获取信息,比如当前的网络设置信息、Datetime时区时间信息等。 以获取网络配置信息为例: 浏览器从app.js获取到settins->network的route:”/settings/network”,加载对应…

全球化2.0 | 泰国IT服务商携手云轴科技ZStack重塑云租赁新生态

在全球数字化转型不断加速的今天&#xff0c;泰国企业对于高质量云服务的需求日益旺盛。作为深耕本地市场逾二十年的行业领先IT服务商&#xff0c;泰国IT服务商不仅覆盖了IT系统、软件、硬件及网络等多个领域&#xff0c;还持续引领当地技术服务创新。近期&#xff0c;该泰国IT…