SOME/IP到底讲什么
xsobi 2025-01-11 18:15 1 浏览
来源:车载以太网小L
SOME/IP到底讲什么
01
SOME/IP
2011年,BWM设计和提出了SOME/IP,SOME/IP全称为Scalable service-Oriented MiddlewarE over IP,拆分起来理解就是以Server-Client服务形式进行通信,并且服务具备高度可扩展性,同时作为应用层协议运行于车载以太网四层以上,作为以太网通信中间件来实现应用层和IP层的数据交互,使其不依赖于操作系统,又能兼容AUTOSAR和非AUTOSAR平台,因此SOME/IP可以独立于硬件平台,操作系统和编程语言。
众所周知,在传统以太网中,OSI将以太网分层七层,但是汽车行业,只有5层,将OSI 5-7层统称为应用层,其中SOME/IP协议是一种应用层协议,运行在TCP/UDP传输协议之上。从图中可知,SOME/IP还有一个控制协议,称为SOME/IP-SD,用于服务发现,跟SOME/IP各司其职。
讲了SOME/IP所在层级,再来介绍下,SOME/IP报文的封装风格。不管是SOME/IP还是SOME/IP-SD报文,统一作为TCP/UDP Payload进行封装,四层以下封装格式遵循以太网本身的封装风格。
02
整车软件平台
目前整车电子电器软件平台如图所示,分为Classic AUTOSAR Platform(简称CP),Adaptive AUTOSAR Platform(简称AP)和非AUTOSAR Platform。这三者是共同运行在整车电子电器架构之上,不存在谁取代谁,尤其是AP并不会取代CP和非AUTOSAR,相反AP可以很好的和其他平台交互,以丰富整车应用。
CP,AP和非AUTOSAR平台之间的通信交互主要由SOME/IP实现,借助SOME/IP协议的高度平台扩展性,实现不同平台的数据交互,因此统一的SOME/IP通信机制是不同平台通信的前提。
BWM设计SOME/IP协议之后,通过CP规范发布公开从而被广泛用于车载以太网,所以说SOME/IP起源于CP也不为过:
- AUTOSAR 4.0:支持初步的SOME/IP报文
- AUTOSAR 4.1:增加SOME/IP-SD控制机制和发布-订阅机制
- AUTOSAR 4.2:增加序列化机制
- AUTOSAR 4.3:修复序列化机制的bug,同时增加大数据包基于UDP报文分片机制,此时的SOME/IP已经是完善的版本
为了在不同软件平台上运行SOME/IP,使得整车以太网上实现SOA架构通信机制,所以AP规范中也同步引入了SOME/IP,因此对于AUTOSAR系统,CP和AP之间实现SOME/IP通信,是比较容易的。
非AUTOSAR软件平台为了和车内CP和AP ECU更好的交互,GENIVI系统同样也开发了一套开源vSOME/IP软件源码,以便和CP/AP交互,但vSOME/IP是开源的,所以性能会差一些,因此需要统一的规范来做约束,从而做一些深层次的二次开发,我们基于AUTOSAR SOME/IP规范指定出自己的企业规范,以限制不同平台SOME/IP的通信行为。
03
SOME/IP特性
1.序列化和反序列化
将结构化的数据按照一定规则进行排序,将排完序的对象以一定形式封装到SOME/IP报文Payload中,发送给网络中。接收端收到后,通过反序列化将SOME/IP Payload按一样的排序规则重新组合成结构化数据,可以理解为将并行的结构化数据序列化成串行数据,通过以太网发送到网络中。
如图结构体中张三的个人信息按照特定规则进行编码,之后以二进制数据串形式通过以太网传输到对端,接收端收收到后反序列化出张三的个人信息。
CAN没有结构化数据这种概念,但为了实现一组功能相关信号打包在一起,从而引入信号组的概念,信号组就是人为的将CAN信号重组成结构体的一种做法。SOME/IP自身有序列化和反序列化的机制,因此SOME/IP通信行为中是绝对不会存在信号组的,所以如果你在设计CP Arxml后出现信号组的属性,那么这个Arxml就不在是SOME/IP,而是类CAN的一种基于信号的以太网通信。
2. 服务发现
服务发现称为Service Discovery,简称SOME/IP-SD,在服务创建并且可用之后,Server和Client需要通过SOME/IP-SD动态的创建两者连接,SOME/IP-SD报文主要:
- OfferService:Server服务就绪后,满足服务发布条件后,主动发出OfferService,用以告知组播内其他节点,该服务已经启动,可以创建服务连接。
- FindService:当网络中未收到相关服务的OfferService或者暂时未收到,而且Client又需要该访问该服务,那Client可以使用FindService去主动寻找服务,如果Server服务Ready的话,会回复响应的OfferService报文。
- StopOfferService:Server端发现服务不可用,不满足提供服务条件时,会主动发送StopOfferService报文,用以告知组播内其他节点,该服务已不可用,取消服务请求和订阅。
- Subscribe:事件组的交互机制采用订阅-发布形式,当收到服务OfferService之后,Client通过Subscribe报文主动跟Server订阅相关事件组。
- SubscribeACK/SubscribeNACK:当Server收到Client的订阅报文之后,需要先行判断是否符合可订阅的条件,如果该Client满足事件组订阅条件,则返回SubscribeACK,告知Client订阅成功,当事件组内的事件准备就绪之后,Server会以某种约定好的形式发送相关事件给成功订阅的Client,如果该Client不符合事件组订阅条件,那Server就会直接回复SubscribeNACK,告知订阅不成功。
- StopSubscribe:当Client订阅某个事件组之后,发现后续并不在需要改事件组的数据了,则通过StopSubscribe报文来通知Server,以断开两者事件组的交互。
下面结合下图详细说明,服务可用之后,Server通过SD OfferService组播报文告诉client,该服务已经可用,Client收到offerService报文之后,首先启动了事件组订阅流程,先发送Subscribe报文给Server,Server验证相关权限之后,发送订阅成功SubscribeACK给Client,之后,当Server该事件组的事件准备就绪之后,会主动发送Event给Client。同时Client在OfferService有效期内,随时都可以发送服务请求Request,跟Server进行相关数据的交互。
4.服务接口
服务发现章节讲了服务发现相关报文的交互机制,那大家对SOME/IP控制报文有了一定的了解,同时对服务双方如何建立连接有一定的认识,接下来我们来讲下服务数据交互。
所有的服务数据交互所采用的报文我们统称为服务接口,服务接口主要分为两大类:
- Method:一种远程过程调用,采用Request-Response机制进行通信,由Client发送远程过程调用请求Request,用于请求相关数据或者请求执行相关操作,Server收到Request,根据内容做一些操作之后,通过Response对Client的Request做出一些反馈。Method是一种可靠传输的服务接口,需要关系Request是否被送达。
- Event:订阅-发布机制是控制事件组的交互,之后事件组是以单个Event报文进行就交互,从而向Client发送相关数据。Event是一种单向传输,无法保证数据是否被准确送达。
针对以上两类服务接口,SOME/IP进行了服务接口扩展,从而还有了Fire&Forget报文和Field:
- Fire&Forget:一种特殊的Method,但和Method又有本质的区别,因为Fire&Forget只有Request,没有Response报文,主要有两种作用,一种是作为某些Trigger触发Server做相应操作,一种是充当Client的Event,向Server发送相关数据
- Field:Field关联三种服务接口,以组合的形式来呈现,三者对同一个数据做相关联的操作。
- Getter:Client主动获取相关操作的当前数据,该服务接口Request不携带任何数据
- Setter:Client主动设置相关操作的数据,同时Server要将Client设置的数据通过Response反馈给Client,以便Client确认设置的数据是否成功。
- Notification:通信行为和Event极为类似,也遵循订阅-发布机制,以事件组的形式来订阅,但所发布的数据和Getter/Setter是同一套。
以上是我对SOME/IP的一些见解,因为篇幅有限,并不能完整的讲述SOME/IP的内容,比如SOME/IP报文格式,Server和Client服务启动流程等等也都是比较重要的内容,如果大家感兴趣,可以自己看看AUTOSAR SOME/IP相关规范,就会有比较深入的了解。规范列表如下:
- 《AUTOSAR_SWS_ServiceDiscovery.pdf》
- 《AUTOSAR_SWS_SOMEIPTransformer.pdf》
- 上一篇:从根本上理解 JSON 和 XML 的区别
- 下一篇:XML文件的整体结构
相关推荐
- 图解面试题:SQL存储过程有什么用?
-
面试中有时候会问:存储过程有什么用?看了今天的知识,你就知道如何回答了。1.存储过程是什么?假如你每天要开车完成一些列重复的操作:车钥匙启动车,倒车。现在出现了一款新车,可以自动的完成这些重复的工作。...
- 零基础入门开始学习SQL Server存储过程
-
你好啊,我是晨希,今天我们来了解一下SQLServer的存储过程,通过这篇零基础的SQLServer存储过程入门指南文章。您将了解到什么是存储过程,如何创建、调用和优化它们,以及如何提高安全性和性...
- SQLSERVER:存储过程和函数
-
在SQLServer中,存储过程和函数是数据库编程的基础。它们允许开发者编写SQL脚本来执行复杂的操作,同时提供了代码重用和逻辑封装的能力。下面将通过一些实例来详细介绍存储过程和函数的使用。...
- 数据库基础知识:SQL Server存储过程入门必知
-
什么是存储过程SQL语句需要先编译然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储...
- SQL储存过程
-
存储过程是一组预编译的SQL语句,可以保存在数据库中,并作为一个单元执行。它封装了复杂的操作逻辑,可以包含控制结构(如条件判断、循环)、输入参数、输出参数以及错误处理逻辑。存储过程的主要目的是提...
- sqlserver开窗及去重row_number() over(partition by c1 order by c2)
-
开窗函数/分析函数:over()开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。...
- SQL server中exists用法
-
1、简介?不相关子查询:子查询的查询条件不依赖于父查询的称为不相关子查询?相关子查询:子查询的查询条件依赖于外层父查询的某个属性值的称为相关子查询。带Exists的子查询就是相关子查询...
- SQL 将两张包含相同字段和不同字段的表数据合并成一张表
-
第一种:两个表的相同字段数据查询后合并起来select工号,卡号,姓名,时间from(selectPeople_id工号,People_id卡号,People_name姓名,Rep...
- 「Oracle」 sql语句查询报错ORA-00904
-
Oracle报错ORA-00904:标识符无效一般情况下,标识符错误是因为:语句中的列名在表中不存在,修改sql语句或者修改列名即可。...
- SQL轻松入门(5):窗口函数
-
01前言标题中有2个字让我在初次接触窗口函数时,真真切切明白了何谓”高级”?说来也是一番辛酸史!话说,我见识了窗口函数的强大后,便磨拳擦掌的要试验一番,结果在查询中输入语句,返回的结果却是报错,Wh...
- SQLServer 日期函数大全
-
一、统计语句1、--统计当前【>当天00点以后的数据】SELECT*FROM表WHERECONVERT(Nvarchar,dateandtime,111)=CONVERT(Nv...
- 一文讲懂SQL联合查询UNION
-
大家好,我是宁一。今天讲解SQL教程第13课:UNION联合查询。...
- SQL中的INSERT INTO SELECT语句:数据复制的高效利器
-
SQL是数据库操作的重要语言,INSERTINTOSELECT语句则是其中的一把利器。本文将详细介绍这一语句的用法和优势,帮助读者更好地理解和运用。一、引言...
- SQL server查询-日期操作
-
常用的sql语句查询:...
- sql查询更新update select
-
针对一个上线的项目进行数据库优化,以便后期统计,遇到一个数据填充的问题,在此记录一下,各位如果也有这种问题,欢迎一起交流。表结构:...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- firebug 使用 (31)
- characterencodingfilter (33)
- getmonth (34)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android应用开发 (31)
- html转js (35)
- 索引的作用 (33)
- checkedlistbox (34)
- localhost 8080 (32)
- 多态 (32)
- xmlhttp (35)
- mysql更改密码 (34)