SOME/IP协议
2022-05-10 15:31:23 1 举报
AI智能生成
登录查看完整内容
车载以太网SOME/IP协议
作者其他创作
大纲/内容
1、解决服务提供方与服务消费放之间的网络通信问题
2、SOME/IP报文打包了服务接口的内容
SOME/IP是干啥的?
Scalable service-Oriented MiddlewarE over IP 基于IP可扩展的面向服务的中间件
谁制造?:宝马公司
1、车载以太网和SOA技术应用的驱动
2、提供车内信息交互的中间件解决方案
3、适配不同大小的车载设备及车载操作系统
为什么?
1、替代信息娱乐域等MOST通信场景
2、替代其他域(如车身)等部分传统CAN通信场景
用在哪?
什么是SOME/IP?
序列化:将数据结构或对象依据事先定义的规则转换成二进制的过程,以便于数据在网络上传输
远程过程调用(RPC):通过在网络传输消息实现一个节点对另一个节点的方法调用
服务发现(SD):一种特殊服务;基于该服务。客服端可以“寻找”所需的服务,服务端可以“告诉”大家自己哪些服务可用; 客户端和服务端动态建立通信连接
订阅/发布:客户端可以向服务端订阅所需的数据,服务端以周期或者事件触发的方式发布这些数据
UDP报文分段(AUTOSAR4.3):允许通过UDP传输大型SOME/IP报文,而无需在IP层分片
SOME/IP的功能
RR-Method:服务端恢复响应报文
FF-Method:服务端不需要回复响应报文
Client端向服务端发送请求报文
Method-方法
Setter/Getter:客户端请求获取/设置某一属性/状态
Notifier:客户端订阅某一属性/状态后,Server端发布该服务 发布条件同Event,不同的是订阅后Server端会立即发送Field的内容
Property/Field-属性/字段
状态:on change/Cycle
状态值:on change/Cycle/事件值变化超过预期设置范围
Client端订阅一个服务,Server端发布该服务
Event-事件
服务接口(Service Interface)
概述
Service ID(16bit)+ 0(1bit) +Method ID(15bit)
Service ID(16bit) + 1(1bit) +Event ID(15bit)
Message ID (32bit)
Length(32bit)
Client ID(16bit):区分请求同一服务Service的不同客户端
Session ID(16bit):同一客户端请求同一服务Service的次数 从0x0001开始,达到0xFFFF后,重新从0x0001开始循环
Request ID(32bit)
Protocol Version(8bit):SOME/IP协议版本;当前为0x01
Interface Version(8bit): Service Interface 的主版本;用于检测服务的一致性是否匹配
返回值:0x00(E_OK)
REQUEST
REQUEST_NO_RETURN
NOTIFICATION
返回值:Return Code
RESPONSE
返回值:不包含0x00的Return Code
ERROR
Message Type(8bit) : 报文类型
0x00:E_OK:无错误
0x01:E_NOT_OK:未知错误
0x02:Unknown Service :未知的service ID
0x03:Unknown Method:已知的service ID,未知的method ID
0x04:Not Ready:应用程序没有运行
0x05:Not Reachable:内部错误
0x06:Timeout:内部错误
0x07:Wrong Protocol Version:协议版本错误
0x08:Wrong Interface Version:接口版本错误
0x09:Malformed Message:反序列化错误
0x0a:Wrong Message Type:报文类型错误
0x0b~0x3f:Reserved
Return Code(8bit): 表示请求是否被成功的处理
Version
SOME/IP报文格式
序列化:将对象的状态信息转换为可以存储或以二进制的形式在网络种传输
反序列化:将序列化过程中所生成的二进制串转换成数据结构或者对象的过程
定义传输数据的字节序
example:unit32(0x8A9D6F5R)
基本数据类型的序列化
将结构体的数据元素顺序排列,然后将各个元素依次进行序列化
可增加Length Field来指示结构体中数据元素的字节长度,而嵌套的结构体也同样需要增加Length Field
结构体的序列化
string由一系列的Unicode字符构成,并以\"\\0\
string前增加BOM(byte order mark)+数据(UTF8/UTF16BE/UTF16LE)+结束符
定长
基于定长string规则,在BOM之前增加Length Field,以指示动态字符串字节长度
变长
字符串的序列化(定长/变长)
数组是相同类型数据的集合
依据数组元素的顺序排列,并进行序列化
在定长的string前面增加Length Field
数组的序列化(定长/变长)
序列化规则
序列化
SOME/IP
总结:通过SOME/IP数据序列化的过程,使接收方能够按照既定格式(数据格式、传输顺序、编码格式。。。)正确解析并存储从发送方发送过来的数据
一种特殊的服务,实现服务寻址及事件订阅功能
FindService
OfferService
StopOfferService
服务寻址
SubscribeEventgroup
StopSubscribeEventgruop
SubscribeEventgruopAck
SubscribeEventgruopNAck
事件订阅
简介(Service Discovery)
报文头与SOME/IP一样(Message ID固定=0xFFFF 8100)
重启时置1(或者上电时)
当Session ID完成从1~0xFFFF的一个循环后,Reboot置0
重启检测
Reboot Flags
是否支持单播接收(=1)
注:单播标志时历史上SOME/IP版本遗留下来的,仅出于兼容性的原因保留
Unicast Flags
Flags(8bit)
Type(8bit):entry类型
Index 1st/2nd options:表示option的起始位置,Index 1st值多个Entry共有的option
# of opt 1 /# of opt 2:指相应的Index 1st/2nd携带option的数量
Service ID:区分不同服务,和SOME/IP报头中的含义一样
0x0000:预留
0xFFFF:所有服务实例
Instance ID:区分同一服务的不同实例
Major Version(8bit):主版本
Minor Version:次要版本(0xFFFF 代表任何版本)
Service Entry
Type(8bit):entry类型
Counte(4bit):对不同客户端订阅同一事件组的计数
0x0000:预留
0xFFFF:所有事件组
Eventgruop ID(16bit):需要订阅的事件组标识符
Eventgruop Entry
Entry(32bit)
IP地址
传输层协议
端口号
entry的附加信息
IPv4 Endpoint OptionL4-Proto(TCP:0x06/UDP:0x11)
IPv6 Endpoint Option
IPv4 SD Endpoint OptionL4-Proto(UDP:0x11)
IPv6 SD Endpoint Option
Endpoint Option
IPv4 Multicast OptionL4-Proto(UDP:0x11)
IPv6 Multicast Option
Multicast Option
Configuration Option:可以传输任意字符串,如服务名称或配置
Priority(16bit):优先级,数值越小,优先级越高
Weight(16bit):权重,数值越大,被选择的机率越大
Load Balancing Option:确定不同服务实例的优先级,以便客户端选择
类型
Option
SOME/IP SD 报文格式(一种特殊SOME/IP报文)
关闭阶段
初始等待阶段
重复阶段
主阶段
可用阶段
SOME/IP SD启动时序
SOME/IP SD
SOME/IP协议
0 条评论
回复 删除
下一页