![]() |
---|
SOME/IP Protocol Specification - AUTOSAR.org |
概述
- Scalable 可拓展的,也叫可伸缩的
- 指能够适应不同操作系统,以及不同大小的设备
- 不同大小的设备:小到摄像头,大到车机或通信设备
- 不同操作系统:AUTOSAR、OSEK、Linux等
- service-Oriented 面向服务的
- 关注对象为服务起源于传统IT行业,行对于传统面向信号通信
- Middlewar 中间件
- 处于操作系统/硬件和应用之间的系统软件或服务程序
- 不受底层硬件和操作系统的复杂性影响
- 与应用程序之间使用标准的API接口
- IP 就是基于TCP/IP协议的传输,用以太网传输
基础
- 谁制定:
- 由BMW设计并纳入AUTOSAR规范
- 为什么:
- 车载以太网和SOA技术应用的驱动,解决服务的提供方和服务消费方之间的网络通信问题
- 提供车内信息交互的中间件解决方案,用于汽车中间件的面向服务的可伸缩的协议
- 适配不同大小的车载设置及车载操作系统之间的控制消息传输
- 特点:
- 支持远程过程调用、事件通知、字段访问等功能,以及多种传输层协议(如TCP、UDP、CAN等)
- 消息头包含了消息ID、长度、请求ID等信息,用于标识和区分不同的服务和方法
- 支持服务发现机制,用于动态地发现和提供服务
功能
- 序列化
- 将数据结构或对象依据事先定义的规则转成二进制的过程,以便于数据在网络上传输
- 远程过程调用(RPC)
- 通过在网络传输信息实现一个节点对另一个节点的方法调用
- 服务发现(SD)
- 客户端可以“寻找”所需的服务,服务端可以“告诉”大家需要的服务
- 客户端和服务端动态建立通信连接
- 订阅发布
- 客户端可以想服务端订阅所需要的数据,服务端以周期或者事件触发的方式发布这些数据
- UDP报文分段(AUTOSAR 4.3)
- 允许通过UDP传输大型SOMEIP报文,而无需在IP层分片
服务接口
服务接口(Service Interface)包含以下三种
报文格式
- 报文格式是通信协议中定义的数据组织方式。
- 它规定了数据如何在网络中传输,包括数据的结构、顺序、类型等信息。
- 报文格式通常包括头部(包含元数据,如源地址、目标地址、长度等)、负载(实际的数据内容)和尾部(可能包含校验和或结束标记)。
Click for Deatils
-
不同的通信协议有不同的报文格式,设计通信协议和报文格式需要对以下方面进行权衡:
- 目标和用途:不同的协议设计用于解决不同的问题,例如,HTTP协议用于Web通信,FTP协议用于文件传输,SOME/IP用于车载以太网通信,每个协议需要的数据和元数据都不同。
- 效率和性能:不同的报文格式可能会影响传输效率和网络性能。例如,一些协议可能会选择更紧凑的报文格式以减少网络带宽的使用。
- 可靠性和错误检测:一些协议可能包含额外的错误检测和恢复机制,这可能需要特定的报文格式。
- 兼容性和扩展性:一些协议可能设计了特定的报文格式以便于向后兼容或者未来的扩展。
- 报文封装
- 报文格式
- Message ID: 报文的唯一标识符
- Length: 占32bit,此值为length字段之后包括数据的长度
- Request ID: 占32bit,区分每条请求,Server端将其复制到Response报文中
- Protocol Version:占8bits,SOME/IP协议版本
- Interface Version:占8bits,Service Interface的主版本
- Message Type:占8bits
- Return Code:占8bits,标识请求是否被成功处理
序列化
- Serialization - 序列化
- 将对象的状态信息转化为可以存储或以二进制的形式在网络中传输
- Deserialization - 反序列化
- 将在序列化过程中所生成的二进制串转换为数据结构或者对象的过程
- SOMEIP 序列化:接收方能够按照既定的格式(数据格式、传输顺序、编码格式)正确解析并存储重发送方发过来的数据
基本数据类型的序列化
- 定义传输数据的字节序
- Example: uint32(0x8A9D6F5R)
结构体的序列化 - Struct
- 将结构体的数据袁术顺序排列,然后将各元素依次进行序列化
- 可增加Length Field来指示结构体中数据元素的字节长度
字符串的序列化 - String
- String由一系列的Unicode字符构成,并以“\0”(0x00)结束
- String前增加BOM(Byte Order Mark) + 数据(UTF8/UTF16)+ 结束符
数组的序列化 - Array
- 数组是相同类型数据的集合,依据数组元素的顺序排列进行序列化
- 数组是相同类型数据的集合,依据数组元素的顺序排列进行序列化
服务发现
- SD是一种特殊的服务,实现服务寻址和事件订阅功能。
服务寻址
- FindService
- OfferService
- StopOfferService
事件订阅
- SubscribeEventGroup
- StopSubscribeEventGroup
- SubscribeEventgroupAck
- SubscribeEventgroutNAck
SD报文格式
- SD报文实际上是一种特殊的SOME/IP报文,SD的区别在于payload是一种特殊的格式,且MessageID是固定的0xFFFF 8100
- Flages
- Reboot Flag
- 重启时或上电时置1
- 当Session ID完成从1~0xFFFF的一个循环之后,Reboot置0
- 重启检测
- if old.reboot == 0 and new.reboot == 1 then Reboot detected
- if old.reboot == 1 and new.reboot == 1 and old.session_id >= new.session_id then Reboot detected
- Unicase Flag
- 是否支持单播接收(=1)
- Reboot Flag
- Entry
- Option
- entry的附加信息
- IP地址
- 传输层协议
- 端口号
- 类型
- Endpoint Option
- Multicase Option
- Configuration Option
- Load Balancing Option
- entry的附加信息
- SD报文实际上是一种特殊的SOME/IP报文,SD的区别在于payload是一种特殊的格式,且MessageID是固定的0xFFFF 8100
SD启动时序
- 关闭阶段(Down)
- 可用阶段(Available)
- 初始等待阶段(Initial Wait Phase)
- 重复阶段(Repetition Phase)
- 主阶段(Main Phase)