SomeIP 协议

Posted 爱写代码的小白程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SomeIP 协议相关的知识,希望对你有一定的参考价值。

SomeIP协议

1.什么是SomeIP

1.1 someip是一种协议

someip是什么协议?

  • 宝马公司制定的,是车载以太网和SOA的驱动
  • 主要提供车内娱乐信息交互的中间信息传递(例如智能座舱)
  • 可以适配各种操作系统QNX Linux等

1.2 someip是一个中间件

  • 是操作系统/硬件/和APP之间的服务软件
  • 与APP之间使用标准的接口

1.3 协议层

基于TCP/IP的传输,以太网的方式

SomeIP

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-事件

SomeIP

3.1 Method

  • client 向sever 请求报文
  • server 响应报文【RR】==>Request/Response
  • server 不需要回复响应报文【FF-Method】==> Fire/Forget(当请求为F&F通信的时候,请求的报文类型我REQUEST_NO_RETURN)

SomeIP

3.2 Event

  • client 订阅一个服务,server发布服务
  • status: on change/cycle
  • status value: on change/cycle/事件值变化超过设置范围

SomeIP

3.3 filed -属性/状态

  • set/get
  • cilent request 获取/设置 某个属性或状态

SomeIP

  • notify
  • cilent subscribe 某个属性/状态后,server就发布该服务
  • 发布条件同Event,有一点不同得是订阅后server会立即发送此field的内容

SomeIP

4.SomeIP报文格式

SomeIP报文一般是由Header 和Payload组成

SomeIP

  • 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字段之后的长度

SomeIP

  • Request ID:请求ID
  • 区分每一条请求
  • Server 端会将这部分copy到response报文中
  • client ID: 2个字节,区分请求同一个sevice的不同客户端
  • session ID: 2个字节,同一个客户端请求同一个service的次数

SomeIP

  • protocol Version:Some/ip的协议版本,1个字节
  • Interface Version: service Interface 的主版本
  • 用作检测服务的一致性,是否匹配(比如VSP 服务增加功能接口,对应更新了矩阵版本,之前client指定的版本可能就找不到对应的功能)
  • Message Type :报文的类型(区分不同的消息类型),一个字节

SomeIP

  • Return Code :请求是否被成功处理,1个字节

SomeIP

5.序列化

5.1 序列化和/反序列化

  • 序列化:将对象的状态信息转换为可以存储或以二进制的信息在网络中传输
  • 序列化根据传输的不同数据有不同的规则
  1. 基本数据类型的序列化
  2. 结构体的序列化
  3. 字符串的序列化(定长/变长)
  4. 数组的序列化(定长/变长)
  • 基本数据的序列化
  • 定义传输数据的字节序:例如 uint32 (0x A05C6D4F)

SomeIP

SomeIP

  • 字符串类型的序列化
  • 字符串由一系列的Unicode字符构成,并且以"\\0" (0x00)结束
  • 数组类型的序列化
  • 数组是相同类型的集合
  • 根据数组的元素的序列排列,并进行序列化

6.Some/IP SD(Service Discovery)

6.1概述

一种特殊的服务,实现服务寻找事件订阅功能

  • 服务寻址
  • FindService
  • OfferService
  • StopOffService
  • 事件订阅
  • subscrbe Eventgroup
  • stopSubscribe Eventgroup
  • Subscribe EventgroupAck
  • Subscribe EventgroupNAck

SomeIP

6.2 SomeIP SD报文格式

SomeIP

  • 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)
  • 主阶段

SomeIP

SomeIP


以上是关于SomeIP 协议的主要内容,如果未能解决你的问题,请参考以下文章

01-死磕QNX someip

错误:Someip:port 不是有效的端口号或地址:端口对

总线协议 -- AMBA总线

dns可以解决规则吗?

TCP/IP详解 卷1:协议—IP:网际协议

TCP/IP详解 卷1:协议—IP:网际协议