SOME/IP 是什么?
“SOME/IP”——“ Scalable service-Oriented MiddlewarE over IP ” 即可扩展的,面向服务的,基于IP的数据交互中间件。
AUTOSARPRS协议规范定义了SOME/IP的报文格式,时序以及语义。
SOME/IP是车载以太网通信引入的一个概念,位于OSI 7层模型的层4之上。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。
在车载网络中,某个ECU有时会需要调用实现在其他ECU上的个服务,这个时候它俩就分别扮演了client和server的角色,而SOME/IP就是实现这种远程服务调用的接口,如下图所示。
Some/IP 报文格式
Message ID用于区分一个方法(method)或事件(event)的RPC调用;
Message ID(Server ID) :16bit,服务的ID,标识出一个服务;
Message ID(Method ID) :16bit,方法的ID,表示出一个方法;
Length:报文长度,32bit,标识从request ID到报文结束的总长度;
RequestID [ 32 Bit ]=ClientID+SessionID,使客户端和服务器能区分同一服务的多条请求;
Request ID(Client ID) :客户端ID,16bit。区分不同的客户端;
Request ID(Session ID) :会话ID,区分同一个客户端的多次调用;
Protocol Version :协议的版本号,固定值为x01;
Interface Version:服务接口版本;
Message Type :报文类型,在AUTOSAR中,总共包含五种,包括REQUEST,REQUEST_NO_RETURN,NOTIFICATION,RESPONSE,ERROR;
Return Code :返回码,包括四种,REQUEST,REQUEST_NO_RETURN,NOTIFICATION,RESPONSE;
Payload :数据段,用于放置需要传输的数据。
SOME/IP的payload字段长度取决于所用的传输协议;
UDP:长度为0-1400字节
TCP:支持payload的分段,支持更大的字节长度
Service ID 特殊值
Service ID为0xFFFF时,Method/Event ID的特殊值
报文类型
REQUEST,REQUEST_NO_RETURN,RESPONSE属于同一类远程过程调用方法,当client有需求的时候,发送一个request消息,server根据这个消息类型(REQUEST或REQUEST_NO_RETURN)来决定是否发送response消息,过程如下图所示。
NOTIFICATION属于事件通知类的服务,首先由client向server订阅服务内容,然后server向client自动发布服务内容。
NOTIFICATION又分为Event和Field 两类,这两类通知都需要首先使用SOME/IP-SD(Service Discovery)来进行服务订阅,然后才能发布通知。区别在于,Event是某一时刻的快照,只是事件通知,而Field除了事件通知之外,还具有Getter和Setter的功能,即对信息进行读写的操作。
SOME/IP-SD
SOME/IP是client和server对服务内容的请求和响应,但是client如何知道server有哪些服务可提供呢?常规的SOME/IP消息并不具有这样的功能,所以就有了SOME/IP-SD协议,可用于汽车网络中的服务发布/订阅。
SOME/IP-SD是一种特殊的SOME/IP格式,主要用于:
确定服务实例的位置(IP地址、通信协议、端口号等)
检测服务实例的状态(是否正在运行)
执行服务发布/订阅的操作
它对SOME/IP-SD报文中的Payload进行了定义和实现,而Message ID字段则是固定的0xFFFF 8100。
SOME/IP可用在TCP/UDP协议上,但是SOME/IP-SD只能用在UDP上,因为SOME/IP-SD只是为了发现服务,并不需要TCP的可靠性连接等特性。
SOME/IP-SD提供了两种动态发现服务的机制。一种是Offer Service ,由server向网络上的小伙伴告知它所提供的服务;另一种是Find Service ,由client向别人请求可用的服务。
部分图文来源于网络
参考文章:
车载以太网 - SOME/IP简介 - 知乎
SOME/IP 协议介绍_拖拉机日记-CSDN博客_someip协议