关于SOME/IP的理解

news/2025/1/11 13:56:47/

目录

1. 总体说明

2. 服务说明

2.1 Method

2.2 Event

2.3 Field

3. 解析SOME/IP格式

3.1 Message Type说明

3.2 Payload说明

4. SOME/IP 服务发现SD

4.1 主要功能

4.2 SD报文解析

4.2.1 Entry

4.2.2 Options

4.3 SD状态机 

5. SOME/IP序列化 

5.1 概念

5.2 说明

5.3 举例


1. 总体说明

如上图所示为标准的网络七层架构,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格式

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报文解析

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实现提供服务、发现服务,以及订阅事件组的功能

供服务用Entries

供EventGroup用Entries

报文中Type内容解释如下:

类别

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

每一个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状态机 

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

状态服务端行为客户端行为
DownService不可用

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

收到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过程

5.3 举例

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

 Byte0Byte1Byte2Byte3

大端(Big Endian)

12345678

小端(Little Endian)  

78563421

 


http://www.ppmy.cn/news/297368.html

相关文章

IP报头结构详解

IP报头结构如下图所示 下面具体分析IP包头中各部分的作用。 版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6) IP包头长度&#xff08…

IP地址和路由

IP地址和路由 IPv4地址 IP地址 IP地址是逻辑上的地址,可人为分配,具有可管理性 IP地址可唯一标识 IP 网络中的每台设备 每台主机(计算机、网络设备、外围设备)必须具有唯一的地址 IP地址由两部分组成 ①网络ID    标识网络 …

IP地址编址

文章目录 IP地址编制方式分类编址IP地址的分类: 划分子网无分类编址子网掩码 广播 IP地址的定义: ​ IP地址(IPv4地址)由32位正整数来表示。TCP/IP通信要求这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制方…

IP地址规划

IP地址规划 IP地址分类A类地址B类地址C类地址D类地址E类地址 私有IP地址特殊IP地址IP子网划分子网划分举例参考 IP地址分类 A类地址 A类地址第1字节为网络地址(最高位固定是0),另外3个字节为主机地址。 A类地址范围:1.0.0.0 - 12…

Nmap端口扫描指南之Idle Scan

TCP Idle Scan (-sI) 1998年,安全研究员Antirez(曾参与编辑nmap中有关hping2工具的相关文章)在Bugtraq邮件列表中发布了一篇关于新的端口扫描技术的文章。Idle Scan,也就慢慢的为众人所了解,它允许进行完全盲目的端口扫…

Floating IP

Neutron将关联DNAT功能的建模放在模型Floating IP中,我们摘取其中与DANT密切相关的字段,如下表: 表中字段所体现组网形式,如下图: Floating IP从模型的角度,只与Router关联(关联字段是router_id…

固定ip地址

在把皕杰报表部署到LINUX上时,我们有的时候需要自动获取ip来实现连接,但平时我们为了方便,可以把我们的ip改为固定的ip,这样访问的时候也会方便许多。 设置里面打开WLAN——>网络和共享中心——>更改适配器设置——>右键…

(四)tcp/ip之UDP协议

UDP协议在IP协议上增加了复用、分用和差错检测功能。UDP的特点: A)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。 B)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不…