SOME/IP 协议详解——信息格式
文章目录
- 1. 头部格式
- 1.1 消息 ID(Message ID)
- 1.2 长度(Length)
- 1.3 请求 ID(Request ID)
- 1.4 协议版本(Protocol Version):
- 1.5 接口版本(Interface Version)
- 1.6 消息类型(Message Type):
- 1.7 返回码(Return Code)
- 1.8 效载荷(Payload):
- 2. 事件、字段和事件组
- 3. 字节序(Endianess)
1. 头部格式

在采用端到端(E2E)通信保护时,E2E 头部放置位置的相关规定。其位置取决于所选的 E2E 头部偏移值,默认偏移值为 64 位,此时 E2E 头部会准确处于返回码和有效载荷之间(如下图所示),这样的安排旨在让 E2E 通信保护功能与 SOME/IP 协议结构兼容,保障端到端通信的可靠性和安全性,常用于汽车电子系统等场景下关键数据传输中。

出于互操作性考虑,SOME/IP 所有实现的头部布局要相同,且其字段按传输顺序呈现,左上角的字段最先传输。
1.1 消息 ID(Message ID)
- 消息 ID 是 32 位的标识符,用于识别应用程序的 RPC 调用或事件。
- 消息 ID 的分配由用户决定,但在整个系统中必须是唯一的,它类似于 CAN ID,处理过程类似。
- 方法调用的消息 ID 应按照特定结构组织,该结构包含 2¹⁶个服务和 2¹⁵个方法,如下图:

1.2 长度(Length)
- SOME/IP 消息中的长度字段(Length field)应包含从请求 ID / 客户端 ID 开始到 SOME/IP 消息末尾的字节长度。
1.3 请求 ID(Request ID)
-
请求 ID 的结构(Request ID [32 Bit])
- 在 AUTOSAR 环境中,请求 ID 由客户端 ID(Client ID)和会话 ID(Session ID)组成,各 16 位,如下图所示。

- 客户端 ID 是调用客户端在内部的唯一标识符,允许 ECU 区分来自多个客户端的请求。
- 会话 ID 是用于区分来自同一发送方的顺序消息或请求的唯一标识符。
- 客户端 ID 还可以通过可配置的前缀或固定值在整个车辆中保持唯一,如下图所示。

- 在 AUTOSAR 环境中,请求 ID 由客户端 ID(Client ID)和会话 ID(Session ID)组成,各 16 位,如下图所示。
-
请求 ID 的使用规则
- 请求 ID 应当是提供商 - 订阅者组合唯一(即一个订阅),不能被重复使用直到响应到达或确定响应不会再到达(超时)。
- 当生成响应消息时,提供商应当从请求复制请求 ID 到响应消息,这允许订阅者将响应映射到发出的请求。
-
会话 ID 的处理规则(根据不同场景)
- 当会话处理不活跃时,会话 ID 应设置为 0x00。
- 当会话处理活跃时,会话 ID 应在相应的用例中递增,并在达到 0xFFFF 时回绕到 0x01。
- 对于请求 / 响应方法,订阅者应忽略会话 ID 不匹配的响应。
- 对于通知消息,当会话处理不活跃时,接收者应忽略会话 ID;当会话处理活跃时,接收者应根据相应用例对待会话 ID。
1.4 协议版本(Protocol Version):
-
协议版本的定义和位置
- 协议版本用于识别所使用的 SOME/IP 头部格式(不包括有效载荷格式),它是一个 8 位字段,包含了 SOME/IP 协议版本信息。
- 协议版本本身是 SOME/IP 头部的一部分,其在头部中的位置不能改变。
-
协议版本的递增规则
- 当 SOME/IP 头部有不兼容的更改时,协议版本必须递增。如果接收方基于旧版本的协议,不会丢弃消息并错误地处理它。
- 协议版本不应因仅影响有效载荷格式的更改而递增。
-
当前协议版本
- 当前的协议版本应为 1。
1.5 接口版本(Interface Version)
- 版本标识功能
- 接口版本字段是一个 8 位的标识符,其主要功能是用于标识服务接口的主版本号(Major Version of the Service Interface)。这有助于在不同的服务接口之间进行区分,尤其是在软件系统不断更新和迭代的过程中。
1.6 消息类型(Message Type):

-
消息类型的定义和区分
- 消息类型字段是一个 8 位的字段,用于区分不同类型的消息。其可能包含的值在上图中列出。
- 例如,0x00 表示 REQUEST(请求一个期望有响应的操作,即使响应为空),0x01 表示 REQUEST_NO_RETURN(请求一个不期望有响应的操作),0x02 表示 NOTIFICATION(请求一个通知 / 事件回调,不期望有响应)等。
-
请求与响应的对应关系
- 正常的请求消息(消息类型 0x00)在无错误发生时应得到一个响应消息(消息类型 0x80)。如果发生错误,则发送一个包含错误的响应消息(消息类型 0x81)。
- 也可以发送不期望有响应的请求消息(消息类型 0x01)。对于通过通知回调机制进行的更新,存在消息类型 0x02。
-
TP - Flag 的设置
- 消息类型的第 3 高位(=0x20)应被称为 TP - Flag,并且当当前 SOME/IP 消息是一个分段消息时,应将其设置为 1。消息类型的其他位按照本节中的规定设置。
- 例如,消息类型请求(0x00)的消息类型为(0x20),消息类型响应(0x80)的消息类型为(0x20)等。
1.7 返回码(Return Code)
- 返回码为 8 位,用于表示一个请求是否被成功处理。为了简化头部布局,每个消息都会传输返回码字段。
- 不同的消息类型有不同的允许返回码:

1.8 效载荷(Payload):
- 有效载荷的作用
- 有效载荷(Payload)字段用于携带参数。参数的序列化将在后续章节中详细说明。
- 有效载荷大小的限制
- SOME/IP 有效载荷的大小取决于所使用的传输协议。
- 当使用 UDP 作为传输协议时,SOME/IP 有效载荷的大小应在 0 到 1400 字节之间。这种限制是为了允许协议栈在未来进行更改(例如,切换到 IPv6 或添加安全机制)。
- 由于 TCP 支持有效载荷的分段,因此使用 TCP 时可以自动支持更大的有效载荷。
- 有效载荷的内容
- 有效载荷可能包含用于事件的数据元素或用于方法的参数。
2. 事件、字段和事件组
- 事件组的定义和用途
- 事件组(Eventgroup)是对服务内的事件和字段通知事件进行逻辑分组,以便允许订阅。
- 事件和通知的传输方式
- 事件和通知通过 RPC(远程过程调用)进行传输。事件的结构应如下:

- 事件和通知通过 RPC(远程过程调用)进行传输。事件的结构应如下:
- 事件 ID 的结构
- 上图展示了事件 ID 的结构,它由服务 ID(16 位)、1 位标志和事件 ID(最后 15 位)组成。
- 事件组的使用规则
- 不能使用空的事件组。
- 事件和字段至少要映射到一个事件组。
3. 字节序(Endianess)
- SOME/IP 头部的字节序
- SOME/IP 头部应按照网络字节序(大端序)进行编码。
- 有效载荷内部参数的字节序
- 有效载荷内部参数的字节序应由配置来定义。
相关文章:
SOME/IP 协议详解——信息格式
文章目录 1. 头部格式1.1 消息 ID(Message ID)1.2 长度(Length)1.3 请求 ID(Request ID)1.4 协议版本(Protocol Version):1.5 接口版本(Interface Version&am…...
C# GDI+数码管数字控件
调用方法 int zhi 15;private void button1_Click(object sender, EventArgs e){if (zhi > 19){zhi 0;}lcdDisplayControl1.DisplayText zhi.ToString();} 运行效果 控件代码 using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using …...
在交叉编译中,常见的ELF(elf)到底是什么意思?
ELF 是 Executable and Linkable Format 的缩写,中文翻译为“可执行与可链接格式”。它是一种通用的文件格式,主要用于存储可执行文件、目标文件(编译后的中间文件)、动态库(.so 文件)以及内存转储文件&…...
Unity开发AR之Vuforia-MultiTarget笔记
前言 在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTar…...
深入解析 Oracle 的聚合函数 ROLLUP
目录 深入解析 Oracle 的聚合函数 ROLLUP一、ROLLUP 函数概述二、ROLLUP 函数语法三、ROLLUP 实例详解(一)基础分组聚合(二)引入 ROLLUP 函数(三)ROLLUP 与 NULL 值(四)多列复杂分组…...
Wend看源码-Java-集合学习(List)
摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构:List、Set和Queue。本文将详细阐述这些数据类型的各自实现,并按照线程安全性进行分类,分别介绍非线程安全与线程安全的实现方…...
【软件】教务系统成绩提交工具使用步骤
【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...
IPsec协议,网络安全的秘密
IPsec概述 IPsec是一组基于网络层的安全协议,是保护IP数据包在网络传输过程中保持安全、隐秘以及真实。通过对IP数据包进行一些加密、认证,来防止数据在传输过程中被窃取、篡改甚至伪造,IPsec在企业内部网络的通信、远程办公、云服务连接等场…...
浅谈下Spring MVC的执行流程
什么是Spring MVC Spring MVC是一个基于Java的Web框架,用于构建Web应用程序。 它是Spring Framework的一部分,它提供了模型-视图-控制器(MVC)架构。 支持RESTful风格的URL请求,易于与其他视图技术集成,如…...
khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像
khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像 一、资源准备1.1 镜像文件1.2 刷机工具1.3 ubuntu20.04 docker镜像(具备demon无人机所需各种驱动) 二、开始刷机(安装ubuntu22.04系统)2.1 进入刷机状态2.2 刷机 三、docker…...
GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)
目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期,许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…...
主成分分析是线性降维方法
主成分分析是线性降维方法 主成分分析(PCA)是一种常用的线性降维方法。它通过线性变换将原始数据映射到新的坐标系中,使得数据在新坐标系中的第一个坐标(第一个主成分)具有最大的方差,以此类推,…...
Webpack在Vue CLI中的应用
webpack 作为目前最流行的项目打包工具,被广泛使用于项目的构建和开发过程中,其实说它是打包工具有点大材小用了,我个人认为它是一个集前端自动化、模块化、组件化于一体的可拓展系统,你可以根据自己的需要来进行一系列的配置和安…...
继承超详细介绍
一 、继承 1 继承的概念 继承是面向对象程序设计使得代码可以复用的最重要手段,它使得我们可以在原有类的特性的基础上进行扩展,增加方法和属性(成员函数与成员变量),这样产生新的类,叫作派生类。继承呈现了…...
wordpress调用指定ID分类下浏览最多的内容
要在WordPress中调用指定ID分类下浏览最多的内容,你可以通过以下方法实现: <?php $post_num 8; // 设置调用条数 $wdpidproduct 2; // 假设这是你要查询的分类ID $args array(post_password > ,post_status > publish, // wodepress.comca…...
18.springcloud_openfeign之扩展组件二
文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定 对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持MatrixVariablePathVariableRequestParamRequestHeaderSpringQueryMapRequestPartCookieValue FormattingConversi…...
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
最近给单位部署了freepbx网络电话系统,我的系统是安装在ibm x3650 m4物理机上的,iso镜像下载后直接用Rufus烧录到U盘,服务器上先做好了raid1,插上U盘重启服务器开撸。安装过程略过了,在虚拟机上安装就不用那么麻烦。 …...
运算符 - 算术、关系、逻辑运算符
引言 在编程中,运算符是用于执行特定操作的符号。C 提供了多种类型的运算符,包括算术运算符、关系运算符和逻辑运算符等。理解这些运算符及其用法对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的这三种基本运算符,并通过实例帮助读…...
大模型-ChatGLM2-6B模型部署与微调记录
大模型-ChatGLM2-6B模型部署与微调记录 模型权重下载: 登录魔塔社区:https://modelscope.cn/models/ZhipuAI/chatglm2-6b 拷贝以下代码执行后,便可快速权重下载到本地 # 备注:最新模型版本要求modelscope > 1.9.0 # pip insta…...
RDFS—RDF模型属性扩展解析
目录 前言1. 什么是RDFS?1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类(Class)2.2 属性(Property)2.3 关系(Relation)2.4 定义域(Domain)2.5 值域&…...
PaddleX印章识别实战:5分钟搞定Seal-Recognition模型部署(附避坑指南)
PaddleX印章识别实战:从零部署到高效应用的完整指南 印章识别在合同审核、公文归档等场景中需求旺盛,但传统方案往往面临部署复杂、适配困难等问题。PaddleX推出的Seal-Recognition模型通过预训练产线低代码API的方式,让中小团队也能快速获得…...
如何在ComfyUI中智能合成视频序列:VHS_VideoCombine节点的专业应用方案
如何在ComfyUI中智能合成视频序列:VHS_VideoCombine节点的专业应用方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 面对AI生成的大量图像序列&…...
BetterJoy终极指南:让Switch手柄在Windows上完美运行
BetterJoy终极指南:让Switch手柄在Windows上完美运行 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/g…...
【JAVA基础面经】深拷贝与浅拷贝
文章目录基本概念浅拷贝深拷贝重写 clone() 方法实现深拷贝使用序列化实现深拷贝使用复制构造函数或工厂方法基本概念 浅拷贝:创建一个新对象,然后将原对象的非静态字段(基本类型和引用类型)直接复制到新对象中。对于引用类型字段…...
OpenClaw 入门完整教程:从零搭建自托管AI网关
OpenClaw入门到实战:自托管AI网关完整部署指南 作者:鲲鹏AI探索局 | 标签:OpenClaw, AI Agent, 自托管, 多平台聊天, 网关部署 摘要 本文详细介绍OpenClaw——一个开源自托管AI网关的安装、配置和实战部署全过程。通过实际案例演示如何连接T…...
当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?
想象一下,你有一座藏书万卷的图书馆,但你找书的方式只有一种——记住每本书某个页面的关键词,然后靠"猜"来定位。 这,就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG,被顶会EMNLP 2025接收…...
原神高帧率解锁终极方案:一键突破60帧限制的完全指南
原神高帧率解锁终极方案:一键突破60帧限制的完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想象一下这样的场景:你在蒙德的原野上自由奔跑,角…...
【技术解析】SimpleNet:用极简网络架构革新工业图像异常检测
1. 工业图像异常检测的现状与挑战 工业生产线上的质检环节一直是个让人头疼的问题。想象一下,你站在一条每分钟生产上百件产品的流水线旁,需要肉眼检查每个产品表面是否有划痕、凹陷或污渍——这几乎是不可能完成的任务。传统计算机视觉方法在这个领域已…...
毕业设计实战:基于Java+MySQL的教务管理系统设计与实现指南
毕业设计实战:基于JavaMySQL的教务管理系统设计与实现指南 在开发“基于JavaMySQL的教务管理系统”毕业设计时,曾因课程报名表未通过学生ID与课程ID双外键关联踩过关键坑——初期仅设计报名编号、报名时间等基础字段,未与学生表、课程表建立关…...
Gitee团队协作实战:从零到一掌握项目协同开发流程
1. 为什么选择Gitee进行团队协作开发 作为一个经历过多次团队协作开发的老手,我强烈推荐Gitee作为国内团队的代码托管平台。相比其他平台,Gitee的服务器在国内,访问速度更快,而且完全符合国内开发者的使用习惯。记得我第一次带团队…...
