目录
1. SOME/IP概述
在入门车载以太网(4) -- 传输层(TCP\UDP)里,我们了解到,在当前汽车领域数据通信方式主要有两种:
-
Signal-Oriented Communication,面向信号的通信,例如CAN、LIN、FlexRay总线,发送方会周期或者在数据更新时发送信息,不管网络中的接收节点当前是否需要这些数据。;
-
Service-Oriented Communication,面向服务的通信,服务请求方Client只需要发送SID来调取各种功能服务,服务提供方Server,根本不关心服务内部是如何实现。这种情况下,服务都有一个唯一且互不影响的ID号,通过服务中间件完成自身发布、订阅其他服务和通讯工作,例如SOME/IP,很明显,这种通信方式只有在网络中至少有一个接收节点需要数据时,发送节点才会发送数据,网络总线负载可控。
在面向服务的通信中,我们提到了服务中间件的概念,中间件运行在操作系统和应用软件之间,为应用软件提供运行环境,起到“承上启下”的作用。举个例子,假设两个不同操作系统的ECU(QNX、Linux)想要相互通信,可以设计一个“中间件”,用来管理不同软件之间的数据交互,这使得应用软件开发者就不用去关心底层的通信,不同软件单元之间的“墙”变得透明。我们今天聊的SOME/IP协议理论上是一种中间件。
SOME/IP,全称Scalable Service-Oriented MiddlewarE over IP,基于IP的面向服务的可扩展的中间件,在2014年被纳入AUTOSAR规范,在车载以太网架构中提供面向服务的通信接口。它在车载以太网模型中位于应用层(Layer5~7),作为客户端(client)和服务端(Server)之间的通信方式。
SOME/IP协议的设计支持多种操作系统,甚至在没有操作系统的嵌入式设备上也可以使用,例如T-BOX、摄像头、符合AUTOSAR架构的ECU等等,它有如下功能:
- 序列化和反序列化:将数据结构转换成二进制串或者将二进制串转换为数据结构,这样有利于数据的高效传输;
- 远程过程调用 (RPC):支持跨网络的服务或过程调用,实现不同ECU之间的紧密协作;
- 服务发现:客户端寻找所需的服务,服务端告诉网络节点自己提供哪些服务,这是一个动态过程,有了服务发现(SD)方便后续功能的扩展,系统更加灵活;
- 发布和订阅:动态配置哪些数据是需要的,哪些数据应该发送到客户端;
- UDP消息分段:允许在UDP上传输大的SOME/IP消息,而不需要在IP层分片。
值得一提的是,根据AUTOSAR标准要求,该协议的缩写只能为SOME/IP,Some/IP这类似的均是错误的。
2. 服务和服务接口
服务(Service):是一个离散的功能单元,可以远程访问、独立更新,更具体一点,服务对消费者是一个黑盒的功能单元,使用标准接口进行通信,本身包含一种或者多种功能,可重用、无状态。
服务接口则是访问服务具体功能的手段,在SOME/IP中服务接口主要由三种类型组成:Methods(方法)、Event(事件)、Fields(字段)。
2.1 Method
远程过程调用(RPC)的一种形式,客户端可以调用服务端的函数或程序,在SOME/IP中,方法又分为两种形式:
- Request/Response:客户端发送请求,服务端处理请求后返回响应
- Fire & Forget:客户端发送请求,但不需要服务端的响应
2.2 Event
Event(事件)是一种单向通信机制,客户端订阅这些事件,服务端向客户端发送通知,就像公众号一样,一旦订阅了,就会收到该公众号的推送。而这个推送,可以是周期性发送,也可以是有变化或者更新后发送,就像我这几天断更一样。通讯模型为Publish/Subscribe。
2.3 Field
在面向对象编程里,Field字段是类的成员变量,表征一个状态、具有有效值。一旦声明为私有变量,则只能在类的内部被访问或者修改,那么就需要对外提供获取\、设置值的一种方法,即Setter和Getter;此外,Fiels还需具备通知的方法,即Notifier。
AUTOSAR_PRS_SOME/IP Protocol规定Fields至少一个Setter、一个Getter和一个Notifier。
Setter和Getter的通信示例如下:
从上图可以看到,客户端可以通过Setter/Getter去设置/获取某一属性和状态的值,因此,理论上它也是一个Request/Response类型的方法。
Notifier的通信示例如下:
与Event类似,客户端订阅该字段时,服务器应立即发送一条事件消息将该字段的值传输给客户端,后续字段里的值发生变化时发送,无法像Event一样周期性发送。不过Field 是一个持续存在的变量,比如车速、环境温度等,这些可以在任何时刻获取,也有历史数据;而 Event 指的是一个事件,事件没有发生就不存在。
2.4 接口示例
因此,在SOME/IP里,服务接口主要就是两类:Method和Event;
Method(方法):Request/Response,Fire & Forget,Setter/Getter Fields;
Event(事件):Publish/Subscribe Event、Notifier Field
下图为怿星科技提供的服务接口示例:
摄像头检测服务标志本身是一个服务,服务提供者是一个智能摄像头控制器,服务消费方例如ADAS控制器,需要使用检测限速标志这个服务;
摄像头控制器的服务接口包括
- R/R Method:摄像头状态检测,ADAS查看摄像头状态,因此需要Response;
- F&F Method:ADAS通知摄像头:我下线了
- Field:限速值、距离等等,可通过Setter、Getter设置或者获取,当值发生变化时,通过notifier进行通知;
- Events:ADAS订阅了该事件,当检测到限速标志时,摄像头主动向ADAS发起event。
3. SOME/IP报文格式
SOME/IP在车载以太网中位于应用层,封装和解封装流程如下:
SOME/IP整体报文格式如下:
每个位域的解释如下表所示:
值得一提的是Message Type这个位域, 前面提到的R/R method、F&F method,event就是利用该位域表征,具体如下:
当客户端发起一个R/R method,该位域为00,如果是F&F method,该位域为0x01;
紧接着Return Code则表示对请求的处理,例如0x00(E_OK),0x06(Timeout)等。
4. SOME/IP SD
我们知道在网络互联的背景下,服务并不完全是静态配置,前面我们了解到SOME/IP的工作过程,但是客户端Client如何发现Server提供的服务并订阅?
这就需要SOME/IP SD(Service Discovery)。本质上,SOME/IP SD是一种特殊服务,主要用于实现服务发布订阅。服务器可以发送“Offer Service”向网络发布自己能提供的所有服务,客户端可以发送"Find Service"来订阅所需服务。
具体讲,SOME/IP SD功能主要分为
- 服务寻址
-
FindService
-
OfferService
-
StopOffer Service
-
- 订阅事件
-
Subscribe Event groupAck
-
Subscribe Event group
-
Subscribe Event groupNack
-
StopSubscribe Eventgroup
-
具体通信模型如下所示:
由于SOME/IP SD也属于一种特殊的SOME/IP报文,因此格式比较类似,如下:
可以看到,SOME/IP SD的message ID固定为0xFFFF8100,其余字段参考SOME/IP。
比较特殊为Flag位域,格式如下:
在重启或上电时置1,当Session ID完成1~0xFFFF之后,该位置0;Session ID是一个唯一的标识符,它区分来自同一发送者的顺序消息或请求。
根据AUTOSAR标准,1个SD message可能包含1个或者多个Entry,值得注意的是每个Entry大小都是16个字节,一个Entry可能包含0-2个Option。如下图所示:
Type位域:0x00(FindService)、0x01(OfferService)、0x01(StopOfferService);
TTL位域:该entry的生命周期,单位为秒
Option 是用来传输 Entry 的附加信息的。每个 Entry 可以包含一个或多个 Option,这些 Option 提供了关于服务实例的额外信息,例如服务实例的IP地址、传输层协议和端口号等。
Option 的主要用途包括:
- 传输附加信息:包含服务实例的详细信息,如IPv4或IPv6的地址、端口号和传输协议类型 。
- 配置信息:包含配置信息,这些信息对于服务的发现和订阅是必要的。
- 负载均衡:在某些情况下,Option 可以用于负载均衡,提供每个实例的优先级信息,客户端可以根据这些信息选择实例。
- 多播选项:用于广播IPv4或IPv6的IP地址及端口号,其中传输层协议只能使用UDP协议。
以如下通信过程为例:
客户端发送SD报文,类型为FindService;客户端返回OfferService,其中Entry参数为IPV4 endpoint、IP地址、协议为UDP、端口号为30509;依次类推。
5.小结
SOME/IP是一种专为汽车电子领域设计的中间件协议,它支持面向服务的通信,允许汽车中的电子控制单元(ECU)作为服务提供者或消费者进行交互。
SOME/IP SD是SOME/IP协议的一部分,用于服务的发现和管理。它允许ECU动态地发现网络中的服务实例,检测服务实例的状态,并实现发布/订阅处理。SOME/IP SD通过在SOME/IP消息的payload中传输服务实例的信息来实现服务发现。
SOME/IP及其服务发现机制SOME/IP SD为汽车电子系统提供了一种高效、灵活且安全的通信解决方案,支持现代汽车网络的复杂需求,并推动了智能汽车技术的发展。