文章目录

    • 前言
    • SOME/IP概念
    • SOME/IP协议格式
    • SOME/IP功能介绍
      • 序列化
        • 序列化规则
      • 发布和订阅
      • 服务发现(SOME/IP-SD)
      • SOME/IP-TP协议使用场景
        • SOME/IP-TP协议
    • 参考文章:

前言

本文介绍了SOME/IP协议的具体内容,包括报文格式,协议选择、序列化、服务发现等。同时介绍了SOME/IP-TP协议。

SOME/IP概念

SOME/IP是一种汽车中间件解决方案,SOME/IP全称:Scalable service-Oriented MiddlewarE over IP(位于IP协议蹭之上的一种面向服务的可扩展的中间件),是一种基于以太网的协议,提供面向服务的接口。由宝马集团在2011年设计开发,并在2014年集成进AUTOSAR4.X中。并且是唯一已知的集成到AUTOSAR 4.x版本中的中间件。

SOME/IP协议是在IP层之上的,属于应用层协议。

画板

为什么需要SOME/IP?

  • 传统汽车协议的局限性:传统的汽车协议如 CAN、MOST、LIN 和 Flexray 等,存在带宽有限的问题,难以满足现代汽车日益增长的高数据传输需求。基于IP网络,SOME/IP能够利用现有的IP网络基础设施,提供服务发现、描述、配置以及调用等功能
  • SOME/IP的可扩展性:SOME/IP能够实现不同硬件平台,不同操作系统或嵌入式固件之间的可扩展和互操作

SOME/IP协议格式

SOME/IP协议由消息头(header)和数据段(payload)组成。

  1. message ID是唯一的。前16位标识服务,后16位标识方法
    1. 对于Method,Method ID的第一位为0, 对于Event,Method ID的第一位为1

  1. Length(32 bit)标识后续的Request ID到payload的字节长度。
  2. Request ID(32 bit)由2个字节的Client ID 和2个字节的Session ID组成。Client ID用于区分使用同一Method的不同客户端,session ID由数据的发送方每发送一次数据+1,从0x1加到0xffff后,从1重新开始,用于区分每一条消息

client ID只有两个字节,能够同时支持多少客户端?支持65536个

  1. Protocol Version协议版本号,目前该值为1
  2. Interface Version接口版本号,一般由服务者提供者定义
  3. Message Type 用于标识消息的类型,例如ErrorREQUEST, RESPONSE

  1. Return Code用来标识请求是否被处理
  2. payload长度可变,携带的是真正的数据

说明:

SOME/IP报文可以选择UDP或者TCP进行传输。使用UDP时一般payload大小在0~1400字节,大于1400字节时,应当使用TCP对负载分段。

对于TCP和UDP的选择并非强制,一般来说要求低时延用UDP,数据大用TCP

要求低时延且数据大可以用UDP结合SOME/IP-TP。后文会详细介绍SOME/IP-TP

SOME/IP功能介绍

SOME/IP支持的中间件功能:序列化、远程过程调用、服务发现、发布与订阅。

序列化

序列化指的是讲数据结构或对象按照事先定义的规则转换成可存储、可传输的线性字节流或特定格式文本(如 JSON、XML)的过程。与之相反的逆过程称为 “反序列化(Deserialization)

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

SOME/IP 不自动插入填充字节,若需对齐(如 32 位数据对齐到 4 字节地址),需用户在结构体定义时显式添加保留字段

序列化规则

SOME/IP 不自动插入填充字节,若需对齐(如 32 位数据对齐到 4 字节地址),需用户在结构体定义时显式添加保留字段

SOME/IP序列化与反序列采用LTV(Length-Type-Value)格式来进行的。并且Value中包含因字节对齐的填充

LTV的规则并非需要严格遵守

数据类型是否严格遵守 LTV说明类比
所有基本类型 (uint8, int32, float64, boolean)只有 V。L 和 T 由接口定义隐含。就像 C 语言中的 struct { int a; char b; }
,成员位置和大小固定。
字符串、数组、结构体、联合体必须包含显式的 L(长度字段)。T 可能显式(联合体)或隐含。就像网络协议中的 TLV 或 JSON 中的 {"key": "value"},需要自描述性。

同时为了兼容性,还可以新增一个两字节的Tag在序列化中。是否使用带Tag的序列化,取决于对应ARXML文件中的配置。当使用带有tag的序列化时,即使发送方新增结构体的成员,旧版本的接收方也可以安全跳过不认识的字段,从而实现兼容。

举例如下:

  1. ECU A(软件版本 1.0)向 ECU B 发送一个结构体VehicleData,包含speedrpm两个成员。
  2. 后来,软件升级了。ECU A 更新到版本 2.0,VehicleData结构体增加了一个新成员 gearECU B 没有升级(还是版本 1.0),它收到来自版本 2.0 的 VehicleData 消息时,遇到gear对应的tag,会自动跳过解析这个字段。

发布和订阅

画板

  1. Method方法(请求/响应交互模式)
    1. Request/Reponse客户端发送请求,服务端应答
    2. Fire/Forget 客户端发送请求,服务端不需要应答
  2. Event事件(事件通知模式)
    1. 单项数据传输,client订阅Server服务,Server发布信息到Client(当数据变化时才发送,适合实时状态监控,告警通知等)
  3. Field字段(远程属性访问模式)
    1. 分为Notifier、Getter、Setter,分别表示Server向Client主动发送消息、client向server请求数据,以及Client修改Server的数据

一些区别:

  • Method:是客户端主动发起的 “请求 - 响应”(如 “查询当前车速”),只需知道服务地址即可直接调用,无需提前订阅;
  • Event 和 Field中的notifier:Event是服务端主动推送的 “通知”(如 “车速超过 100km/h 时自动推送警告”), Field中的notifier是客户端必须先通过 SD 服务告知服务端 “我需要接收这些通知”,服务端才会针对性推送。
  • Field和Event的区别:Field是一个持续存在的变量,如多媒体音量、车速、环境温度等。这些可以在任何时刻获取;而Event指的是一个事件,事件没有就不发生,比如发生碰撞、出现故障等

服务发现(SOME/IP-SD)

SOME/IP-SD(Service Discovery)是 SOME/IP 协议中用于服务发现的一种机制,允许网络中的客户端动态地发现和定位服务实例。

SOME/IP-SD服务只能采用UDP的两点原因:

  1. SD服务需要进行组播,而TCP协议是点对点协议,无法进行组播;
  2. SD服务往往需要快速广播或组播通知,UDP无连接特性更适合这种场景

功能:

  • 定位服务实例:帮助在车载网络中确定服务实例的位置,虽然在车载网络中服务实例的位置通常是已知的,但 SOME/IP-SD 仍能提供更准确和动态的定位信息。
  • 检测服务实例状态:能够检查服务实例的运行状态,及时了解服务是否可用。
  • 实现发布 / 订阅处理:支持发布 / 订阅模式,使得消息仅发送给对其感兴趣的接收者,提高了通信效率和灵活性。

工作原理:

  • 初始等待阶段:服务提供者和客户端在启动后,会等待一段时间(在 InitialDelayMin 和 InitialDelayMax 之间随机)再发送第一条 SD 消息,以避免启动时的网络拥塞,允许节点在网络中稳定后再进行通信。
  • 重复阶段:服务提供者和客户端按照固定的时间间隔(如 100ms 的倍数)重复发送 SD 消息,加快两者之间的同步速度,确保服务信息的及时更新。
  • 主阶段:服务提供者进入周期性发送 Offer Service 消息的阶段,客户端则根据需求发送 Find Service 消息,实现服务的持续发现和动态管理,确保客户端能够及时获取到最新的服务信息。

消息格式:

  • 传输协议:SOME/IP-SD 消息通过用户数据报协议(UDP)发送。
  • 服务 ID:固定为 0xFFFF,表示这是一个服务发现相关的消息。
  • 方法 ID:固定为 0x8100。
  • 长度字段:使用由 SOME/IP 指定的 uint32 长度字段,该字段从长度字段之后的第一个字节开始,一直到 SOME/IP-SD 消息的最后一个字节结束。
  • 客户端 ID:应设置为 0x0000。

SOME/IP-TP协议使用场景

由于TCP协议需要连接过程,因此针对低时延的数据传输,往往采用UDP传输数据。而使用UDP传输大数据时,例如4M数据。由于UDP头部的长度采用2字节记录,因此UDP报文的最大长度约为64K。但其实在数据链路层MTU的长度为1500字节,除去头部占用的字节,大概真正携带的数据有1400多字节。因此超过这个字节数就会被IP层被动分片。而采用UDP传输时,由于无重传机制等,任意一个分片丢失都将会导致UDP这次传输的数据全部不可用,这是无法接受的。因此在使用UDP传输时,一般由应用层主动分片,并配有序号、校验、重传的机制。这也是SOME/IP-TP、QUIC等应用层协议处理UDP的思路

SOME/IP-TP协议

当SOME/IP协议携带的数据超过1400字节时,在UDP下会使用TP协议,此时Message Type中的TP-Flag会置1,会增加一个4字节的数据,表示数据在整个数据中的偏移量offset以及是否是最后一个分片。

该4字节的具体含义如下:

  1. offset : 28位,后四位为0,表示该数据起始在整个数据中的偏移
  2. RES: 3位,为0,保留位
  3. More Segment Flag: 表示是否是最后一个分片,不是最后一个分片为1,最后一个分片为0。

一个分片的数据长度最多为1392字节,超过则需要分片。因为Length后面还有8个字节的头部信息。

参考文章:

  1. https://www.some-ip.com/details.shtml
  2. https://blog.csdn.net/m0_62923342/article/details/150599620
  3. https://zhuanlan.zhihu.com/p/24101929809
  4. AUTOSAR_PRS_SOMEIPProtocol

如果本文对您有帮助,还麻烦您点一个免费的赞!如果 有错误也欢迎向我反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/99095.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/99095.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/99095.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 核心知识全解析:从类加载到垃圾回收的深度认知

什么是JVM? JVM全称(Java Virtual Machine),中译为:Java虚拟机 本质:是一个运行在计算机上的程序 职责:运行Java字节码文件(因为计算机只能认识机器码文件,所以需要JVM将…

Keepalived 负载均衡

Keepalived 负载均衡 Keepalived 可以与 LVS(Linux Virtual Server)结合,提供强大的四层负载均衡功能。它通过 IPVS(IP Virtual Server)内核模块实现高性能的负载分发。 核心组件 Virtual Server:虚拟服务器…

拷打DeepSeek实现自动生成差分电荷计算文件和后处理

差分电荷(charge density difference)是材料模拟中分析电子结构变化的直观工具。 它把成键后的真实电荷密度减去成键前各碎片叠加的电荷密度,得到一张“电子迁移地图” 于是可以一眼看出化学键形成时电子从哪里来到哪里去,表面吸…

AI问答-Nuxt4:什么时候发布的,有哪些特性,和Nuxt3相比 有哪些优势 / Nuxt4 / Nuxt-v4

Nuxt 4于2025年7月至8月期间正式发布,作为Nuxt框架的重大版本更新,其核心聚焦于稳定性提升、开发者体验优化及性能增强,与Nuxt 3相比,优势体现在项目结构、数据获取、类型系统、开发工具链等多个层面。一、Nuxt 4 发布时间线测试阶…

isinstance()和insubclass()

​​isinstance() 和 issubclass() 的功能与用法​​​​1. isinstance(obj, classinfo)​​​​功能​​:检查对象 obj 是否是 classinfo 类(或其子类)的实例。 ​​返回值​​:True 或 False。 ​​用法​​:class A…

判断QMetaObject::invokeMethod()里的函数是否调用成功

今天,在Qt编程,碰到一个需要使用invokeMethod方式来获取函数是否执行成功的情况。     invokeMethod()即可以同步调用,也可以异步调用。若调用者、被调用者,都在同一个线程,则是同步调用;若调用者、被调用…

【linux】特殊权限

us对文件:用户执行该文件时,会以文件所有者的权限运行chmod us filename # 符号模式 chmod 4755 filename # 数字模式(4表示SetUID)典型应用:/usr/bin/passwd(允许普通用户修改自己的密码,…

OpenCV:指纹识别

目录 一、核心算法 1:SIFT 特征提取(尺度不变特征变换) 1.1 算法原理(4 步核心流程) 1.2 重点代码实现与参数解析 1.3 关键输出解读 二、核心算法 2:FLANN 特征匹配(快速最近邻搜索&#x…

快速排序:高效的分治排序算法

快速排序因其平均时间复杂度$O(n\log n)$而成为广泛应用的高效排序算法。其核心是分治法: 选择基准 (Pivot):从待排序序列中选取一个元素(如第一个元素$arr[0]$)。 分区 (Partition):将序列重新排列,所有小于基准的元素置于其前,大于或等于的置于其后。基准元素最终位于…

网络编程之UDP广播与粘包问题

一,广播简介从上述讲的例⼦中,不管是TCP协议还是UDP协议,都是”单播”, 就是”点对点”的进⾏通信,如果要对网络里面的所有主机进⾏通信,实现”点对多”的通信,我们可以使用UDP中的⼴播通信。 理论上可以像…

教育领域大模型生成题目安全研究报告

教育领域大模型生成题目安全研究报告 一、研究背景与意义 随着大语言模型(LLM)在教育领域的深度应用,自动生成题目已成为提升教学效率、实现个性化教学的关键技术手段,广泛应用于课堂练习、作业布置、考试命题等场景。然而&…

Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡

Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡好的,我们来详细梳理一下 Android 开发中 Gradle 的常用配置和调试命令。这对于每一位 Android 开发者来说都是必须掌握的核心技能。第一部分:Gradle 与 Gr…

Maven入门_简介、安装与配置

ZZHow(ZZhow1024) 参考课程: 【尚硅谷新版Maven教程】 [https://www.bilibili.com/video/BV1JN411G7gX] 一、Maven简介 02_依赖管理工具 解决 jar 包的规模问题解决 jar 包的来源问题解决 jar 包的导入问题解决 jar 包之间的依赖 03_构建工具 我们没有注意过…

Spark(1):不依赖Hadoop搭建Spark环境

不依赖Hadoop搭建Spark环境0 概述1 单机安装Spark1.1 下载Spark预编译包1.2 解压和设置1.3 配置环境变量1.4 验证安装2 Spark运行模式2.1 Local模式(本地模式)2.1.1 Spark Shell2.1.1.1 Python版的Shell2.1.1.2 Scala版的Shell2.1.2 提交独立的Spark应用…

【ThreeJs】【自带依赖】Three.js 自带依赖指南

🛠️ Three.js 辅助库生态手册 定位:覆盖 90% 开发场景的工具选型实操指南,区分「入门必备」和「进阶扩展」。 适用人群:Three.js 新手(≥ r132 版本)、需要规范开发流程的团队。 1. 控制器(Co…

Mac电脑上如何打印出字体图标

背景 我今天打开了一个之前开发的APP,看到项目中用到了字体图标,发现有个“面条”图标用错了,想着修改一下吧。然后用输入法打出”面条“,在输入法的弹窗中就一直往下找,发现并没有出现图标。 想着打出”面条图标“也没…

当AI遇上数据库:Text2Sql.Net如何让“说人话查数据“成为现实

一句话概括:还在为写复杂SQL而头疼?Text2Sql.Net让你用自然语言就能查数据库,堪称程序员的"数据库翻译官"! 🎯 引言:从"SQL地狱"到"自然语言天堂" 想象一下这样的场景&…

整体设计 之 绪 思维导图引擎 之 引 认知系统 之8 之 序 认知元架构 之4 统筹:范畴/分类/目录/条目 之2 (豆包助手 之6)

问题Q68、我们现在仅仅分析了 认知演进 的 “进”的问题,通过层次结构 和 统筹 的同构约束 给出了 不同对象及其对应的操作和约束。 --这句话 你能完全理解吗(这意味着 完整的程序细节设计)。 还没有分析的还有 “演” 以及组合词 “演进” -…

开始 ComfyUI 的 AI 绘图之旅-Qwen-Image-Edit(十二)

文章标题一、Qwen-Image-Edit1.ComfyOrg Qwen-Image-Edit 直播回放2.Qwen-Image-Edit ComfyUI 原生工作流示例2.1 工作流文件2.2 模型下载3.3 按步骤完成工作流一、Qwen-Image-Edit Qwen-Image-Edit 是 Qwen-Image 的图像编辑版本,基于20B模型进一步训练&#xff0c…

机械制造专属ERP:降本增效与数字转型的关键

转型升级压力下,ERP系统是机械企业破局的得力助手。本文深入解析ERP的核心功能、选型要点与实施价值,助您精准选型,赋能智能制造,全面提升竞争力。在数字化浪潮席卷之下,机械制造企业正面临提质、增效、降本的关键转型…