zeerd's blog         Search     Categories     Tags     Feed

闲来生雅趣,无事乐逍遥。对窗相望雪,一盏茶香飘。

SOME/IP的核心消息

#SOME/IP @Ethernet


SOME/IP中的核心消息主要分成两大类,分别是服务发现类消息和一般通讯类消息。

服务发现类消息

服务发现(SD)类消息的核心部分其实只有三条,分别是:Find Service、Offer Service、Subscribe Eventgroup。

Find Service

顾名思义,这个消息的作用是在局域网内找到需要的服务。

SOME/IP的服务发现与我们常见的、有微软公司推荐爱你使用的PNP服务有所不同。SOME/IP的服务没有约定俗成的分类和代号。举个例子,同样是收音机服务,在A车厂的协议中,服务代号可能是1234,但是到了B车厂的协议中,服务代号可能就是4321。

这个可能是出于安全角度的考量。各车厂内部的协议全都不同,保证了私密性。

Offer Service

用于ECU向外声明自己支持什么服务。如前文所说,服务是以服务代号进行标识的。

当ECU向外发布自己支持的服务时,会附带所提供的服务所对应的IP地址和端口号。同时,会发布一个支持周期。也就是说,ECU会对外公布自己在什么时间会停止对外公开这个服务。

Subscribe Eventgroup

每个服务都可能会需要向外发送消息,比如更新自己的状态。

这些消息五花八门而且可能会有很多。而目标ECU未必关心所有的这些消息。所以,通常提供服务的ECU会将消息进行分类。并给出一个Event Group ID。

ECU可以通过订阅的方式告知提供服务的ECU,自己尽关心某一组的消息。这样可以减少不必要的通讯和计算消耗。

一般通讯类消息

一般通讯类消息的核心部分也是三条,分别是:Request、Response、Notification。这个几乎不需要进行特别的解释,几乎所有的消息通讯都是这样的。

前文提到过,各个车厂的SOME/IP协议数据都是私密的,是预先定义好的。而这里就产生了一个非常有趣的现象。也就是说,各个ECU实际上是知道(至少有条件知道)提供服务的ECU的各种消息的。那么,如果ECU确定对方已经就绪,就可以跳过Find Service/Offer Serivce的步骤,直接进行Request的通讯。