SOME/IP 协议介绍(二)

1. SOME/IP header

出于互操作性的原因,所有SOME/IP的实现都应具有相同的标头布局如图1中显示。字段按传输顺序呈现,即左上方的字段首先进行传输。在接下来的章节中,将描述不同的标头字段及其用途。

图片

1.1. IP地址/端口号

图1中的布局显示了在IP和所使用的传输协议上的基本头部布局。这种格式也可以很容易地在AUTOSAR中实现。有关套接字处理的详细信息,请参阅AUTOSAR Socket Adaptor SWS。

1.1.1. IP地址和端口的映射

对于响应和错误消息,传输协议的IP地址和端口号应与请求消息相匹配。这意味着:

  • 响应的源IP地址 = 请求的目标IP地址。

  • 响应的目标IP地址 = 请求的源IP地址。

  • 响应的源端口 = 请求的目标端口。

  • 响应的目标端口 = 请求的源端口。

  • 传输协议(TCP或UDP)保持不变。

1.1.2. 消息ID [32位]

消息ID是一个32位标识符,用于将RPC调用分派给应用程序的方法并标识通知。消息ID必须能够唯一标识一个方法。

消息ID的分配由用户自行决定;然而,消息ID必须在整个系统(即车辆)中是唯一的。消息ID可以最好地与CAN ID进行比较,并应使用类似的处理过程进行处理。下一节将描述如何构造消息ID的结构,以便简化消息ID的组织。

1.1.2.1. 消息ID的结构

为了对不同的方法和事件进行结构化,它们被分组成服务。服务包括一组方法和事件,以及一个仅用于该服务的服务ID。事件还可以被分组成事件组,以简化事件的注册过程。
对于RPC调用,我们将ID结构化为2^16个服务,每个服务有2^15个方法:

Service ID [16 Bit]

0 [1 Bit]

Method ID [last 15 Bit]

使用16位的服务ID和以0位开始的16位的方法ID,这样可以支持最多65536个服务,每个服务最多有32768个方法。

由于事件(参见通知或发布/订阅)使用RPC进行传输,因此事件的ID空间进一步进行了结构化:

Service ID [16 Bit]

0 [1 Bit]

Event ID [last 15 Bit]

1.2. 长度 [32 位]

Length是一个32位字段,包含以请求ID/客户端ID开头的有效载荷的字节长度。长度不包括包含消息ID和长度字段的头部部分,因为它基于AUTOSAR Socket Adaptor的功能

1.3. 请求ID [32位]

请求ID允许客户端区分对同一方法的多个调用。因此,请求ID必须在单个客户端和服务器组合中是唯一的。在生成响应消息时,服务器必须将请求ID从请求复制到响应消息中。这使得客户端可以将响应映射到已发出的请求,即使存在多个未完成的请求。

请求ID可能在响应到达或不再预期到达(超时)后被重新使用。在大多数汽车应用场景中,预计只会有很少数量的未完成请求。对于没有并行请求可能性的小型系统,请求ID可能始终设置为相同的值。
对于AUTOSAR系统,请求ID需要按照下一节所示的结构进行组织。即使对于非AUTOSAR系统,建议按照下一节所示的方式对调用者的客户端ID进行编码。

1.3.1. 请求ID的结构

在AUTOSAR中,请求ID由客户端ID和会话ID构成:

Client ID [16 Bits]

Session ID [16 Bits]

客户端ID是ECU内部调用客户端的唯一标识符。会话ID是由客户端为每个调用选择的唯一标识符。如果不使用会话处理,会话ID应设置为0x0000。

1.4. 协议版本号 [8位]

协议版本是一个8位字段,包含当前的SOME/IP协议版本,应设置为0x01。

1.5. 接口主版本号 [8位]

接口主版本号是一个8位字段,包含服务接口的主版本号。
原因:这是为了捕获服务定义中的不匹配,并且如果使用版本号,它允许调试工具识别使用的服务接口。

1.6. 消息类型 [8位]

消息类型字段用于区分不同类型的消息,可以包含以下值:

Number

Value

Description

0x00

REQUEST

请求 - 期望获得响应(即使是void)

0x01

REQUEST_NO_RETURN

请求无返回 - 一次性请求

0x02

NOTIFICATION

通知 - 请求通知/事件回调,不期望有响应

0x40

REQUEST ACK

请求确认 - REQUEST(可选)

0x41

REQUEST_NO_RETURN ACK

请求无返回确认 -  REQUEST_NO_RETURN(信息性)

0x42

NOTIFICATION ACK

通知确认 - NOTIFICATION(信息性)

0x80

RESPONSE

响应 - 响应消息

0x81

ERROR

错误 - 响应包含错误信息

0xC0

RESPONSE ACK

响应确认 - RESPONSE(信息性)

0xC1

ERROR ACK

错误确认 - ERROR(信息性)

常规请求REQUEST(消息类型0x00)在没有错误发生时将由响应消息RESPONSE(消息类型0x80)进行回答。如果发生错误,将发送错误消息ERROR(消息类型0x81)。还可以发送没有响应消息的请求REQUEST_NO_RETURN(消息类型0x01)。对于通过通知NOTIFICATION进行值更新,存在一个回调接口(消息类型0x02)。

对于所有的消息,都存在可选的确认(ACK)。这些可以在传输协议(例如UDP)不确认接收到的消息的情况下使用。只有当接口规范要求时,才会传输ACK。目前,本文档仅指定了使用REQUEST_ACK。所有其他ACK目前仅作为信息提供,无需实现。

1.7. 返回码 [8位]

返回码用于指示请求是否成功处理。为了简化头部布局,每个消息都传输返回码字段。
类型为REQUEST、REQUEST_NO_RETURN和Notification的消息必须将返回码设置为0x00(E_OK)。特定消息类型的允许返回码如下:

Message Type

Allowed Return Codes

REQUEST

N/A (无需设置)设置为0x00 (E_OK)

REQUEST_NO_RETURN

N/A (无需设置)设置为0x00 (E_OK)

NOTIFICATION

N/A (无需设置)设置为0x00 (E_OK)

RESPONSE

详细的描述将在后面的博客中介绍

ERROR

详细的描述将在后面的博客中介绍,不得为0x00 (E_OK)

确认消息类型应从待确认的消息中复制返回码。

1.8. 负载 [可变大小]

参数被携带在负载字段中。参数的序列化将在下一部分中进行规定。
负载字段的大小取决于所使用的传输协议。在UDP中,负载大小可以在0到1400字节之间。将负载限制为1400字节是为了允许将来对协议栈进行更改(例如切换到IPv6或添加安全手段)。由于TCP支持负载的分段,因此自动支持更大的大小。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第二十九章 目标检测中的测试模型评价指标(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 介绍 自动驾驶的一大前提是保证人的安全…

「Verilog学习笔记」求两个数的差值

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1ns module data_minus(input clk,input rst_n,input [7:0]a,input [7:0]b,output reg [8:0]c );always (posedge clk or negedge rst_n) begin if (~rst_…

计算机基础知识48

web应用程序 # Django框架是一款专门用来开发web应用的框架 # Web应用程序是一种可以通过浏览器访问的应用程序, B/S架构 案例:淘宝网、京东网... # 应用程序有两种模式: C/S:客户端/服务器端程序,这类程序一般独立运行 B/S&#xff1…

解析几何@平面上点到直线的距离@点到平面的距离@空间中点到直线的距离

文章目录 平面上点到直线的距离点到平面的距离小结 角平分面问题例 点到直线的距离 平面上点到直线的距离 设坐标平面上有点 P ( x 1 , y 1 ) P(x_1,y_1) P(x1​,y1​)和直线 l : A x B y C 0 l:AxByC0 l:AxByC0, A , B A,B A,B不全为0点 P P P到直线 l l l的的距离的算法推…

最新AI系统ChatGPT源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画+搭建部署教程+附源码

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

Linux学习之vim跳转到特定行数

参考的博客:《Vim跳到最后一行的方法》 《oeasy教您玩转vim - 14 - # 行头行尾》 《Linux:vim 中跳到首行和最后一行》 想要跳到特定行的话,可以在命令模式和正常模式进行跳转。要是对于vim的四种模式不太熟的话,可以到博客《Linu…

It Is All About Data: A Survey on the Efects of Data on Adversarial Robustness

It Is All About Data: A Survey on the Effects of Data on Adversarial Robustness----《这一切都关乎数据:关于数据对对抗性鲁棒性影响的调查》 摘要 对抗性示例是攻击者故意设计的机器学习模型的输入,目的是迷惑模型,使其犯错误。这些例…

RxJava/RxAndroid的操作符使用(二)

文章目录 一、创建操作1、基本创建2、快速创建2.1 empty2.2 never2.3 error2.4 from2.5 just 3、定时与延时创建操作3.1 defer3.2 timer3.3 interval3.4 intervalRange3.5 range3.6 repeat 二、过滤操作1、skip/skipLast2、debounce3、distinct——去重4、elementAt——获取指定…

Leetcode-LCR 021 删除链表的倒数第 N 个结点

快慢指针,快指针先移动n-1个节点后,慢指针从虚拟头结点出发(相当于快慢指针相隔n个节点),快慢指针一起向链表尾依次移动一个结点,当快指针移动到表位时,慢指针正好移到被删除元素的前一个结点&a…

采用springboot 2.7.10来操作clickhouse

1、采用springboot与clickhouse结合&#xff0c;其实和操作mysql&#xff0c;oracle区别不大。直接上代码开干 2、所采用的环境 jdk1.8 springboot 2.7.10 clickhouse 22.8.3.13 clickhouse 0.5.0 3、项目的pom.xml文件 <dependency><groupId>com.clickhous…

使用matlab实现图像信号的色彩空间转换

利用matlab对图像信号进行读取&#xff0c;并对RGB空间进行转换&#xff0c;如转换到HSI空间等。 下面的这个代码是在使用了rgb2hsi()方法失败后&#xff0c;进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像&#xff1b;但是爆出了 Untitled5(line 5)hsi rgb2h…

解决IDEA使用卡顿的问题

*问题&#xff1a;使用IDEA的时候卡顿 原因&#xff1a;IDEA默认分配的内存有上限 **可以查看内存分配情况及使用情况__ 解决&#xff1a; 设置JVM的启动参数&#xff1a; 进入idea的安装目录的bin文件夹 -Xms1024m -Xmx2048m -XX:ReservedCodeCacheSize1024m -XX:UseG1G…

【Java】IntelliJ IDEA使用JDBC连接MySQL数据库并写入数据

目录 0 准备工作1 创建Java项目2 添加JDBC 驱动程序3 创建数据库连接配置文件4 创建一个 Java 类来连接和操作数据库5 运行应用程序 在 IntelliJ IDEA 中连接 MySQL 数据库并将数据存储在数据表中&#xff0c;使用 Java 和 JDBC&#xff08;Java Database Connectivity&#xf…

抓包工具fiddler的基础知识详解

一、简介 fiddler是位于客户端和服务端之间的http代理 1、作用 监控浏览器所有的http/https流量查看、分析请求内容细节伪造客户端请求和服务器请求测试网站的性能解密https的web会话全局、局部断电功能第三方插件 2、使用场景 接口调试、接口测试、线上环境调试、web性能分…

论文速览 | TRS 2023: 使用合成微多普勒频谱进行城市鸟类和无人机分类

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 论文速览 | TRS 2023: Urban Bird-Drone Classification with Synthetic Micro-Doppler Spectrograms 原始论文:D. White, M. Jahangir, C. J. Baker and M. Antoniou, “Urban Bird-Drone…

IBM Qiskit量子机器学习速成(一)

声明&#xff1a;本篇笔记基于IBM Qiskit量子机器学习教程的第一节&#xff0c;中文版译文详见&#xff1a;https://blog.csdn.net/qq_33943772/article/details/129860346?spm1001.2014.3001.5501 概述 首先导入关键的包 from qiskit import QuantumCircuit from qiskit.u…

文心一言 VS 讯飞星火 VS chatgpt (131)-- 算法导论11.2 3题

三、用go语言&#xff0c;Marley 教授做了这样一个假设&#xff0c;即如果将链模式改动一下&#xff0c;使得每个链表都能保持已排好序的顺序&#xff0c;散列的性能就可以有较大的提高。Marley 教授的改动对成功查找、不成功查找、插入和删除操作的运行时间有何影响? 文心一…

助力青少年学习,亚马逊云科技2024年全球人工智能和机器学习奖学金计划正式启动

云未来将以何种方式发展&#xff1f;方向握在意气风发的少年们手中。近日&#xff0c;亚马逊云科技全球人工智能和机器学习&#xff08;AI和ML&#xff09;奖学金计划在中国区的首次颁奖以及2024年启动仪式在北京中学正式举行&#xff0c;有45名学子凭借杰出的学业成绩、对人工…

打开pr提示找不到vcomp100.dll无法继续执行代码怎么办?5种dll问题解决方案全解析

vcomp100.dll是一个由Microsoft开发的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它对于许多基于图形的应用程序&#xff08;如Photoshop&#xff09;和多个游戏&#xff08;如《巫师3》&#xff09;至关重要。以下是关于vcomp100.dll的属性介绍以及找不到vcomp100…

Qt工程打包工具 windeployqt 的用法

1.复制工程下的“Debug”或者“Release”文件夹到你喜欢的路径&#xff0c;例如&#xff1a;D:\QT_out\ 2.在操作系统“开始”选项找到“Qt”文件夹&#xff0c;打开“Qt 5.15.2&#xff08;MSVC 2019 64-bit&#xff09;” 重点&#xff1a; 这里要注意的是&#xff0c;一定…