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则是 面向服务
的.

6.4.2.1.1. SOME/IP 消息格式
SOME/IP协议一般指代SOME/IP, SOME/IP-SD, SOME/IP-TP 三种

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


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)
最常见的通信模式就是请求/响应模式,客户端发送请求消息,服务器给予回应

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

Notification
Notification代表的是一种Publish-Subscribe通信机制,Server端会主动推送信息给订阅方.Notification分三种情况
Cycle Update: 周期性的发送相关value的变化
Update On Change: 如果value发生变化,则往外推送
Epsilon Change: 如果value的值大于相应的epsilon的值,那么对外推送消息

Event