SOME/IP有那么难吗?

今天,我们将和大家分享一下汽车以太网中SOME/IP的概念。SOME/IP全称为Scalable Service-Oriented MiddlewarE over IP,也就是位于IP协议层以上的一种面向服务的可伸缩的中间件。听上去很拗口对不对?别急,接下来就让我们揭开它的“神秘面纱”。

首先了解SOME/IP在各种以太网通信协议中的位置,可查阅我们往期文章《汽车以太网协议知多少》,其中,包含了对OSI七层模型的简单介绍。

 

服务和服务接口

区别于传统CAN/LIN等总线面向信号(Signal-Oriented)的通信方式,SOME/IP用于面向服务(Service-Oriented)的通信,这也是以太网在汽车领域应用的最大优势所在。面向服务的通信传输是服务的相关信息,汽车以太网应用方面最重要的是面向服务的架构,简称为SOA(Service Oriented Architecture)。SOA的核心是服务,服务可以简单理解为是实现某种功能的函数或算法。至于面向服务通信与面向信号通信的具体区别,可查阅《面向服务通信与面向信号通信》。

服务提供者作为服务端(Server),服务消费者作为客户端(Client),服务实现是借助于远程过程调用机制(RPC),客户端和服务端通过中间件进行信息的传输,而中间件是应用层软件和底层硬件之间的软件统称。

 

 

数据路径中,服务接口(Service Interface)是描述服务与外界通信的接口。而SOME/IP作为中间件所打包的数据内容,也就是服务接口的内容。SOME/IP所对应的服务接口包含以下四种形式:

  • Method(方法):客户端发送请求,服务端回复响应;是一种有问有答的对话方式;

  • F&F Method(单向方法):客户端发送请求,服务端不需要响应;是一种只问不答的对话方式;

  • Event(事件):客户端向服务端订阅一个事件,服务端向客户端发布该事件;当该事件发生时,服务端就会自动给订阅了该事件的客户端发送相关的通知(Notification),是一种类似于生活中订阅报纸期刊的方式;即订阅之后不用询问会主动通知的对话方式;

  • Fields(字段):是服务里一系列的属性值(Attributes),这些属性值可以通过设置器(Setter)、获取器(Getter)和通知器(Notifier)进行操作,可以理解成一组参数通过Method(Setter/Getter为Method的方式)和Event(Notifier为Event的方式)的组合进行操作。

 

SOME/IP格式

SOME/IP协议在OSI七层网络结构中位于应用层,在AUTOSAR中位于BSW的服务层。从功能上讲,SOME/IP是一种将服务接口进行打包或解包的中间件:从应用层发送的数据(就是服务相关的信息以及前文提到的服务接口中的内容),按照SOME/IP的格式打包后,再传递到下层的TCP/IP层,再进行逐层打包和封装,最终通过物理层以比特流的形式进行传输;接收时则按照与打包相反的规则进行解包。

 

 

SOME/IP报文由消息头(Header)和数据段(Payload)组成,消息头是按照固定格式排列的有效信息,这些有效信息包括报文ID、请求ID、协议版本、接口版本以及处理之后(序列化)的服务接口信息等内容。SOME/IP报文格式如下图所示。报文ID包括Service ID和Method ID,Service ID指的是Service本身的ID值;Method ID是指服务接口中的不同内容的ID,每个服务接口中定义的所有方法、单向方法、事件等都需要设置一个ID值;Session ID是从1开始增加的循环值,用于使得Request与Response相配对;Message Type主要分为请求、请求无响应、通知、响应、错误几种类型。

 

 

SOME/IP SD

SD(Service Discovery)是服务的信息清单及管理机制,也是一种服务,主要实现服务寻址及事件订阅两种功能。SD用来对服务进行寻址时,服务提供者(Server端)通过服务发现(SD)通知其他ECU(Client端)某服务可用,并间接地通知该服务的地址(Server端地址);服务消费者(Client端)了解到某服务状态后,能够调用该服务的相关内容。SD用来事件订阅时,专门针对Event类型的接口,可以通过SD实现对Event所在的Event group进行订阅、停止订阅等操作。

 

 

SOME/IP SD报文也是一种SOME/IP报文,是在SOME/IP报文的基础上进行了扩展,增加了Entry、Option等字段;SOME/IP SD报文的ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等属性都是固定值。Entry字段可以理解为服务实例的“入口”,该入口包含服务实例以及需要订阅的事件组的信息。服务提供者和消费者通过SD中的Entry实现提供服务、发现服务,以及订阅事件组的功能,即服务提供者可以告知其他节点服务的“入口”在哪里,服务消费者也可以通过该“入口”找到自己所需要的服务;也能够实现订阅事件组、取消订阅事件组等功能。

 

 

Entry分为两种类型:面向服务(Service)的Entry和面向事件组(Eventgroup)的Entry,两种类型的Entry都是16字节大小。对于面向服务的Entry,可分为发现服务(FindService)、提供服务(OfferService)和停止提供服务(StopOfferService);对于面向Eventgroup的Entry,可分为订阅事件组(SubscribeEventgroup)、肯定应答(SubscribeEventgroupAck)、否定应答(SubscribeEventgroupNAck)和停止订阅事件组(StopSubscribeEventgroup)。Entry字段格式和Type值如下图所示:

Option字段用来传输Entry的附加信息,包括对于服务实例的IP地址、传输协议、端口号等有效信息。Option根据可变数据段内容,主要分为以下几种:

1)Configuration Option

2)Endpoint Option

3)Multicast Option

Configuration Option 包含的是字符串信息,可以用来表示主机名称、服务以及服务实例的名称等多种可以转化为字符串的信息;Endpoint Option又分为IPv4 Endpoint Option和IPv6 Endpoint Option,此类Option中会包含IP地址、传输协议(UDP或TCP)和服务端的端口号;Multicast Option分为IPv4 Multicast Option和IPv6 Multicast Option,此类Option中会包含组播IP地址、UDP协议以及组播端口号。每种类型的Option Type都有对应的Type值,Option字段格式和Type值如下图所示:

 

 

“Entry入口”和“Option选项”的基本内容摆在这里,还是不太好理解,我们再来举个形象一些的例子。“入口”中定义的是一个服务的基本信息,就像一个人的姓名(Service ID)和单位名称(Instance ID);而“选项”会有很多个,这里面每一个选项可以定义一个属性信息,比如这个人单位地址信息(e.g. IPv4 Endpoint Option)或邮箱地址(ConfigurationOption)或联系电话(Configuration Option)等内容。

如果是某一个车载智能摄像头节点,提供一个限速标志的智能检测服务,那应该如何体现呢?上电之后,该节点会主动广播发送一个“OfferService”的SD报文出去通知大家;通知的报文里,Entry上会注明该服务的ID,所在节点实例(Instance ID),所提供的服务的版本号等信息;同时Entry会附带一些Option,比如通过IPv4 Endpoint Option,告知大家该服务的Socket是多少,比如通过Configuration Option,告知大家该服务的秘钥信息。这样该节点就把服务的各种相关信息就通知给客户端了,哪个客户端需要这个服务,就会主动跟这个服务建立联系了。

 

SOME/IP应用

除本文提到的SOME/IP的概念与报文格式、SD的概念与格式以外,SOME/IP还有序列化、UDP报文分段、通信数据库开发、通信仿真等内容,日后再慢慢展开。

SOME/IP相关参数的设计是汽车以太网面向服务的架构(SOA)设计中的主要设计内容,在本文中介绍的服务、服务的提供者、消费者、服务接口的各种方法、事件、字段等内容,以及文中未提到的TCP/IP通信中的配置信息,都是以太网SOA设计中的主要内容,因此对SOME/IP中各种参数的理解,对于整个架构和通信设计都非常重要。

随着汽车绿色智能互联的快速发展,对汽车运行时的高灵活性、车辆内部与外部服务的可关联、服务和软件的扩展与升级等需求都提出了更高的要求,此时面向服务架构(Service Oriented Architecture)的优势也变得越来越凸显。SOME/IP作为面向服务架构的通信基础,将会得到越来越多的应用。

以上为本次分享的内容。后续我们将继续与您分享更多关于汽车以太网技术的专题介绍。

  • 10
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值