SOME/IP-SD 深入浅出

2023-05-16

文章中,我们了解了一条完整的SOME/IP报文应该长什么样子,但这显然是不够的,至少还有以下这几个问题并没有得到明确的解决:

  • Client如何发现服务

  • 当服务不可用时,如何通知Client

  • Client如何订阅事件

这些就是SOME/IP-SD要做的事情了。SOME/IP-SD也是基于SOME/IP的报文,用来实现服务发现和事件订阅机制。SOME/IP-SD消息通过UDP进行传输,报文格式如下图所示:

Image

Flags=重新启动标志+单播标志+显示初始数据控制标志,如下图所示:

Image

服务重新启动后,所有消息的Reboot Flag须置为1,直到Session ID重新从1开始计数,之后的Reboot Flag须置为0。

Entries Array,Entry可以理解为“入口”,包含了服务实例以及需要订阅的事件组的信息,分为Service和Eventgroup两种类型,一个SD报文可能包含多个Entry,每个Entry大小都是16个字节,一个Entry可能包含0-2个Option。下图为一个完整的SD报文示例:

Image

Service Entry 用于服务发现:

Image

  • Type:当网络中未收到相关服务的OfferService或者暂时未收到,而Client又需要访问该服务,那Client可以发出FindService去主动寻找服务,如果Service已经就绪的话,会回复OfferService报文;服务就绪后,主动发出OfferService,用以告知组播内其他节点,该服务已经启动,可以创建连接;当服务不可用时,会主动发送StopOfferService报文,用以告知组播内其他节点,该服务目前不可用,停止发送请求,并取消订阅。

Type值名称
0x00FindService
0x01OfferService
StopOfferService
  • Index 1st options:Option1排在Array里第几个

  • Index 2nd options:Option2排在Array里第几个

  • # of opt 1:Option1的数目

  • # of opt 2:Option2的数目

  • Service ID:Entry关于哪个服务

  • Instance ID:Entry关于服务的哪个实例,0xFFFF表示全部实例

  • Major Version:服务的主版本号

  • TTL:“入口”的生命周期,单位为秒,我理解为发现服务时的搜索时间,提供服务时的有效时间

  • Minor Version:服务的次版本号

服务发现,说白了,就是想办法让服务消费者能够找到服务提供者。打个比方,想象你在一个有很多人的广场上找一个会唱歌的人,很显然有两种情况:1. 你认识这个人,提前说好了,他站在某个地方等你,而你知道那个地方的位置,那你肯定很容易就找到他了,这就是静态配置;2. 你并不认识这个人,存在一个中间人,你告诉中间人你想找一个会唱歌的,而那个人也会告诉中间人我是会唱歌的,我站在广场的哪个位置,然后中间人把位置给你,你就可以找到他了,这就是动态发现,而SOME/IP-SD就是那个中间人。

Eventgroup Entry 用于事件订阅:

Image

  • Type:当Client收到服务OfferService之后,Client可以发送Subscribe报文主动跟Service订阅感兴趣的事件组;当Client订阅某个事件组之后,后续发现不再需要改事件组的数据了,可以通过StopSubscribe报文来通知Service,避免不必要的数据交互;当Service收到Client的Subscribe报文之后,需要先行判断是否符合可订阅的条件,如果该Client满足事件组订阅条件,则返回SubscribeAck,告知Client订阅成功,当事件组内的事件准备就绪之后,Service会以某种约定好的形式发送相关事件给成功订阅的Client,如果该Client不符合事件组订阅条件,那Service就会直接回复SubscribeEventgroupNack,告知订阅失败。

Type值名称
0x06

Subscribe

StopSubscribeEventgroup

0x07

SubscribeAck

SubscribeEventgroupNack

  • Initial Data Requested Flag:如初始值由服务发送,须置为1

  • Counter:区分相同订阅者的订阅请求

  • Eventgroup ID:事件组ID,也就是说SOME/IP事件订阅和取消订阅的颗粒度到一个事件组,而不是一个事件

下面的示例,说明了一个Client发现服务和订阅事件组的过程:

Image

Options Array,Option可以理解为选项参数,Type=0x01时,用于传输Entry的附加信息,比如服务名等等:

Image

Type=0x04时,用于传输IPv4相关的参数,比如服务的IP地址、TCP还是UDP、端口号:

Image

从下图可知,对于不同的消息,要配置的选项类型也不一样,甚至不需要配置,其他几种选项的具体内容不一一列举了,用到了查下官方文档就行了,关注公众号,回复“SOMEIP协议”,即可获得相关文档~

Image

到这里,SOME/IP算介绍完了。是不是觉得如果要自己实现SOME/IP全部的协议,还是有点复杂的,目前GENIVI的vsomeip开源库已经实现了SOME/IP协议栈,所以通常并不用再去造轮子。换言之,我们完全可以基于vsomeip开发SOME/IP应用程序,不用关心报文长什么样,也不用关心服务发现和事件订阅的细节,拿到手已经是Payload了,如果再用上GENIVI的CommonAPI,IDL一写,一条命令下去,代码自动生成了,Payload都用不着解析了,这样就实现了真正的RPC,是不是有点感兴趣了呢,那就继续关注我吧

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

SOME/IP-SD 深入浅出 的相关文章

随机推荐

  • linux 前后台进程详解

    前后台进程切换 nice 进程优先级 free 实战 screen 后台执行命令 linux 前台进程与后台进程的区别 xff1a 进程的前台与后台运行 跟系统任务相关的几个命令 xff1a 注 xff1a 实际生产环境中 xff0c 都是
  • 编写项目工作说明书(SOW)

    工作说明书 SOW 是一个项目必须提供的工作指南 SOW是一个关键的管理工具 xff0c 不管是用来指导卖方或者承包商的工作 xff0c 或者是用来指导他们的内部工作 xff0c SOW必须包括所有所期望工作的描述 这些描述不需要在一个很详
  • i++在两个线程执行100次,最终的结果是

    i 43 43 语句只需要执行一条指令 但当有多个线程时 xff0c 并不能保证多个线程i 43 43 xff0c 操作同一个i 因为还有寄存器的因素 xff0c 多个cpu对应多个寄存器 每次要先把i从内存复制到寄存器 xff0c 然后
  • 一万字解读CP AUTOSAR

    导读 xff1a AUTOSAR旨在改善汽车电子系统软件的更新与交换 xff0c 同时更方便有效地管理日趋复杂的汽车电子软件系统 AUTOSAR规范的运用使得不同结构的电子控制单元的接口特征标准化 xff0c 应用软件具备更好的可扩展性以及
  • 关于SOME/IP的理解

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

    像是魔方一个 xff0c 当你遇到一个问题时 xff0c 有系统性思维的人会告诉你为什么你会有这个问题 xff0c 这个问题的前因后果是什么 xff0c 怎么避免类似问题 xff0c 正确的方法是什么 xff0c 其他可能得错误路径是什么
  • 如何从普通员工成为一个领导者

    how to become a company leader from one employee 要想成为一个领导或者领导 xff08 影响别人 xff09 首先需要基本的领导基本功 这里分享一些我的心得体会 自我反省 xff1a 要不断自
  • 读书笔记1

    第七期主题词 xff1a 告别 1 我们最终都要远行 xff0c 最终都要与稚嫩的自己告别 xff0c 告别是通向成长的苦行之路 海子 2 我和谁都不争 xff0c 和谁争我都不屑 xff0c 我的双手烤着生命之火取暖 xff0c 火萎了
  • 武志红《为何爱会伤人》

    最近读武志红 为何爱会伤人 xff0c 让我们从另一个角度去理解爱情 xff0c 本书从全新的视角解读爱情 xff0c 提出从 认识自己内心 的角度来看待爱情 xff0c 什么是迷恋 xff1f 什么是一见钟情 xff1f 如何获得真爱等问
  • 关于如何去寻找自己的另一半和我的爱情观

    用这个题目 xff0c 我自己都没想到 xff0c 因为目前我还是单身 xff0c 虽然谈过几次恋爱 xff0c 但最后都成了白月光 下面我给出了自己的反思 xff0c 也找了我的领导谈心 xff0c 也看了一些书 xff0c 想找到为什么
  • 一篇文章完全讲解C语言指针

    指针对于C来说太重要 然而 xff0c 想要全面理解指针 xff0c 除了要对C语言有熟练的掌握外 xff0c 还要有计算机硬件以及操作系统等方方面面的基本知识 所以本文尽可能的通过一篇文章完全讲解指针 为什么需要指针 xff1f 指针解决
  • MySQL定时备份

    MySQL定时备份实例 xff1a 每周一晚上3 00 xff0c 备份数据库服务器上webdb库的所有数据到系统的 mysqlbak目录中 xff0c 使用系统日期做备份文件名 xff01 span class token operato
  • 一篇文章完全讲解C语言指针

    https mp weixin qq com s biz 61 MzU3NDU5NDczMw 61 61 amp mid 61 2247504309 amp idx 61 5 amp sn 61 5421ee86fb1be92b43d99f
  • 读懂Adaptive Autosar架构-基础应用篇

    对于Adaptive AUTOSAR xff0c 咱们经常会看到这句话 xff1a Write once Adopt everywhere 但实际上理想很丰满 xff0c 现实很骨感 毕竟Classic Platform xff08 后面简
  • 软件架构的定义

    一 软件架构的定义 我们先讨论一下什么是软件架构 xff1f 对于软件架构并没有一个标准的定义 xff0c 但是你和软件工程师谈到架构的时候 xff0c 他们会知道这些都会是架构的内容 是不是要分层 xff0c 如何处理事件 xff0c 如
  • 一文了解V2X技术栈及其产业链

    C V2X会给未来出行交通带来怎样的改变 xff1f 会在哪些场景下发挥作用 xff1f 这条产业链里面的公司又是哪些 xff1f 大厂们在V2X上的投入又是如何呢 xff1f 本文可以给你一个答案 1 为什么需要V2X 随着C V2X及5
  • 精力管理分享

    你是否长时间工作却没有时间休息 是否总是感到压力很大 xff0c 时间不够用 xff1f 是否经常觉得很疲惫 xff0c 怎么调整都找不到状态 xff1f 然而 xff0c 不论是工作还是生活 xff0c 我们每个人都需要进行自我能量的调节
  • 目标管理

    业务能力很突出 xff0c 管理能力跟不上 xff0c 怎么办 xff1f 这节课帮你补全管理必修模块 xff0c 掌握全面的管理视角 学了很多管理手段 xff0c 总是用不上怎么办 xff1f 用工具统一管理语言 xff0c 拿来就能用
  • 深入浅出理解SOME/IP

    详解SOME IP协议文档 1 知乎 知乎 xff0c 中文互联网高质量的问答社区和创作者聚集的原创内容平台 xff0c 于 2011 年 1 月正式上线 xff0c 以 让人们更好地分享知识 经验和见解 xff0c 找到自己的解答 为品牌
  • SOME/IP-SD 深入浅出

    文章中 xff0c 我们了解了一条完整的SOME IP报文应该长什么样子 xff0c 但这显然是不够的 xff0c 至少还有以下这几个问题并没有得到明确的解决 xff1a Client如何发现服务 当服务不可用时 xff0c 如何通知Cli