当前位置: 首页 > news >正文

中间件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&#xff0c;每一个数都在 0∼p−1 之间。 可以对这列数进行两种操作&#xff1a; 添加操作&#xff1a;向序列后添加一个数&#xff0c;序列长度变成 n1&#xff1b;询问操作&#xff1a;询问这个序列中最后 L 个数中…...

构建sysbench的镜像

方式1&#xff1a;先docker run一个镜像&#xff0c;手动安装好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 给你四个整数&#xff1a;n 、a 、b 、c &#xff0c;请你设计一个算法来找出第 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设计的基本原则、思想、技巧和常用模 块是一个非常大的问题,在此不可能面面俱到,只能我们公司项目中常用的一些设计原则与 方法提纲携领地加以介绍,希…...

【架构】常见技术点--服务治理

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 微服务 2. 服务发现 3. 流量削峰 4. 版本兼容 5. 过载保护 6. 服务熔断 7. 服务…...

手撕数据结构—单链表

✅作者&#xff1a;简单^不简单 &#x1f525;系列专栏&#xff1a;C语言数据结构 &#x1f496;如果文章有错误&#xff0c;时刻欢迎大家的指正。当然觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4ac;格言&#xff1a;希望我…...

Benewake(北醒) 快速实现 TF02-i-RS485 与电脑通信操作说明

目录 一、前言二、工具准备1. USB-RS485 转接器2. TF02-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC&#xff1a;Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TF02-i-RS485 引脚定义3. 连接图 四、TF02-i-RS485 与电脑通信操作说明1. …...

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…...

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软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分&#xff0c;它涉及到多种硬件和软件的协同工作&#xff0c;以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术&#xff0c;我们需要进行…...

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…...

深蓝学院C++基础笔记 第 1 章 C++初探

第 1 章 C初探 1&#xff0e;从Hello World 谈起 Hello World: #include <iostream> int mian() { std::cout << "Hello World!" << std::endl; }函数: 一段能被反复调用的代码&#xff0c;可以接收输入&#xff0c;进行处理并(或)产生输出-返回…...

【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Kubernetes mysql 实战以及外部存储处理 [一]

在 Kubernetes 中部署 MySQL 数据库需要考虑以下几个方面: 部署方式:可以选择使用 StatefulSet 或者 Deployment 进行部署,如果需要有状态的服务,使用 StatefulSet 更加合适。存储:MySQL 需要一个持久化存储来保存数据。可以使用 Kubernetes 提供的 PersistentVolumeClaim…...

使用【Python+Appium】实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub的…...

位图和布隆过滤器

位图和布隆过滤器 位图的概念位图的简单模拟实现位图set位图reset位图test 位图总的代码和实现位图的应用布隆过滤器布隆过滤器的简单实现相关操作讨论布隆过滤器的结构设计布隆过滤器插入布隆过滤器查找 布隆过滤器总代码 布隆过滤器优点和缺陷海量数据面试题哈希切割位图应用…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...