SOME/IP协议详解[5 SOME/IP-SD协议解析]

5.1 SOME/IP-SD协议头

首先,依照惯例我们先来看下SOME/IP-SD的报文格式如下图11所示:

图11 SOME/IP-SD Message Format

一般而言,如果没有特别要求,在SD报文格式中的内容均按照大端方式传输。

由于SOME/IP-SD报文实际上也只是SOME/IP报文的一种,只不过是在SOME/IP标准协议的基础上扩展了Entry,Option等字段,其中Entry用于同步服务实例的状态以及发布/订阅关系的管理,Options则用于传输Entry的附加信息。

接下来,我们将针对上述的协议中各种字段为大家一一解释如下表3:

表3 SOME/IP-SD 协议内字段解释

5.2 Entry Array 

如上表1中所述,Entry Array按照SD的定义可分为以下两种:

  1. Service Type:用于FindService,OfferService,StopOfferService这几种场景;
  2. EventGroup Type: 用于 SubscribeEventgroup, StopSubscribeEventgroup,SubscribeEventgroupAck,SubscribeEventgroupNack这几类场景。

5.2.1 Service Entry Array

如下图12所示,首先我们介绍下为Service Entry Array中定义的各个字段内容:

图12 Service Entry Array定义

对上述Service Entry Array定义的各个Field解释说明如下表4所示:

表4 Service Entry Array字段解释说明

5.2.2 EventGroup Entry Array

介绍完Service Entry Array,相比之下EventGroup Entry Array又存在哪些差异呢?如下图13为EventGroup Entry Array的各个字段内容的定义:

图13 EventGroup Entry Array定义

相比Service Entry Array,EventGroup Entry少了Minor Version,但是多出了Counter以及EventGroup ID内容,接下来我们将对上述EventGroup Entry Array定义的各个Field解释说明如下表5所示:

表5 EventGroup Entry Array字段解释说明

  1. Type:当Client收到服务OfferService之后,Client可以发送Subscribe报文主动跟Service订阅感兴趣的事件组;当Client订阅某个事件组之后,后续发现不再需要改事件组的数据了,可以通过StopSubscribe报文来通知Service,避免不必要的数据交互;当Service收到Client的Subscribe报文之后,需要先行判断是否符合可订阅的条件,如果该Client满足事件组订阅条件,则返回SubscribeAck,告知Client订阅成功,当事件组内的事件准备就绪之后,Service会以某种约定好的形式发送相关事件给成功订阅的Client,如果该Client不符合事件组订阅条件,Service就会直接回复SubscribeEventgroupNack,告知订阅失败。
  2. InitialDataRequested Flag:如初始值由服务发送,须置为1
  3. Counter:区分相同订阅者的订阅请求
  4. EventgroupID:事件组ID,也就是说SOME/IP事件订阅和取消订阅的颗粒度到一个事件组,而不是一个事件

5.3 Option Array

Option Array作为SOME/IP-SD报文最后的部分,其主要作用就是为了提供在通信的过程中提供下附加信息,如配置信息,IP地址,端口号等。不过其作为SD报文的一部分也存在着自身的字段内容。

AUTOSAR将Option Array主要分为以下三种:

  1. Configuration Options:用于配置通信过程的必要的信息;
  2. Endpoint Options(IPV4/IPV6):用于传递IPV4或者IPV6的Endpoint信息(IP地址+Port号)以及使用的传输层协议;
  3. Multicast Options(IPV4/IPV6):用于广播IPV4或者IPV6的IP地址及Port号,其中传输层协议只能使用UDP协议。

5.3.1 Configuration Options

接下来我们来对这三种Option进行一一解读。首先来看看Configuration Option的字段定义:

图14 Configuration Option字段定义

注意:configuration options仅适用于任意Service ID的Service Entry Array以及Service ID为0xFFFE的EventGroup Entry Array。

针对上述字段解释如下表6所示:

表6 Configuration Option Array字段解释说明

对于那些非标准的SOME/IP服务,由于不能够被Service ID进行标识,此时就需要通过一个key“otherserv”的值来进行标识,这类服务则可通过使用0xFFFE作为Service ID同时附带otherserv的value的configuration option来完成双方的通信。

5.3.2 Endpoint Options(IPV4/IPV6)

5.3.2.1 IPV4 Endpoint Option

如下图15为IPV4 Endpoint Option的字段定义:

图15 IPV4 Endpoint Option字段定义

5.3.2.2 IPV6 Endpoint Option 

如下图16为IPV6 Endpoint Option的字段定义:

图16 IPV6 Endpoint Option字段定义

5.3.2.3 IPV4 SD Endpoint Option 

如下图17为IPv4 SD Endpoint Option的字段定义:

图17 IPV4 Endpoint Option字段定义

5.3.2.4 IPV6 SD Endpoint Option 

如下图18为IPv6 SD Endpoint Option的字段定义:

图18 IPv6 SD Endpoint Option定义

5.3.3 Multicast Options(IPV4/IPV6) 

5.3.3.1 IPv4 Multicast Option

如下图19为IPv4的Multicast Option各字段内容定义:

图19 IPv4 Multicast Option

5.3.3.2 Ipv6 Multicast Option 

如下图20为IPv6的Multicast Option各字段内容定义:

图20 IPv6 Multicast Option定义

由于上述六种IPV4与IPV6字段内容大体结构一致,因此我们将该两者放在一起来对各字段内容进行解释说明:

表7 IPv4/IPv6六类Option字段解释说明

5.4 SD状态机

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

状态

服务端行为

客户端行为

Down

Service不可用

服务未被应用请求,则停留在该状态;

收到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。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大魔王库巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值