SOME/IP 协议详解——信息格式

news2024/12/25 21:33:18

文章目录

  • 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 还可以通过可配置的前缀或固定值在整个车辆中保持唯一,如下图所示。
      在这里插入图片描述
  • 请求 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(远程过程调用)进行传输。事件的结构应如下:
      在这里插入图片描述
  • 事件 ID 的结构
    • 上图展示了事件 ID 的结构,它由服务 ID(16 位)、1 位标志和事件 ID(最后 15 位)组成。
  • 事件组的使用规则
    • 不能使用空的事件组。
    • 事件和字段至少要映射到一个事件组。

3. 字节序(Endianess)

  • SOME/IP 头部的字节序
    • SOME/IP 头部应按照网络字节序(大端序)进行编码。
  • 有效载荷内部参数的字节序
    • 有效载荷内部参数的字节序应由配置来定义。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用QML实现播放器进度条效果

使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下: Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…

Android——自定义按钮button

项目中经常高频使用按钮,要求:可设置颜色,有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…

【双指针算法】--复写零(Java版)

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

联合目标检测与图像分类提升数据不平衡场景下的准确率

联合目标检测与图像分类提升数据不平衡场景下的准确率 在一些数据不平衡的场景下,使用单一的目标检测模型很难达到99%的准确率。为了优化这一问题,适当将其拆解为目标检测模型和图像分类模型的组合,可以更有效地控制最终效果,尤其…

HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化

与传统标准动态范围( SDR)视频相比,高动态范围( HDR)视频由于比特深度的增加提供了更加丰富的亮区细节和暗区细节。最新的显示技术通过清晰地再现 HDR 视频内容使得为用户提供身临其境的观看体验成为可能。面对目前日益…

LabVIEW声音信号处理系统

开发了一种基于LabVIEW的声音信号处理系统,通过集成的信号采集与分析一体化解决方案,提升电子信息领域教学与研究的质量。系统利用LabVIEW图形化编程环境和硬件如USB数据采集卡及声音传感器,实现了从声音信号的采集到频谱分析的全过程。 项目…

OpenCL(壹):了解OpenCL模型到编写第一个CL内核程序

目录 1.前言 2.简单了解OpenCL 3.为什么要使用OpenCL 4.OpenCL架构 5.OpenCL中的平台模型(Platform Model) 6.OpenCL中的内存模型(Execution Model) 7.OpenCL中的执行模型(Memory Model) 8.OpenCL中的编程模型(Programmin Model) 9.OpenCL中的同步机制 10.编写第一个OpenCL程序…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件,它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏(AppBar)、内容区域(body)、抽屉菜单(Drawer)、底部导…

【数据结构】数据结构整体大纲

数据结构用来干什么的?很简单,存数据用的。 (这篇文章仅介绍数据结构的大纲,详细讲解放在后面的每一个章节中,逐个击破) 那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢&#xff…

搭建Elastic search群集

一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 场景

在 12 月 4 日,链原生的 Web3 AI 数据网络 Chainbase 正式启动了 Chainbase AVS 主网,同时发布了首批 20 个 AVS 节点运营商名单。Chainbase AVS 是 EigenLayer AVS 中首个以数据智能为应用导向的主网 AVS,其采用四层网络架构,其中…

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

生信软件开发2 - 使用PyQt5开发一个简易GUI程序

往期文章: 生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件 1. 使用PyQt5设计一个计算器主程序 要求PyQt5 > 5.6, calculator.py与MainWindow.py处于同一目录,下载mainwindow-weird.ui和mainwindow.ui资源,运行calculator.py即…

“计算几何”简介

计算几何(Computational Geometry)简单来说就是用计算机解决几何问题。 Computational指“using or connected with computers使用计算机的;与计算机有关的”,Geometry指“the branch of mathematics that deals with the measur…

TowardsDataScience 博客中文翻译 2018~2024(一百二十三)

TowardsDataScience 博客中文翻译 2018~2024(一百二十三) 引言 从 2018 年到 2024 年,数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台,记录了从基础工具到前沿技术的多方面发展。…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

今天最新早上好问候语精选大全,每天问候,相互牵挂,彼此祝福

1、朋友相伴,友谊真诚永不变!彼此扶持绿树荫,共度快乐雨后天!一同分享的表情,愿我们友情长存,一生相伴永相连! 2、人生几十年,苦累伴酸甜,风华不再茂,雄心非当…

Verdi -- 打开Consol,创建和执行tcl命令举例

1.Verdi打开Console的步骤: For ref: 2创建tcl脚本. tcl脚本路径: 在Makefile下,与.v文件在同一个目录8_demo这个文件夹下。 font.tcl代码内容: verdiSetFont -monoFont "Courier" -monoFontSize "24" 作用…

基于java博网即时通讯软件的设计与实现【源码+文档+部署讲解】

目 录 1. 绪 论 1.1. 开发背景 1.2. 开发意义 2. 系统设计相关技术 2.1 Java语言 2.2 MySQL数据库 2.3 Socket 3. 系统需求分析 3.1 可行性分析 3.2 需求分析 3.3 系统流程图 3.4 非功能性需求 4. 系统设计 4.1 系统功能结构 4.2 数据库设计 5. 系统实现 5.…

视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点

随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展&#xff0…