0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

当服务不可用时SOME/IP-SD是如何通知Client的呢?

冬至子 来源:拖拉机日记 作者:活到一百岁 2023-01-18 16:18 次阅读

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

2.jpg

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

2.jpg

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

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

2.jpg

3.jpg

Service Entry 用于服务发现:

2.jpg

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

2.jpg

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:服务的次版本号

服务发现,说白了,就是想办法让服务消费者能够找到服务提供者。打个比方,想象你在一个有很多人的广场上找一个会唱歌的人,很显然有两种情况:

你认识这个人,提前说好了,他站在某个地方等你,而你知道那个地方的位置,那你肯定很容易就找到他了,这就是静态配置;

你并不认识这个人,存在一个中间人,你告诉中间人你想找一个会唱歌的,而那个人也会告诉中间人我是会唱歌的,我站在广场的哪个位置,然后中间人把位置给你,你就可以找到他了,这就是动态发现,而SOME/IP-SD就是那个中间人。

Eventgroup Entry 用于事件订阅:

2.jpg

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

2.jpg

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

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

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

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

2.jpg

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

2.jpg

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

2.jpg

从下图可知,对于不同的消息,要配置的选项类型也不一样,甚至不需要配置,其他几种选项的具体内容不一一列举了

2.jpg

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

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TTL
    TTL
    +关注

    关注

    7

    文章

    502

    浏览量

    70150
  • RPC
    RPC
    +关注

    关注

    0

    文章

    111

    浏览量

    11516
  • UDP协议
    +关注

    关注

    0

    文章

    69

    浏览量

    12683
收藏 人收藏

    评论

    相关推荐

    SD不可不可

    进行真机调试,我的SD卡为什么无法读写,显示不可用获取路径用的一下语句File root = Environment.getExternalStorageDirectory();
    发表于 12-05 13:29

    candence 如何设置引脚不可用

    candence如何设置引脚不可用eg:在原理图中画了一个元件只有4PIN,但实际封装有5pin,如何设置才能使原理图导入PCB时一一对应不出错?除了在原理图中再添加一个脚之外,能不能把PCB中的8号引脚变为不可用,如何设置
    发表于 04-24 14:11

    TCP/IP地址不可用

    大家好,我对基于和声的应用有问题。调试时,所有的工作都很好,但现在是时候把它连接到真正的网络了。我得到了专用IP,它是192.168164.4。它可以通过DHCP获得。调谐后的设备不可用。经过一些
    发表于 12-06 15:36

    为什么SPI外围不可用时使用32双TPIF II总线?

    ,GPIO [ 53 ] [ 56 ]对GPIO可以配置成GPIO、UART接口而已。”谁能说明为什么SPI外围不可用时使用32双TPIF II总线?我没有看到物理引脚冲突;GPIO [ 53
    发表于 07-25 09:28

    connect连接一个不可用的目标服务器能不能改成非阻塞的

    connect连接一个不可用的目标服务器,阻塞近20秒。能不能改成非阻塞的?我在前面加了配置非阻塞之后,去连正常能通的服务器也立即返回了。unsigned long ul = 1;r
    发表于 09-05 14:50

    FDCAN为什么不可用

    FDCAN 不可用。我正在使用 STM32G474RE。我想在经典模式下将波特率设置为 1MBps。的我经常偶然发现 if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK){ Error_Handler();}。我不知道是什么原因导致它失败。我认为设置不好。的
    发表于 12-02 06:07

    如何处理属性显示不可用

    如何处理属性显示不可用 q:我电脑的操作系统是Windows XP,为什么在显示属性高级的适配器里,芯片类型、DAC类型.内存大小等全都
    发表于 02-24 13:57 2844次阅读

    车载以太网的SOME/IP-SD协议了解与认识

    通过之前的文章我们了解到了SOME/IP协议的基本组成与SOME/IP的具体工作过程,同时也提到了SOME/
    的头像 发表于 08-10 10:53 2948次阅读

    基于SOME/ IP可扩展面向服务的中间件

    PDU 路由组管理需要管理启用到禁用的套接字PDU 路由,SOME/IP - 套接字适配器 [SoAD] - AUTOSAR 模型构建块,可用于通用上层支持SOME/
    的头像 发表于 09-08 17:34 1323次阅读

    SOME/IP-SD有何作用

    车载以太网协议栈总共可划分为五层,分别为物理层,数据链路层,网络层,传输层,应用层,其中今天所要介绍的内容SOME/IP就是一种应用层协议。
    的头像 发表于 10-24 10:58 1798次阅读

    SOME/IP-SD有何作用

    车载以太网协议栈总共可划分为五层,分别为物理层,数据链路层,网络层,传输层,应用层,其中今天所要介绍的内容SOME/IP就是一种应用层协议。
    的头像 发表于 10-24 11:00 1229次阅读

    服务器数据恢复】服务器raid5故障导致上层应用不可用的数据恢复案例

    某公司服务器8块硬盘组成raid5磁盘阵列,其中有2块硬盘故障指示灯报警,其他硬盘指示灯正常,上层应用不可用
    的头像 发表于 12-09 14:15 707次阅读
    【<b class='flag-5'>服务</b>器数据恢复】<b class='flag-5'>服务</b>器raid5故障导致上层应用<b class='flag-5'>不可用</b>的数据恢复案例

    服务器数据恢复】EMC存储崩溃导致上层应用不可用的数据恢复案例

    raid5磁盘阵列中2块硬盘离线,服务器崩溃,上层应用不可用
    的头像 发表于 12-26 14:44 776次阅读

    SOME/IP协议的基本原理

    ECU,每个ECU提供了十余种服务SOME/IP具有轻量化、高效、以接收方的需求为主导的特点,并且能够提供过程调用和事件通知,逐渐被多种汽车设备所使用。
    发表于 08-30 10:29 1429次阅读
    <b class='flag-5'>SOME</b>/<b class='flag-5'>IP</b>协议的基本原理

    DNS服务器可能不可用什么意思

    与该域名相关联的IP地址。DNS服务器将IP地址返回给计算机,然后计算机使用该IP地址与目标服务器建立连接。 DNS
    的头像 发表于 01-17 09:24 9728次阅读