关于SOME/IP的理解

2023-05-16

 1 总体说明

Image

如上图所示为标准的网络七层架构,SOME/IP ( Scalable service-Oriented MiddlewarE over IP),即“运行于IP之上的可伸缩的面向服务的中间件”。

他在系统中其实就是一个中间件的存在,所谓“Middleware中间件”是一种独立的系统软件或服务程序,分布式应用软件可借助Middleware在不同的技术之间共享资源。

所谓的分布式应用软件,在这里指的就是“服务”;不同的技术之间,在这里指的就是“不同的平台或操作系统,比如Adaptive AUTOSAR系统等。

2 服务说明

服务是SOME/IP的最核心概念。在一个服务中,定义了Server和Client两个角色:

  • Server提供服务
  • Client调用服务

对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。

一个Service由0~多个Event/Method/Field组成。

与CAN相比,面向服务的通讯方式能够大大降低总线的负载率。

2.1 Method

调用或引用一个进程/函数/子程序,通常由Client发起,并由Server答复。

Request是最常见的一种Method,由Client向Server请求数据;

Response是Request的结果,由Server答复Client的Request。

而Method Fire & Forget方式,只Client向Server发起,但Server对该请求不回复。

2.2 Event

一个单向的数据传输,只能是on change类型,用于Server主动向订阅(Subscribe)了相关服务的Client发布(Publish)信息。

2.3 Field

由以下三项内容构成:

  • Notifier:通知,Server的Client订阅了服务后第一时间主动向其发送数据

  • Getter:获取,由Client向Server请求数据。

  • Setter:设置,由Client修改Server的数据。

3 解析SOME/IP格式

Image

Image

3.1 Message Type说明

报文类型

说明

0x00

REQUEST

请求,需要回复

0x01

REQUEST_NO_RETURN

请求,不需要回复

0x02

NOTIFICATION

Notifier/Event,不需要回复

0x80

RESPONSE

回复

0X81

ERROR

带有错误信息的回复

3.2 Payload说明

通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位等。

这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失。

一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload。

4 SOME/IP 服务发现SD

由于服务需要由Server和Client共同完成,因此在进行正常的数据传输之前,需要一系列的准备工作确认Server和Client之间是否已有网络连接。

之后,Client还要询问Server能否提供所需的服务,并对服务的Event进行订阅。

这些工作都是通过SOME/IP服务发现(Service Discovery)实现的。

SOME/IP服务发现用于定位服务实例、检查服务是否可用以及部署发布和订阅句柄。

服务发现只能通过UDP实现。

服务发现的报文格式与一般的SOME/IP报文相同,但是其Message ID固定为0xFFFF8100

4.1 主要功能

  1. 定位服务实例

  2. 检测服务实例是否在运行(即服务实例的状态)

  3. 发布/订阅行为的管理

4.2 SD报文解析

Image

SOME/IP SD报文也是一种SOME/IP报文,是在SOME/IP报文的基础上进行了扩展,增加了Entry、Option等字段;

  • Entries用于同步服务实例的状态和发布/订阅的管理。
  • Options用于传输Entries的附加信息。

SOME/IP SD报文的:

ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等属性都是固定值。

4.2.1 Entry

Entry字段可以理解为服务实例的“入口”,该入口包含服务实例以及需要订阅的事件组的信息。

主要通过Entry实现提供服务、发现服务,以及订阅事件组的功能。

Image

供服务用Entries

Image

供EventGroup用Entries

Image

报文中Type内容解释如下:

Image

类别

Type值

Type名称

Service 

0x00

FindService 用于Client查找服务

0x01

Offer/StopOfferService 用于Server向Client提供服务或停止提供服务

Eventgroup 

0x06

Subscribe/StopSubscribe Client向Server订阅服务或停止订阅

0x07

SubscribeAck/Nack Server对于订阅的应答,如果订阅成功,Client收到的就是SubscribeAck,否则收到SubscribeNack

对于Offer/ StopOfferService、Subscribe/ StopSubscribe和SubscribeAck/ Nack,每一组Entries都共用了相同的Type值。

通过TTL字段可以识别究竟是提供服务还是停止提供服务是订阅事件还是取消订阅,是订阅成功应答还是订阅失败应答:

当TTL = 0时,表示报文对应的服务实例不再有效,此时对应的Type类型分别就是停止提供服务、停止订阅事件以及订阅失败应答。

4.2.2 Options

Image

每一个Option都是有一个2字节的Length字段、1字节的Type字段和1字节的保留位开始的。

Length字段指示的长度是从保留位开始的。

Options的类型如下表所示:

类别

Type值

Type名称

Configuration

 用于配置服务

0x01

Configuration    

Load   Balancing

用于配置服务实例的优先级 

0x05

Load Balancing  

Endpoint 

发送服务相关的地址和端口

0x04

IPv4   Endpoint   

0x06

IPv6   Endpoint 

0x24

IPv4   SD Endpoint 

0x26

IPv6   SD Endpoint 

Multicast

声明Multicast地址

0x14

IPv4   Multicast   

0x16

IPv6   Multicast 

4.3 SD状态机 

Image

不管是客户端还是服务端,都有同样的状态机,但是他们的状态机具有不同的行为。 

状态

服务端行为

客户端行为

Down

Service不可用

服务未被应用请求,则停留在该状态;

收到OfferService,启动TTL计时器,此时服务若被应用请求,进入Main

Init

进入条件:

当服务准备完毕(Available)后;

During:

收到Find Service报文,服务端忽略此消息;

退出条件:

若服务不可用了,将进入Down ;

INITIAL_DELAY,当定时器超时后,进入Repetition。

进入条件:

服务被请求后,进入此阶段;

During:

等待INITIAL_DELAY时间;

退出条件:

如果此时收到Offer Service,则取消计时器,直接进入Main ;

如果服务请求被释放,进入Down ;

计时器超时后,发送第一个Find service,进入Repetition。

Repetition

作用:

为了让客户端快速找到有哪些Service,

During:

如果收到某客户端的FindService,延迟一定时间后,单独发送单播OfferService给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;

如果收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

退出条件:

如果服务不可用,离开此阶段进入Down ,并发送StopOfferService通知所有客户端。

作用:

重复发送Find service;

退出条件:

收到Offer Service,停止发送计数和计时,立即进入Main 触发发送SubscribeEventgroup;

如果服务请求被释放,进入Down ,若有订阅,则发送StopSubscribeEventgroup。

Main

作用:

此阶段将周期性发送OfferService;

During:

如果收到某客户端的FindService,不影响发送计数,发送单播OfferService给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器

收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

退出条件:

如果服务不可用,离开此阶段进入Down,并发送StopOfferService。

作用:

不再周期发送Find Service,不必要负载;

During:

收到Offer Service,触发发送SubscribeEventgroup;

如果收到StopOfferService,则停止所有计时器;

退出条件:

如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。

5 SOME/IP序列化 

5.1 概念

序列化(Serialization)指的是将数据结构或对象依据事先定义的规则转换成二进制串的过程

反序列化(Deserialization)指的是将二进制串依据相同规则重新构建成数据结构或对象的过程

5.2 说明

在AUTOSAR中是指数据在PDU中的表达形式,可以理解为来自应用层的真实数据转换成固定格式的字节序,以实现数据在网络上的传输。

软件组件将数据从应用层传递到RTE层,在RTE层调用SOME/IP Transformer,执行可配置的数据序列化(Serialize)或反序列化(Deserialize)。

SOME/IP Serializer将结构体形式的数据序列化为线性结构的数据

SOME/IP Deserializer将线性结构数据再反序列化为结构体形式数据

在服务端,数据经过SOME/IP Serializer序列化后,被传输到服务层的COM模块

在客户端,数据从COM模块传递到SOME/IP Deserializer反序列化后再进入RTE层

如下图参考Autosar Com过程

Image

5.3 举例

一个unit32类型数据(0x12345678)的序列化。

Byte0

Byte1

Byte2

Byte3

大端(Big Endian)

12

34

56

78

小端(Little Endian)  

78

56

34

21

一文了解什么是SOME/IP协议(超详细)SOME/IP 在CAN总线的车载网络中,通信过程是面向信号的 当ECU的信号的值发生了改变,或者发送周期到了,就会发送消息,而不考虑接收者是否需要,这样就会造成总线上出现不必要的信息,占用了带宽 而SOME/IP的出…icon-default.png?t=N2N8http://www.taodudu.cc/news/show-3371915.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于SOME/IP的理解 的相关文章

随机推荐

  • CMakeLists.txt 语法介绍与实例演练

    一 Cmake 简介 cmake 是一个跨平台 开源的构建系统 它是一个集软件构建 测试 打包于一身的软件 它使用与平台和编译器独立的配置文件来对软件编译过程进行控制 二 常用命令 1 指定 cmake 的最小版本 cmake minimu
  • tar 解压缩命令详解

    tar 解压缩命令详解 以下是对tar命令的一些总结 xff1a tar cvf test tar test 仅打包 xff0c 不压缩 tar zcvf test tar gz test 打包后 xff0c 以gzip压缩 在参数f后面的
  • 嵌入式Linux应用开发---GCC程序编译

    电脑编程就是一个 翻译 过程 xff0c 要把用户的程序翻译成CPU指令 xff0c 其实也就是机器代码 所谓的机器代码就是用CPU指令书写的程序 xff0c 被称作低级语言 而程序员的工作就是编写出机器代码 由于机器代码完全是一些数字组成
  • 嵌入式Linux应用开发---Makefile工程管理

    GUN make Linux程序员必须要学会GUN make 来构建和管理自己的软件工程 GUN 的make能够使整个软件工程的编译 链接只需要一个命令就可完成 make 在执行时 xff0c 需要一个命名为Makefile的文件 Make
  • uptime查看系统负载 -top动态管理进程

    一 uptime 查看系统负载 top动态管理进程 1 uptime 查看cpu负载工具 span class token punctuation span root span class token annotation punctuat
  • 嵌入式Linux应用开发---Linux文件编程

    系统调用 文件访问 库函数 文件访问 时间编程 Linux中文件编程可以使用两种方法 xff1a Linux系统调用 C C 43 43 语言库函数 前者依赖于Linux系统 xff0c 后者与操作系统是独立的 xff0c 在任何操作系统下
  • 嵌入式Linux应用开发---进程控制理论基础

    进程控制理论基础 进程是一个具有一定独立功能的程序的一次运行活动 特点 xff1a 动态性并发性独立性异步性 进程ID 进程ID xff08 PID xff09 xff1a 标识进程的唯一数字 父进程的ID xff08 PPID xff09
  • 嵌入式Linux应用开发---进程通信 管道

    目录 进程间通信概述 管道通信 信号通信 共享内存 进程间通信概述 为什么需要进程间通信 xff1f 数据传输 xff1a 一个进程需要将它的数据发送给另一个进程资源共享 xff1a 多个进程之间共享相同的资源 事件通知 xff1a 一个进
  • QNX操作系统简介

    前言 说到操作系统 xff0c 先来列举一些 UNIX 和 类Unix 操作系统 分类操作系统UNIX System V家族A UX AIX HP UX IRIX LynxOS SCO OpenServer Tru64 Xenix Sola
  • 虚拟化技术介绍 & hypervisor简介

    什么是虚拟化 xff1f 虚拟化 xff08 英语 xff1a Virtualization xff09 是一种资源管理技术 xff0c 是将计算机的各种实体资源 xff0c 如服务器 网络 内存及存储等 xff0c 予以抽象 转换后呈现出
  • 什么是ARA?它由什么组成?

    什么是ARA xff1f 它由什么组成 xff1f 什么是Machine xff1f Machine与ECU之间的关系是怎么样的 xff1f Execution Manifest 的作用是什么 xff1f Execution Managem
  • 从工程师的角度看AUTOSAR

    软件定义汽车 的火热带动了工程师们对于汽车电子软件热烈地讨论 不曾想到 xff0c 隐藏在控制器内部 xff0c 默默地发挥着作用的汽车电子软件 xff0c 如今备受瞩目 本人毕业到现在 xff0c 一直在汽车行业做软件 xff0c 切身感
  • 车载以太网SOME/IP概述

    车载以太网SOME IP概述 汽车测试技术 汽车测试网 车载以太网SOMEIP概述 xff08 二 xff09 汽车技术 汽车测试网 The error handling of SOME IP is shown as an example
  • 基于模型的嵌入式软件开发

    对工具的分类和资质审核 通过认证的方式发放证书 应对复杂系统时 xff0c 软件开发人员的工作效率在降低 解决复杂软件开发效率低下的路径 xff1a 模块化开发 xff08 一个复杂的系统包含很多模块 xff0c 每个模块都比较简单 xff
  • ARM Cortex-A系列处理器性能分类比较

    在如今这个电子产品泛滥的年代 xff0c 仅仅靠品牌或是外观已经不足以辨别产品的优劣 xff0c 其内置的处理器自然也就成为了分辨产品是否高端的标准之一 那么我们今天就不妨好好了解一下近几年来电子产品中较为主流的RAM处理器 在这之前让我们
  • linux 前后台进程详解

    前后台进程切换 nice 进程优先级 free 实战 screen 后台执行命令 linux 前台进程与后台进程的区别 xff1a 进程的前台与后台运行 跟系统任务相关的几个命令 xff1a 注 xff1a 实际生产环境中 xff0c 都是
  • 编写项目工作说明书(SOW)

    工作说明书 SOW 是一个项目必须提供的工作指南 SOW是一个关键的管理工具 xff0c 不管是用来指导卖方或者承包商的工作 xff0c 或者是用来指导他们的内部工作 xff0c SOW必须包括所有所期望工作的描述 这些描述不需要在一个很详
  • i++在两个线程执行100次,最终的结果是

    i 43 43 语句只需要执行一条指令 但当有多个线程时 xff0c 并不能保证多个线程i 43 43 xff0c 操作同一个i 因为还有寄存器的因素 xff0c 多个cpu对应多个寄存器 每次要先把i从内存复制到寄存器 xff0c 然后
  • 一万字解读CP AUTOSAR

    导读 xff1a AUTOSAR旨在改善汽车电子系统软件的更新与交换 xff0c 同时更方便有效地管理日趋复杂的汽车电子软件系统 AUTOSAR规范的运用使得不同结构的电子控制单元的接口特征标准化 xff0c 应用软件具备更好的可扩展性以及
  • 关于SOME/IP的理解

    1 总体说明 如上图所示为标准的网络七层架构 xff0c SOME IP Scalable service Oriented MiddlewarE over IP xff0c 即 运行于IP之上的可伸缩的面向服务的中间件 他在系统中其实就是