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 值域&…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
