关于SOME/IP的理解

2023-05-16

1 总体说明

如上图所示为标准的网络七层架构,SOME/IP ( Scalable service-Oriented MiddlewarE over IP),即“运行于IP之上的可伸缩的面向服务的中间件”。他在系统中其实就是一个中间件的存在,所谓“Middleware中间件”是一种独立的系统软件或服务程序,分布式应用软件可借助Middleware在不同的技术之间共享资源。所谓的分布式应用软件,在这里指的就是“服务”;不同的技术之间,在这里指的就是“不同的平台或操作系统,比如Adaptive AUTOSAR系统等。

2 服务说明

服务是SOME/IP的最核心概念。在一个服务中,定义了Server和Client两个角色:Server提供服务,Client调用服务。对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。一个Service由0~多个Event/Method/Field组成。与CAN相比,面向服务的通讯方式能够大大降低总线的负载率。

2.1 Method

调用或引用一个进程/函数/子程序,通常由Client发起,并由Server答复。Request是最常见的一种Method,由Client向Server请求数据;Response是Request的结果,由Server答复Client的Request。而Method Fire & Forget方式,只Client向Server发起,但Server对该请求不回复。

2.2 Event

一个单向的数据传输,只能是on change类型,用于Server主动向订阅(Subscribe)了相关服务的Client发布(Publish)信息。

2.3 Field

由以下三项内容构成:

  • Notifier:通知,Server的Client订阅了服务后第一时间主动向其发送数据。
  • Getter:获取,由Client向Server请求数据。
  • Setter:设置,由Client修改Server的数据。

3 解析SOME/IP格式

3.1 Message Type说明

报文类型说明
0x00REQUEST请求,需要回复
0x01REQUEST_NO_RETURN请求,不需要回复
0x02NOTIFICATIONNotifier/Event,不需要回复
0x80RESPONSE回复
0X81ERROR带有错误信息的回复

3.2 Payload说明

通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload。

4 SOME/IP 服务发现SD

由于服务需要由Server和Client共同完成,因此在进行正常的数据传输之前,需要一系列的准备工作确认Server和Client之间是否已有网络连接。之后,Client还要询问Server能否提供所需的服务,并对服务的Event进行订阅。这些工作都是通过SOME/IP服务发现(Service Discovery)实现的。SOME/IP服务发现用于定位服务实例、检查服务是否可用以及部署发布和订阅句柄。服务发现只能通过UDP实现。服务发现的报文格式与一般的SOME/IP报文相同,但是其Message ID固定为0xFFFF8100。

4.1 主要功能

  1. 定位服务实例
  2. 检测服务实例是否在运行(即服务实例的状态)
  3. 发布/订阅行为的管理

4.2 SD报文解析

SOME/IP SD报文也是一种SOME/IP报文,是在SOME/IP报文的基础上进行了扩展,增加了Entry、Option等字段;Entries用于同步服务实例的状态和发布/订阅的管理,Options用于传输Entries的附加信息。SOME/IP SD报文的ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等属性都是固定值。

4.2.1 Entry

Entry字段可以理解为服务实例的“入口”,该入口包含服务实例以及需要订阅的事件组的信息。主要通过Entry实现提供服务、发现服务,以及订阅事件组的功能。

供服务用Entries

供EventGroup用Entries

报文中Type内容解释如下:

类别Type值Type名称
Service0x00FindService 用于Client查找服务
0x01Offer/StopOfferService 用于Server向Client提供服务或停止提供服务
Eventgroup0x06Subscribe/StopSubscribe Client向Server订阅服务或停止订阅
0x07SubscribeAck/Nack Server对于订阅的应答,如果订阅成功,Client收到的就是SubscribeAck,否则收到SubscribeNack

对于Offer/ StopOfferService、Subscribe/ StopSubscribe和SubscribeAck/ Nack,每一组Entries都共用了相同的Type值,但通过TTL字段可以识别究竟是提供服务还是停止提供服务,是订阅事件还是取消订阅,是订阅成功应答还是订阅失败应答:当TTL = 0时,表示报文对应的服务实例不再有效,此时对应的Type类型分别就是停止提供服务、停止订阅事件以及订阅失败应答。

4.2.2 Options

每一个Option都是有一个2字节的Length字段、1字节的Type字段和1字节的保留位开始的。Length字段指示的长度是从保留位开始的。Options的类型如下表所示:

类别Type值Type名称
Configuration 用于配置服务0x01Configuration
Load Balancing用于配置服务实例的优先级0x05Load Balancing
Endpoint 发送服务相关的地址和端口0x04IPv4 Endpoint
0x06IPv6 Endpoint
0x24IPv4 SD Endpoint
0x26IPv6 SD Endpoint
Multicast声明Multicast地址0x14IPv4 Multicast
0x16IPv6 Multicast

4.3 SD状态机

不管是客户端还是服务端,都有同样的状态机,但是他们的状态机具有不同的行为。

状态服务端行为客户端行为
DownService不可用服务未被应用请求,则停留在该状态;收到OfferService,启动TTL计时器,此时服务若被应用请求,进入Main;
Init进入条件:当服务准备完毕(Available)后;During:收到Find Service报文,服务端忽略此消息;退出条件:若服务不可用了,将进入Down ;INITIAL_DELAY,当定时器超时后,进入Repetition。进入条件:服务被请求后,进入此阶段;During:等待INITIAL_DELAY时间;退出条件:如果此时收到Offer Service,则取消计时器,直接进入Main ;如果服务请求被释放,进入Down ;计时器超时后,发送第一个Find service,进入Repetition。
Repetition作用:为了让客户端快速找到有哪些Service,During:如果收到某客户端的FindService,延迟一定时间后,单独发送单播OfferService给服务请求端;如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;如果收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;退出条件:如果服务不可用,离开此阶段进入Down ,并发送StopOfferService通知所有客户端。作用:重复发送Find service;退出条件:收到Offer Service,停止发送计数和计时,立即进入Main 触发发送SubscribeEventgroup;如果服务请求被释放,进入Down ,若有订阅,则发送StopSubscribeEventgroup。
Main作用:此阶段将周期性发送OfferService;During:如果收到某客户端的FindService,不影响发送计数,发送单播OfferService给服务请求端;如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;退出条件:如果服务不可用,离开此阶段进入Down,并发送StopOfferService。作用:不再周期发送Find Service,不必要负载;During:收到Offer Service,触发发送SubscribeEventgroup;如果收到StopOfferService,则停止所有计时器;退出条件:如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。

5 SOME/IP序列化

5.1 概念

序列化(Serialization)指的是将数据结构或对象依据事先定义的规则转换成二进制串的过程;反序列化(Deserialization)指的是将二进制串依据相同规则重新构建成数据结构或对象的过程。

5.2 说明

在AUTOSAR中是指数据在PDU中的表达形式,可以理解为来自应用层的真实数据转换成固定格式的字节序,以实现数据在网络上的传输。软件组件将数据从应用层传递到RTE层,在RTE层调用SOME/IP Transformer,执行可配置的数据序列化(Serialize)或反序列化(Deserialize)。SOME/IP Serializer将结构体形式的数据序列化为线性结构的数据;SOME/IP Deserializer将线性结构数据再反序列化为结构体形式数据。在服务端,数据经过SOME/IP Serializer序列化后,被传输到服务层的COM模块;在客户端,数据从COM模块传递到SOME/IP Deserializer反序列化后再进入RTE层。如下图参考Autosar Com过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于SOME/IP的理解 的相关文章

随机推荐

  • 浅谈ASIL: 汽车安全性等级

    目录 ASIL 表示汽车安全性等级 ASIL的确定 1 严重度 2 暴露度 3 可控度 ASIL 故障分析手段 ASIL 表示汽车安全性等级 这是 ISO 26262 标准针对道路车辆的功能安全性定义的风险分类系统 ASIL 根据伤害的可能
  • SOA中间件DDS(数据分发服务-Data Distribution Service)

    DDS协议 高可靠性 实时性 DDS Data Distribution Service for Real Time Systems xff0c 是一种面向实时系统的数据分发服务 xff0c 由OMG提供 xff0c 它的权威性可以证明该协
  • MQTT与DDS的比较

    MQTT VS DDS MQTT协议 三种服务质量 QoS xff1a 最多一次 Sender 发送的一条消息 xff0c Receiver 最多能收到一次 xff0c 也就是说 Sender 尽力向 Receiver 发送消息 xff0c
  • R-Car H3系列SOC芯片与R-Car M3 R8A77961JBP0BA区别

    RENESAS推出的 xff1a R Car H3 系列 SOC 芯片 R8A77951JA00BA xff03 YJ1 xff0c R Car M3 系列 SOC 芯片 R8A77960JA60BG xff03 YJ5 在内核上 xff1
  • PTP(IEEE1588),TSN时间同步方法

    本文首先简要介绍主流的时间同步方式GNSS xff0c NTP xff0c PTP 然后通过NTP和PTP对比 xff0c 解释PTP性能更优秀的原因 xff1b 并对算法公式进行了推导 0 Why need time synchroniz
  • AUTOSAR的四种功能安全机制

    虽然AUTOSAR不是一个完整的安全解决方案 xff0c 但它提供了一些安全机制用于支持安全关键系统的开发 本文用于介绍AUTOSAR支持的四种功能安全机制 xff1a 内存分区 xff08 Memory Partitioning xff0
  • libstdc++版本冲突的解决

    类似的问题出现在测试环境部署过程 xff0c 当编译完成该前端解析器后 xff0c 由于其依赖一些库文件 xff0c 包括系统库文件libstdc 43 43 so 6 及 libc so xff0c 这都是系统至关重要的库文件 但是不同系
  • 3D打印——CLIP技术之更快速更高表面质量

    论文 Gradient light video projection based stereolithography for continuous production of solid objects 阅读 论文共分为6个章节 xff1a
  • 汽车上DTC是什么意思?DTC是什么故障

    DTC的全称是 Diagnostic Trouble Code xff0c 意为诊断故障代码 如今 xff0c 汽车很多故障都是通过故障代码去诊断的 xff0c 例如汽车底盘检测 车身及附件检测 汽车污染物与噪声处理部件等相关检测等 目的旨
  • 人生算法——读书笔记

    跨越出生和运气 xff0c 实现富足和自由 用概率思维 做好决策 人生算法九段 广义而言大自然有两个重要的算法 xff0c 一个是进化 xff0c 一个是大脑 现实中我们虽然拼命思考 xff0c 但是极少思考自己的思考 围绕认知的飞轮 xf
  • Linux 上功能强大的网络工具 tcpdump 详解

    tcpdump 是用于捕获传入和传出流量的网络实用程序 这是您需要了解的有关在 Linux 上使用 tcpdump 的所有信息 Linux 配备了大量的网络实用程序可供选择 tcpdump 是一种功能强大的网络工具 xff0c 如果您需要对
  • 简析车载以太网TSN标准

    众所周知 xff0c 通用以太网是以非同步方式工作的 xff0c 网络中任何设备都可以随时发送数据 xff0c 因此在数据的传输时间上既不精准也不确定 xff1b 同时 xff0c 广播数据或视频等大规模数据的传输 xff0c 也会因网络负
  • 英伟达发布的系统级芯片orin

    本文为英伟达全面分析的第七篇文章 xff0c 关注英伟达在今年会大规模交付的Orin系统级芯片 Orin 是亚特兰蒂斯神话第一任统治者 xff0c 海王Altan的儿子 Orin一经发布 xff0c 便成为众多车企争抢装车的对象 本文重点探
  • Shell内置命令之exit的语法与实例

    系统中是有exit命令的 用于退出当前用户的登录状态 但是在 Shell 脚本中 exit 语句是用来退出当前脚本的 下面这篇文章主要给大家介绍了关于Shell内置命令之exit的语法与实例 需要的朋友可以参考下 https www jb5
  • SHELL编程

    一 变量 1 shell 脚本基础知识 编译型语言 xff1a 如 c语言 解释型语言 xff1a shell 脚本 shell脚本的本质 xff1a shell命令的有序集合 2 shell 编程的基本过程 基本过程分为三步 xff1a
  • 浅谈TC8数据链路层测试

    当今时代 xff0c 智能汽车已成为一个炙手可热的话题 xff0c 各种先进汽车电子技术蓬勃发展 xff0c 比如自动驾驶 V2X OTA 这些新技术的背后都离不开车载以太网通信技术的支持 浅谈TC8数据链路层测试 知乎 其中数据链路层实现
  • 100 道 Linux 常见面试题 建议收藏,慢慢读~

    本文共 2W 43 字 xff0c 分别从 Linux 概述 磁盘 目录 文件 安全 语法级 实战 文件管理命令 文档编辑命令 磁盘管理命令 网络通讯命令 系统管理命令 备份压缩命令等方面拆解 Linux 常见面试问题 可以先收藏 xff0
  • patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题

    低版本 libc 库运行高版本 libc 库编译的程序 https blog csdn net Longyu wlz article details 108023117 在这篇博客中我描述了使用 patchelf 来修改动态库链接器的方法
  • Alpha-beta 算法

    Alpha beta 算法是棋类游戏中最常用的 xff0c 也是最基础的剪枝方法 xff0c 要说Alpha beta 算法 就得先说下max min博弈树 算法 xff0c 就是模拟电脑下子 xff0c 要下在对电脑最优的地方 xff0c
  • 关于SOME/IP的理解

    1 总体说明 如上图所示为标准的网络七层架构 xff0c SOME IP Scalable service Oriented MiddlewarE over IP xff0c 即 运行于IP之上的可伸缩的面向服务的中间件 他在系统中其实就是