关于SOME/IP的理解

SOME/IP 详解系列(1)—— 概述 SOME/IP详解系列第一篇——概述 阅读详情
AI摘要

本文深入讲解SOME/IP(运行于IP之上的可伸缩的面向服务的中间件),包括其在网络七层架构中的角色,服务、Method、Event、Field的概念,SOME/IP格式解析,服务发现(SD)机制及状态机,以及序列化与反序列化过程。

目录

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

 

零基础理解AUTOSAR中SOME/IP工作原理 深入浅出解析SOME/IP在AUTOSAR软件开发中的作用机制,帮助初学者理解通信协议的核心逻辑与实现方式,掌握autosar软件开发的关键环节。 阅读详情

相关推荐

SOME/IP 详解系列(2)—— 报文格式

SOME/IP详解系列第二篇——报文格式

Life_I的博客 5204

车载以太网 - SOME/IP简介

SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的层4之上。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。 在车载网络中,某

usstmiracle的博客 2万+

someip协议详解

SOME/IP-SD是SOME/IP的一种特殊服务,主要用于:确定服务实例的位置(IP地址、通信协议、端口号等)、检测服务实例的状态(是否正在运行)、执行服务发布/订阅的操作SOME/P-SD提供了两种动态服务发现的机制。一种是Ofer Service,由server向别人告知它所提供的服务;另一种是Find Service ,由client向别人请求可用的服务。

qq_43222917的博客 2692

someip协议概述

SomeIP (Scalable service-Oriented Middlewareover IP) 是车载以太网的一种通信协议。对于熟悉CAN通信的开发者而言,CAN通信一般属于周期或者触发的形式在总线上传输的,而SOMEIP则不同,它是在接收方有需求的时候才发送,他是一种以服务为导向的数据。

xinyuan510214的专栏 1万+

【vSomeIP3 教程】深入理解SOME/IP服务配置:从基础到高级特性的完整指南

本文介绍了SOME/IP协议在汽车领域的应用及其服务配置方法。第1章阐述了SOME/IP作为车载以太网中间件协议的核心特性,包括服务发现、远程调用等功能,并详细讲解了服务ID、实例ID的规范及JSON格式配置文件的结构。第2章重点分析了基于TCP的可靠通信模式配置,涵盖端口设置、连接管理机制等关键技术点,为构建稳定可靠的车载通信系统提供了实践指导。全文通过表格化对比和代码示例,系统性地呈现了SOME/IP服务配置的完整知识体系。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 494

conda环境的复制、备份操作

请确保将 source_env 替换为你要复制的现有环境的名称,并将 target_env 替换为你要创建的新环境的名称。要备份一个Conda虚拟环境,你需要将环境的配置信息和依赖包列表保存起来,以便在需要的时候能够重新创建相同的环境。要将现有的 conda 环境复制为其他环境,可以使用 conda create 命令并克隆已存在的环境。

Dollhan的博客 3771

SomeIP 协议

someip协议

weixin_44723188的博客 9244

游戏资源解包神器NSCB实战:手把手教你提取Switch游戏视频(nsm转MP4)

本文详细介绍了如何使用NSCB工具链从Switch游戏中提取nsm视频和hca音频资源,并将其转换为可编辑的MP4和MP3格式。通过NSC Builder、CriPakTools等工具的分步操作指南,帮助内容创作者高效获取游戏资源,同时提供音视频同步合成、批量处理等高级技巧,为创意素材制作提供完整解决方案。

weixin_29197835的博客 882

一文了解什么是SOME/IP协议(超详细)

SOME/IP 在CAN总线的车载网络中,通信过程是面向信号的 当ECU的信号的值发生了改变,或者发送周期到了,就会发送消息,而不考虑接收者是否需要,这样就会造成总线上出现不必要的信息,占用了带宽 而SOME/IP的出现就是为了解决这一问题,它和CAN网络发送机制不同,它是接收者有需要时才会发送,避免了无效信息对总线造成的影响 SOME/IP Scalable service-Oriented MiddlewarE over IP,通过网络提供面向服务的通信,不能写作Some/IP等 既然SOME/IP是

jasonj333 5万+

【寄存器模型】一、一个简单的寄存器模型

在描述寄存器模型之前,首先来了解一下实际寄存器的组成结构:如下图所示的DUT内部真实的寄存器寄存器中最小的一个单位是域(field),域是由一个或多个bit拼接而成的。一个或多个域就构成了一个寄存器(reg)。一个或多个寄存器就构成了一个块(block)。将DUT中的寄存器抽象出来,建立寄存器模型,如下图所示:uvm library已经定义好了field、reg、block等相关的概念,构建寄存器模型时,只需要继承这些类即可。:构建寄存器模型中的域段。uvm_reg。...

carrotbanana的博客 5368

Ubuntu20.04系统Cuckoo sandbox所需环境搭建及安装(超详细图文)

请勿叫我大神,我只是互联网的搬运工~ 前言 本教程以Ubuntu20桌面版作为示范,服务器版同样适用,但可能稍微麻烦一点,服务器版本的话安装Xmanage套装使用可能会相对轻松一些,由于后面会使用到vbox的使用,对vbox命令行操作不熟悉的小伙伴用xmanage可能会相对轻松一点。 提示:以下是本篇文章正文内容,下面案例可供参考 安装ubuntu20桌面版 步骤1:转到https://ubuntu.com/download/desktop下载下载.iso。 步骤2:使用您选择的虚拟机监控程序(VMWa

ElsonHY的博客 1万+

什么是SOME/IP?

汽车以太网通信SOME/IP 介绍,官方文档翻译

jackhh1的博客 9124

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1986

深入浅出理解SOME/IP

SOME/IP,全称为Scalable service-Oriented MiddlewarE over IP,是用于控制消息的汽车中间件解决方案,是一种面向服务的可伸缩的协议。SOME/IP于2011年由BMW设计,2014年纳入AUTOSAR规范。 SOME/IP的报文格式如下图所示,由消息头部(Header)和消息体(Payload)组成,Header主要包括以下字段: Message ID,用于唯一标识消息,当消息为Method类型时,由Service ID和Method ID组成,当消

usstmiracle的博客 2万+

RenderDoc实战:5分钟搞定安卓Vulkan应用抓帧(含常见连接失败排查)

本文详细介绍了如何使用RenderDoc工具对安卓Vulkan应用进行抓帧分析,包括环境配置、完整抓帧流程及常见连接问题的解决方案。通过实战案例和高级技巧,帮助开发者快速定位渲染问题和性能瓶颈,提升移动图形开发效率。

weixin_28318011的博客 281

一文搞懂蚁群算法Ant Colony Optimization(ACO)!!!(灵感起源+数学原理+代码实现+实战应用)

本文系统介绍了蚁群算法的原理与实现。首先从蚂蚁觅食行为出发,阐释了信息素正反馈机制如何引导群体找到最短路径。随后详细解析了算法的数学模型,包括状态转移规则和信息素更新机制。通过MATLAB代码演示了算法在旅行商问题(TSP)中的应用,展示了路径构建和优化的完整流程。最后讨论了算法的优势、局限性和实际应用场景。蚁群算法通过模拟生物智能,为解决复杂优化问题提供了一种高效方法,其核心在于信息素的正反馈机制与随机探索的平衡。

qq_42212808的博客 887

SOME/IP-SD规范中,对 服务(Service) 和 实例(Instance)的理解

AUTOSAR SOME/IP-SD规范中,服务(Service)与实例(Instance)是服务发现机制的核心概念。服务是逻辑功能单元,由16位Service ID唯一标识,定义功能接口但不涉及具体实现;实例是服务的具体提供者,由Service ID和16位Instance ID共同标识,包含实际网络地址和配置参数。这种设计实现了功能与实现的解耦,支持负载均衡、冗余备份和动态扩展。通过服务发现协议,消费者只需指定所需功能,系统即可动态匹配最优实例,满足现代汽车电子系统对灵活性、可靠性和可扩展性的要求。

weixin_42108533的博客 1436

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2278

SOME/IP-SD报文中 Option Format(选项格式)-理解笔记1

摘要:SOME/IP-SD协议中的选项(Options)机制通过模块化设计实现服务发现功能。选项分为IPv4端点(0x04)、配置选项(0x01)、负载均衡(0x02)和IPv4 SD端点(0x24)等类型,分别承担网络寻址、配置说明、负载分配和代理寻址等功能。所有选项都包含Length、Type和Flags通用头部,其中可丢弃标志(Discardable Flag)决定选项的必要性。这种设计实现了信息解耦、复用和扩展,通过"条目+选项"的分工协作,有效支持车载网络的动态服务发现需求。(

weixin_42108533的博客 1215

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SOME/IP-SD报文中 Entry Format(条目格式)-理解笔记3

SOME/IP SD协议是汽车电子系统中实现动态服务发现的核心机制。它通过SD报文(包含报头、条目和选项)实现设备间的高效通信: 核心功能:支持服务提供者广播服务(Offer)、消费者查找服务(Find)和订阅事件(Subscribe) 关键设计:采用条目(指令)与选项(详情)分离的结构,优化网络带宽;通过TTL心跳机制实现服务状态自动检测 交互流程:典型场景如车门状态订阅,涵盖服务宣告、订阅请求、确认及数据推送全过程 优势:动态自治、高效组播、松耦合架构,满足汽车电子系统对实时性和可靠性的严苛要求 该协议

weixin_42108533的博客 1205

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SOME/IP-SD报文中 Entry Format(条目格式)-理解笔记2

高效率 (Efficiency)批量处理:一个“邮包”能塞进很多封“信”,减少了很多次发送邮包的开销。避免重复:通过“共享附件”,100家公司可以共用一个地址,而不是写100遍,极大节约了“墨水”(网络带宽)。灵活性 (Flexibility)两种“信件”类型清晰分离,管理服务和管理订阅互不干扰。“共享附件”和“独有附件”的设计,既能处理普遍情况,又能应对特殊需求。可靠性 (Reliability)TTL机制:就像公告会过期一样,服务状态和订阅状态都需要持续的心跳来确认。

weixin_42108533的博客 711

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SOME/IP-SD报文中 Entry Format(条目格式)-理解笔记1

SOME/IP-SD条目是服务发现报文的核心设计,旨在通过结构化数据高效传递多种服务信息。主要分为服务条目和事件组条目:前者管理服务状态(上线/下线),后者处理事件订阅。创新性的"选项运行"机制通过共享配置信息(如IP/端口)大幅减少冗余数据。条目支持批量处理,允许将多条发现信息打包到单条报文中,配合TTL超时机制实现状态同步,显著提升车载网络的传输效率和实时性。这种设计在功能丰富性和传输效率间取得了精妙平衡。

weixin_42108533的博客 917
上一篇: 自动驾驶中轨迹规划的探索和挑战
下一篇: 关于DoIP 协议的理解
AgingMoon
博客等级 码龄9年 3966粉丝 61原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值