SOMEIP协议与测试
SOMEIP协议与测试
一、 智能汽车SOA架构
SOA(面向服务的架构)是一种通过标准化接口将业务功能封装为独立服务的组件模型,强调松耦合、可重用性和跨平台互操作性,广泛应用于企业系统集成和分布式系统设计。
二、SOMEIP协议
1.基于TCP/IP的应用层
作为OSI应用层协议,构建于TCP/UDP传输层之上,通过IP实现跨设备通信
典型报文结构包含:
Message ID (32bit) + Length (32bit) + Request ID (32bit)
+ Protocol/Interface Version + Message Type + Payload+Return Code
SOME/IP(Scalable service-Oriented MiddlewarE over IP)是一种面向服务的、可扩展的通信协议,专为汽车嵌入式系统设计。它基于IP网络,提供了远程服务调用(RPC)、服务发布/订阅(Pub/Sub)、事件通知、服务发现(SD)等功能。SOME/IP协议于2011年由BMW开发,2014年被纳入AUTOSAR规范,成为车载以太网通信的重要组成部分。
三、SOME/IP协议的核心机制
1. 服务定义与通信方式
服务(Service):由事件(Events)、方法(Methods)和字段(Fields)组成。
事件(Events):从服务器到客户端的单向数据传输,用于周期性或状态变化时的通知。
方法(Methods):客户端发布的RPC,在服务器上执行,包括请求/响应(Request/Response)和无响应(Fire&Forget)两种通信模式。
字段(Fields):表示状态信息,包括Getter(读取)、Setter(设置)和Notifier(通知)三种操作。
2. 报文格式
SOME/IP报文由消息头(Header)和负载(Payload)组成,消息头包含以下关键字段:
Message ID:唯一标识消息,由服务ID和方法ID组成。
**Length:**从Request ID到Payload的字节长度。
**Request ID:**用于区分同一服务的多条请求,由客户端ID和会话ID组成。
**Protocol Version和Interface Version:**分别标识协议版本和服务接口版本。
Message Type:区分报文类型,如请求、响应、事件通知等。
**Return Code:**表示请求处理结果。
3. 序列化与传输协议
**序列化:**将对象转换为二进制格式进行网络传输,SOME/IP通常采用TLV(Type-Length-Value)格式。
**传输协议:**支持UDP和TCP两种传输协议。UDP适用于低延迟、小包数据传输;TCP适用于大数据量、高可靠性传输。
4. 服务发现(SD)
SOME/IP-SD提供了一种动态服务发现机制,包括Offer Service(服务提供)和Find Service(服务查找)。通过组播和单播消息,客户端和服务器可以快速同步服务信息。
5.SOME/IP SD 工作流
SOME/IP-SD(Service Discovery)是SOME/IP协议中用于服务发现的一种机制,允许网络中的客户端动态地发现和定位服务实例。其工作流主要包括以下几个阶段:
1. 初始等待阶段(Initial Wait Phase)
描述:服务提供者(Server)和客户端(Client)在启动后,会等待一段时间(在InitialDelayMin和InitialDelayMax之间随机)再发送第一条SD消息。
目的:避免启动时的网络拥塞,允许节点在网络中稳定后再进行通信。
2. 重复阶段(Repetition Phase)
描述:Server和Client按照固定的时间间隔(如100ms的倍数)重复发送SD消息。
目的:加快Server和Client之间的同步速度,确保服务信息的及时更新。
3. 主阶段(Main Phase)
描述:Server进入周期性发送Offer Service消息的阶段,Client则根据需求发送Find Service消息。
目的:实现服务的持续发现和动态管理,确保客户端能够及时获取到最新的服务信息。
SOME/IP SD 协议消息格式
SOME/IP-SD协议定义了标准化的消息格式,以便在网络中进行服务发现相关的消息交换。其核心消息格式如下:
1. 报文头标识
Message ID:固定为0x8100,用于标识SD消息。
Service ID:固定为0xFFFF,表示这是一个服务发现相关的消息。
2. 条目类型
SD协议定义了多种条目类型,用于描述服务发现过程中的不同信息:
ServiceEntry:
服务ID:标识特定的服务。
实例ID:标识同一服务的不同实例。
端点信息:包括IP地址、端口号和传输协议类型,用于定位服务实例。
EventgroupEntry:
事件组ID:标识一组相关的事件。
初始值标记:指示事件组的初始状态。
计数器阈值:用于管理订阅和发布关系。
四、测试工具
1.CANOE
Simulation->system and communication setup 待补图
详细步骤后续更新
2.python
github: eth-scapy-someip