目录
SomeIP协议
1.什么是SomeIP
1.1 someip是一种协议
someip是什么协议?
- 宝马公司制定的,是车载以太网和SOA的驱动
- 主要提供车内娱乐信息交互的中间信息传递(例如智能座舱)
- 可以适配各种操作系统QNX Linux等
1.2 someip是一个中间件
- 是操作系统/硬件/和APP之间的服务软件
- 与APP之间使用标准的接口
1.3 协议层
基于TCP/IP的传输,以太网的方式
2.Some/IP的功能
2.1 序列化
- 将数据结果或者对象按照定义的规则转换成二进制的过程,便于在网络上传输
2.2 远程调用
- 基于网络传输方式实现节点间的方法调用
2.3 服务发现
- 特殊的服务:该服务,client 可以查找所需要的服务。server端可以告诉client 自己那些服务可以被使用
- client 端可以和server端动态建立连接
2.4 订阅/发布
- client 端可以想server 订阅相关topic 的数据。server也可以以cycle/event 的方式发布这些数据
3.服务接口
Method -方法
- Property/field - 字段属性
- Event-事件
3.1 Method
- client 向sever 请求报文
- server 响应报文【RR】==>Request/Response
- server 不需要回复响应报文【FF-Method】==> Fire/Forget(当请求为F&F通信的时候,请求的报文类型我REQUEST_NO_RETURN)
3.2 Event
- client 订阅一个服务,server发布服务
- status: on change/cycle
- status value: on change/cycle/事件值变化超过设置范围
3.3 filed -属性/状态
- set/get
- cilent request 获取/设置 某个属性或状态
- notify
- cilent subscribe 某个属性/状态后,server就发布该服务
- 发布条件同Event,有一点不同得是订阅后server会立即发送此field的内容
4.SomeIP报文格式
SomeIP报文一般是由Header 和Payload组成
- Header 部分
- Message ID: 报文的标识符:4个字节的长度,SomeIP有唯一的ID(类似于CAN ID),当定义为Method的时候,Method Id的最高位为0,当定义为Event的时候,Method ID的最高位为0,不同的Method 和Event也有唯一的Method ID和Event ID,对于远程调用RPC的时候(例如从一个ECU到另一个ECU之间的消息传递),指定的sevice 和对应的调用方法.
- 例如,某个ecu需要和Tbox之间的数据交互,获取Tbox上的WAN信息,就需要指定service id 为Tbox对应的service id,method ID 为其中定义获取WAN相关信息的ID
- Length: 4个字节,这里的length 是指的Length字段之后的长度
- Request ID:请求ID
- 区分每一条请求
- Server 端会将这部分copy到response报文中
- client ID: 2个字节,区分请求同一个sevice的不同客户端
- session ID: 2个字节,同一个客户端请求同一个service的次数
- protocol Version:Some/ip的协议版本,1个字节
- Interface Version: service Interface 的主版本
- 用作检测服务的一致性,是否匹配(比如VSP 服务增加功能接口,对应更新了矩阵版本,之前client指定的版本可能就找不到对应的功能)
- Message Type :报文的类型(区分不同的消息类型),一个字节
- Return Code :请求是否被成功处理,1个字节
5.序列化
5.1 序列化和/反序列化
- 序列化:将对象的状态信息转换为可以存储或以二进制的信息在网络中传输
- 序列化根据传输的不同数据有不同的规则
- 基本数据类型的序列化
- 结构体的序列化
- 字符串的序列化(定长/变长)
- 数组的序列化(定长/变长)
- 基本数据的序列化
- 定义传输数据的字节序:例如 uint32 (0x A05C6D4F)
- 字符串类型的序列化
- 字符串由一系列的Unicode字符构成,并且以"\0" (0x00)结束
- 数组类型的序列化
- 数组是相同类型的集合
- 根据数组的元素的序列排列,并进行序列化
6.Some/IP SD(Service Discovery)
6.1概述
一种特殊的服务,实现服务寻找事件订阅功能
- 服务寻址
- FindService
- OfferService
- StopOffService
- 事件订阅
- subscrbe Eventgroup
- stopSubscribe Eventgroup
- Subscribe EventgroupAck
- Subscribe EventgroupNAck
6.2 SomeIP SD报文格式
- Flags:第一个字节是标志字段,最高三位从高到低依次为重启标志位,单播标志位,初始数据控制标志位,低五位保留
- Reboot Flag
- 重启时置1(或者上电的时候)
- 当sesson ID 完成从0~0xFFFF的一个循环之后,Reboot置0(sesson ID 或从0逐渐增加直到0xFFFF 后又循环)
- 重启检测
- Unicast Flag
- 是否支持单播接收(=1)
- Entry 阵列
- 服务发现是通过SD报文中的Entry阵列字段携带的不同类型Entry来实现的, Entry用来同步服务实例状态和处理事件组的发布和订阅。依据SD 报文中Entry的作用不同将SD的报文类型分为七种,其中Find报文、Offer报文和Stop Offer报文基于不同的机制周期发送,用于同步服务实例的状态;订阅事件组报文、停止订阅事件组报文、订阅ACK报文和订阅NACK报文用于处理事件组的发布和订阅。
- Option 阵列
SD 报文中的Entry通过引用option阵列中携带的其他附件信息,能够更灵活的配置
- entry 的附加信息
- IP 地址
- 传输层协议
- 端口号
- 类型
- EndPoint Option
- Multicast Option
- Configuration Option
- Load Balancing Option
6.3 SD 启动时序 -服务器和事件的处理阶段
- 关闭阶段(Down)
- 可用阶段(Available)
- 初始等待阶段(init wait phase)
- 重复阶段(Repetition phase)
- 主阶段