中间件SOME/IP简述
SOME/IP
SOME/IP 不是广义上的中间件,严格的来讲它是一种通信协议,但中间件这个概念太模糊了,所以我们也一般称 SOME/IP 为通信中间件。
SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩展性通信中间件协议。
所以,要弄清 SOME/IP 需要从它的名字出发,要搞清楚它的 3 个要素:
- 面向服务 SOA
- 基于 IP 协议之上的通信协议
- 中间件
SOME/IP 功能
既然是通信中间件,那么做的就是通信相关的事情。
SOME/IP 能干的事情有 3 类:
- 服务发现 (Service Discovery)
- 远程服务调用 (RPC,remote producer call)
- 读写进程信息 (Getter & Setter)
SOME/IP 与 CAN
CAN 是传统的汽车软件通信协议,CAN FD 是其扩展,它们与 SOME/IP 的主要区别如下:
CAN 协议是汽车软件开发最重要的通信协议,但随着汽车智能化程度越来越高,CAN 通信遇到的瓶颈越来越大,表现在 2 个维度:
通信速度
CAN 一般是 512kb/s,CAN FD 能到 1MB/s
通信负荷
CAN 是 8Byte,CAN FD 能到 64Byte,而 SOME/IP 能到 1500 Byte
SOME/IP 和车载以太网、IP关系
CAN 是基于信号在双绞线中传输信号,而 SOME/IP 是面向服务在车载以太网中传输信号。而 SOME/IP 中的 IP 是 Over IP ,也就是在 IP 协议层之上的意思。
TCP/IP、UDP 都是传统网络协议,网络协议是分层的,车载以太网网络协议也是一样的。位于协议栈的应用层,基于 TCP/UDP 协议之上的应用。

SOME/IP 和 Autosar、SOA 的关系
SOME/IP 最初由宝马公司设计,2013 年被收录到 Autosar 4.1 规范。
AP和CP Autosar 都支持 SOME/IP 协议。一辆汽车中可能同时存在基于 AP Autosar 的 ECU 和基于 CP Autosar 的 ECU,它们之间存在 Signal2Service 操作,通过车载以太网中的 SOME/IP 之类的协议通信。
AP Autosar 是基于 SOA 理念设计的软件框架,而 SOME/IP 作为其通信协议,可以实现 Service 的 Publishe/Subscribe 通信,所以在汽车领域一般讲 SOA 不能不提到 AP Autosar,而讲到 SOME/IP 时,SOA 也会常被提起。
SOME/IP 的形态
具体到汽车软件开发,SOME/IP 有两种形态:
- 集成到 Autosar 中的 Module
- 集成到 Posix 系统中的独立的 Lib
需要注意 GENIVI 这个组织,它针对 SOME/IP 标准实现了开源 vsomeip 方案,vsomeip 能够独立集中到操作系统中。

SOME/IP 的消息格式
SOME/IP 协议一般指代具体
- SOME/IP
- SOME/IP-SD
- SOME/IP-TP
SOME/IP 消息结构:

一个完整的 SOME/IP 消息,包含以下内容:
- Message ID 代表 Sevice ID 或者 Method ID
- Length 消息长度,从 Request ID 算起到
- Request ID
- Protocal Version 协议版本号
- Interface Version 接口版本号
- Message Type 消息类型
- Return Code 返回编码
- Payload 数据负载
Message ID
可以指代一个远程调用 RPC 的 Method 或者是一个服务的 Event。
Request ID
Client ID 用来区分不同的客户对象,Session ID 用来区分不同的对话。
Message Type
Message Type 用来标记消息类型。共有如下几种:

Return Code
根据 MessageType 不同,Return Code 不同。 一般是 E_OK(0x00),但如果是 Response 或者 Error 的话就不会是 0x0。
Payload
SOME/IP 底层可以基于 TCP 或者 UDP,这使得 Payload 的容量不一样。
如果是 UDP 协议,那么 SOME/IP 大概限制在 1400 Bytes的容量。
但如果是基于 TCP 协议,通过数据分段传输,那么 SOME/IP 可以实现更大容量传输。
Endianess
所有的 SOME/IP Header 内容采用大端传输(big endian)。 而 Payload 中的数据存放顺序通过配置设置。
SOME/IP 支持的数据结构类型
基础数据类型

结构化数据类型

SOME/IP 消息通信类型
- R & R (Request & Response)
- F & F (Fire & Forget)
- Notification
- Event
R&R
最常见的通信模式之一是请求/响应模式。客户端发送请求消息,服务器给予回应。
F&F
客户端发送 Request,无需 Response 的操作称为 Fire & Forget。
Notification Event
Notification 代表的是一种 Publish-Subscribe 通信机制,Server 端会主动推送信息给订阅方。
但 Notification 分3种情况:
- Cyclic Update 周期性的发送相关 value 的变化
- Update On Change 如果 value 发生变化,则向外推送
- Epsilon Change 如果 value 的值大于相应的 epsilon值,那么对外推送消息
相关文章:
中间件SOME/IP简述
SOME/IP SOME/IP 不是广义上的中间件,严格的来讲它是一种通信协议,但中间件这个概念太模糊了,所以我们也一般称 SOME/IP 为通信中间件。 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩…...
[自学记录03|百人计划]移动端GPU的TB(D)R架构基础
一、专有名词解释 1.System on Chip(Soc) Soc是把CPU、GPU、内存、通信基带、GPS模块等等整合在一起的芯片的称呼。常见有A系Soc(苹果),骁龙Soc(高通),麒麟Soc(华为&am…...
详解Java枚举
一、知识点 二、概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下: enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法,枚举值默认为从0开始的有…...
ES6-ES13学习笔记(4.0)
includes函数 判断字符串是否存在指定字符 <!--* Author: RealRoad1083425287qq.com* Date: 2023-06-01 08:40:33* LastEditors: Mei* LastEditTime: 2023-06-01 08:58:54* FilePath: \vscode\ECMA\05\01.html* Description: * * Copyright (c) 2023 by ${git_name_ema…...
线段树C++详细讲解和个人见解
问题引入 1275. 最大数 给定一个正整数数列 a1,a2,…,an,每一个数都在 0∼p−1 之间。 可以对这列数进行两种操作: 添加操作:向序列后添加一个数,序列长度变成 n1;询问操作:询问这个序列中最后 L 个数中…...
构建sysbench的镜像
方式1:先docker run一个镜像,手动安装好commit docker run -it --name mycentos arm64v8/centos:7 /bin/bash docker commit -a "PX Bai" mycentos mycentos1 docker run -it -d --namemycentos1 mycentos1 /bin/bash docker exec -it mycent…...
leetcode解题思路分析(一百四十)1201 - 1208 题
丑数3 给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。丑数是可以被 a 或 b 或 c 整除的 正整数 。 容斥原理二分法 class Solution { public:int nthUglyNumber(int n, int a, int b, int c) {long long ab lcm((long long)a, (lo…...
FPGA设计的指导性原则 (一)
这一部分主要介绍FPGA/CPLD设计的指导性原则,如FPGA设计的基本原则、基本设 计思想、基本操作技巧、常用模块等。FPGA/CPLD设计的基本原则、思想、技巧和常用模 块是一个非常大的问题,在此不可能面面俱到,只能我们公司项目中常用的一些设计原则与 方法提纲携领地加以介绍,希…...
【架构】常见技术点--服务治理
导读:收集常见架构技术点,作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务,技术跟业务具体结合才能发挥技术的价值。 目录 1. 微服务 2. 服务发现 3. 流量削峰 4. 版本兼容 5. 过载保护 6. 服务熔断 7. 服务…...
手撕数据结构—单链表
✅作者:简单^不简单 🔥系列专栏:C语言数据结构 💖如果文章有错误,时刻欢迎大家的指正。当然觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝 💬格言:希望我…...
Benewake(北醒) 快速实现 TF02-i-RS485 与电脑通信操作说明
目录 一、前言二、工具准备1. USB-RS485 转接器2. TF02-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC:Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TF02-i-RS485 引脚定义3. 连接图 四、TF02-i-RS485 与电脑通信操作说明1. …...
【分享】科大讯飞星火认知大模型(初体验)
前言: 哈喽,大家好,我是木易巷~ 随着人工智能技术的迅猛发展,自然语言处理(NLP)成为了热门话题。在众多NLP模型中,科大讯飞星火认知大模型成为了一个备受瞩目的新秀,今天我们来了解…...
logstash 采集应用日志切割问题
1.logstash [oswatch@rce1 conf]$ cat test.conf input { file { path=>["/tmp/test/test.log*"] } } output { stdout { codec=>rubydebug{} } } 2.python脚本: [oswatch@rce1 conf]$ cat t1.py #!/usr/bin/python # -*- coding: UTF-…...
计算机网络实验:认识Packet Tracer软件
目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分,它涉及到多种硬件和软件的协同工作,以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术,我们需要进行…...
【MySQL新手到通关】第六章 时间日期函数
文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数(天)3.4 相差时间&…...
深蓝学院C++基础笔记 第 1 章 C++初探
第 1 章 C初探 1.从Hello World 谈起 Hello World: #include <iostream> int mian() { std::cout << "Hello World!" << std::endl; }函数: 一段能被反复调用的代码,可以接收输入,进行处理并(或)产生输出-返回…...
【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Kubernetes mysql 实战以及外部存储处理 [一]
在 Kubernetes 中部署 MySQL 数据库需要考虑以下几个方面: 部署方式:可以选择使用 StatefulSet 或者 Deployment 进行部署,如果需要有状态的服务,使用 StatefulSet 更加合适。存储:MySQL 需要一个持久化存储来保存数据。可以使用 Kubernetes 提供的 PersistentVolumeClaim…...
使用【Python+Appium】实现自动化测试
一、环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境,path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows,官网地址 Redirecting 点击下载按钮会到GitHub的…...
位图和布隆过滤器
位图和布隆过滤器 位图的概念位图的简单模拟实现位图set位图reset位图test 位图总的代码和实现位图的应用布隆过滤器布隆过滤器的简单实现相关操作讨论布隆过滤器的结构设计布隆过滤器插入布隆过滤器查找 布隆过滤器总代码 布隆过滤器优点和缺陷海量数据面试题哈希切割位图应用…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
