SOME/IP(二)

本文详细解读了SOME/IP-SD协议,通过生活中的美团平台为例,介绍了如何通过统一的UDP组播加入平台、服务提供与请求、订阅事件组以及Option的使用,帮助读者理解协议如何连接和管理不同设备间的服务通信。
摘要由CSDN通过智能技术生成

SOME/IP-SD协议规范解读

        此篇文章需要大家先看完前面一篇对于SOME/IP-SD的介绍,还没看过的需要先看一下第一遍文章 SOME/IP介绍(一)-CSDN博客

        首先,要想明白SOME/IP的服务是如何互相通信上的,就需要熟练了解SOME/IP-SD的协议规范。下面将结合生活中常见的“美团平台”给大家做对比讲解讲述SOME/IP-SD是什么,以及它如何巧妙的将不同设备间的服务连通起来。

1. Entry

1.1 加入“平台”

        ECUs为了完成SOME/IP交互,需要统一加入到类似“美团外卖”的平台,在SOME/IP-SD协议栈中这个“美团外卖”平台就是UDP Multicast——所有设备启动SOME/IP时,都需要加入到一个统一的UDP组播中。

        

1.2 A提供的服务(如有)

        如果想要被人来消费你的服务,你需要在“平台”中使用组播包发送自己的服务,发服务的时候需要发服务的全部信息(id,instance,major ver,minor ver, TTL)

        比如,A设备提供了“酸菜鱼火锅”服务,A就需要将自己服务通过“平台”发出来,特别注意,提供服务的时候会要求协商TTL,通常这个TTL不会设置为全F,原因就是A可能因为某些意外或非意外闭店,那A必须得让消费者知道。所以A在提供服务的时候就会用TTL告诉大家——我今天19:00~20:00可以提供“酸菜鱼火锅”,如果A在20:00前发现,自己还能继续干他1个小时,那A就会提前再到平台上给大家发一个Offer service Entry出来。这就是如下这段规范描述的内容了。

        

1.3 B请求服务(如需要)

        如果B加到"平台“(UDP组播)时要消费”酸菜鱼火锅"(一般消费什么服务是整车系统定义好的,大家谁是消费者谁是服务提供者都是需要明确定义的),那B就可以通过请求服务Entry来请求服务。

        

问:为什么B要有请求服务这个动作,按道理A不是一直在周期发送自己的offer service Entry吗,B等下个周期不就知道A提供了服务吗?

答:这就是SOME/IP协议妙的地方,A确实是一直周期发送offer的,但是B有可能上线比A晚,错过了A发的offer包,如果B要等下个周期,就会存在B有段时间不能用服务的情况,所以协议里面就加上了A可以主动请求服务的操作了。

笔者理解:如果B加入组播(但是此时还不需要使用服务)后不是马上使用服务,而是过了一段时间才需要使用服务,在这段时间内A如果已经发过了offer包(且服务没有过期),那么B就不需要再发request了

1.4 B订阅事件组(如需要)

        SOME/IP协议栈中描述的订阅都是订阅的“事件组”而不是“事件”,SOME/IP协议栈的意思就是如果你关注某个event,但是可能对同组其他event不关心,那么不好意思,协议栈层面是没有办法帮你解决这个问题的,只能靠底层自己去过滤event了。即你要么订阅一个组内所有events,要么就不订阅这个组。

        NOTE: 订阅包的发送一定是在收到A的offer之后发的,也就是说订阅跟offer包一样,是一个周期发送的包。

1.5 A对B的订阅回应(sub ACK)

        对#4中B发来的订阅的回复

2. Option

        打个不恰当的比喻:

        1. A:我提供“火锅“服务,也支持外卖订餐,大家有需要的来哈(offer service)

        2. B:我要定你个外卖,要什么口味、什么菜(订阅)

        3. A:好嘞(订阅ACK)

        4. C:  我要吃火锅

        看看上面的例子,大家有没有发现一个问题,那就是A要给B送餐去哪里?C要去哪里才能找到A?

        所以,SOME/IP就引入了option的概念,在大家互相沟通的时候,让对方知道自己服务地址

        

        1. A:我提供“火锅“服务,也支持外卖订餐,大家有需要的来哈(offer service),我的地址是xx,联系电话是xx

        2. B:我要定你个外卖,要什么口味、什么菜(订阅),我的地址是xx,联系电话是xx

        3. A:好嘞(订阅ACK),做好后送到B的地址即可

        4. C:  我也要吃火锅(request),直接去A的地址请求即可

        

2.1 SOME/IP option类型与entry映射表

        SOME/IP定义了每种Entry对应可以携带的option类型,如下:

2.2 OfferService中的Endpoint option

        ECUA在offer service时候,需要告知其他ECU,可以通过那个Endpoint来访问我的服务,这个就是IPV4/IPV6 endpoint,拿IPV4举例,你需要告诉其他ECU,别人要用的服务时候,给你那个IP地址、port发UDP还是TCP包(注:ECUA要先创建TCP server端才能发offer出去)

        

2.3 SUB中的Endpoint

        ECUB如要订阅ECUA的EG(Event group),需要携带上自己的option,告知ECUA,你以后将event发给我指定的IP地址、指定端口、指定UDP/TCP协议。

NOTE:客户端订阅时候,如果是使用的TCP协议,客户端必须先保证连上ECUA的TCP server,才能发sub包,不然ECUA在收到sub包后会认为你ECUB没有连上我,订阅个锤子,直接会给ECUB回复sub Nack(即订阅失败),对应的协议规范如下:

2.4 SUB ACK中Multicast option讲解

        上表中有一个特别需要说明的地方,sub ACK中为何会有一个Multicast option可选择。

        原因:如果A提供了服务,服务中event group1(简称EG1),如果B、C、D、E大家都来订阅这个EG,那么A就可以不用给B\C\D\E一个一个的单独发过去了,那么A在回复B\C\D\E的订阅时候,就提前告诉他们——这个EG里面的events我有可能发到MulticastXX中哈,你们要注意了哈。

B...E他们收到这个option后,就需要时刻监听这个multicast,因为有可能A会单独给你发event,也有可能A懒得给你们一个个发(其实不是懒,是因为SOME/IP协议考虑到以太网负载原因,用组播包代替了4个单播包),直接发到组播地址中去了。这个过程匹配的就是协议栈如下内容:

了解上面entry和option后基本可以定位分析SOME/IP-SD常见问题了

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值