6.4.2.1. SOME/IP 简述

SOME/IP全称是Scalable service-Oriented MiddlewarE over IP,也就是IP协议的面向服务的可扩展性通信中间件协议.

SOME/IP支持提供以下服务:

  • 服务发现(Service Discovery)

  • 远程服务调用(RPC,remote producer call)

  • 读写进程信息(Getter & Setter)

汽车协议开发中CAN是比较常见的一种协议,但CAN是 面向信号 的,而SOME/IP则是 面向服务 的.

../../../_images/someip_service.png

6.4.2.1.1. SOME/IP 消息格式

SOME/IP协议一般指代SOME/IP, SOME/IP-SD, SOME/IP-TP 三种

../../../_images/data_struct.png
  • Message ID: Service ID或Method ID

Message ID可以指代一个远程调用RPC的Method或是一个服务的Event. Method ID和Event ID占据低15bit,中间1bit用来区别两者,高16bit代表service id

../../../_images/messageid_id_0.png ../../../_images/message_id_1.png
  • Length: 消息长度,从Request ID算起

  • Request ID

  • Protocal Version: 协议版本号

  • Interface Version: 接口版本号

  • Message Type: 消息类型

Type ID

消息类型

解释

0x00

REQUEST

单纯的Request, 无Response

0x01

REQUEST_NO_RETURN

一个Fire&Forget类型的Request

0x02

NOTIFICATION

一个关于Event的callback的request,无response

0x80

RESPONSE

一个Response

0x81

ERROR

一个带ERROR信息的Response

0x20

TP_REQUEST

单纯的TP Request,无Request

0x21

TP_REQUEST_NO_RETURN

一个fire&forget类型的tp request

0x22

TP_NOTIFICATION

一个关于Event的callback的TP request,无response

0xa0

TP_RESPONSE

一个TP Response

0xa1

TP_ERROR

一个带ERROR信息的tp request

  • Return Code: 返回编码

根据messagetype不同,return code不同,一般是E_OK(0x00),但如果是Response或者是Error的话就不会是0x0

  • Payload: 数据负载

SOME/IP底层可以基于TCP或者是UDP,UDP协议一般限制在1400Bytes, 但如果是TCP协议,通过数据分段传输可以实现更大容量的传输

6.4.2.1.2. 通信模式

SOME/IP消息通信类型

  • R&R(Request & Response)

最常见的通信模式就是请求/响应模式,客户端发送请求消息,服务器给予回应

../../../_images/RR.png
  • F&F(Fire & Forget)

客户端发送Request, 无需Response的操作称为Fire&Forget

../../../_images/FF.png
  • Notification

Notification代表的是一种Publish-Subscribe通信机制,Server端会主动推送信息给订阅方.Notification分三种情况

  1. Cycle Update: 周期性的发送相关value的变化

  2. Update On Change: 如果value发生变化,则往外推送

  3. Epsilon Change: 如果value的值大于相应的epsilon的值,那么对外推送消息

../../../_images/Notification.png
  • Event