SOME/IP SD 协议介绍(二) SOME/IP-SD消息格式

SOME/IP-SD消息格式

通用要求

服务发现消息应通过UDP进行支持。准备将服务发现消息传输到TCP中以供将来使用情况。服务发现消息应以SOME/IP头开始,如图1所示:
• 服务发现消息应使用0xFFFF的Service-ID(16位)。
• 服务发现消息应使用0x8100的Method-ID(16位)。
• 服务发现消息应使用SOME/IP指定的uint32长度字段。这意味着长度以字节为单位,并从长度字段后的第一个字节开始,直到SOME/IP-SD消息的最后一个字节结束。

• 服务发现消息应具有Client-ID(16位),并根据SOME/IP规则进行处理。

• 服务发现消息应具有Session-ID(16位),并根据SOME/IP要求进行处理。

  • 每发送一条SOME/IP-SD消息,Session-ID(SOME/IP头部)应递增。

• 服务发现消息应具有0x01的Protocol-Version(8位)。

• 服务发现消息应具有0x01的Interface-Version(8位)。

• 服务发现消息应具有0x02(通知)的Message Type(8位)。

• 服务发现消息应具有0x00的Return Code(8位)。

图片

SOME/IP-SD 头格式

在SOME/IP头部之后,应按照图1所示紧随其后的SOME/IP-SD头部。

SOME/IP-SD头部应以一个名为Flags的8位字段开始。

SOME/IP-SD Flags字段的第一个标志(最高位)应称为Reboot标志。

SOME/IP-SD头部的Reboot标志应在重新启动后的所有消息中设置为1,直到SOME/IP头部中的Session-ID环绕并重新从0开始。

SOME/IP-SD Flags字段的第二个标志(次高位)应称为Unicast标志,对于单播设置为1,对于多播设置为0

SOME/IP-SD头部的Unicast标志应对于请求消息和订阅消息设置为单播(即1)。

在Flags之后,SOME/IP-SD头部应具有一个称为Reserved的24位字段,直到另行通知为止,该字段设置为0。

在SOME/IP-SD头部之后,应跟随Entries数组。

在SOME/IP-SD头部的Entries数组之后,应跟随Option数组。

SOME/IP-SD头部的Entries数组和Options数组应以一个uint32长度字段作为开始,该字段计算以下数据的字节数;即Entries或Options的字节数量。

条目格式

存在两种类型的条目:用于服务的类型1条目和用于事件组的类型2条目。

类型1条目应为16字节大小,并按照图2所示的顺序包含以下字段:

• Type字段 [uint8]:编码为FindService(0x00)、OfferService(0x01)和RequestService(0x02)。

• Index First Option Run字段 [uint8]:选项数组中选项的索引。
• Index Second Option Run字段 [uint8]:选项数组中选项的索引。
• Number of Options 1字段 [uint4]:描述第一个选项运行使用的选项数量。
• Number of Options 2字段 [uint4]:描述第二个选项运行使用的选项数量。
• Service-ID字段 [uint16]:描述受SD消息影响的服务或服务实例的Service-ID。
• Instance ID字段 [uint16]:描述受SD消息影响的服务实例的Service-Instance-ID,如果是针对一个服务的所有服务实例,则设置为0xFFFF。
• Major Version字段 [uint8]:编码为服务的主要版本。
• TTL字段 [uint24]:以秒为单位描述条目的生存期。
• Minor Version字段 [uint32]:编码为服务的次要版本。

图片

类型2条目应为16字节大小,并按照图3所示的顺序包含以下字段:
• Type字段 [uint8]:编码为FindEventgroup(0x04)、Publish(0x05)和Subscribe(0x06)。
• Index First Option Run字段 [uint8]:选项数组中选项的索引。

• Index Second Option Run [uint8]:选项数组中选项的索引。

• Number of Options 1 [uint4]:描述第一个选项运行使用的选项数量。

• Number of Options 2 [uint4]:描述第二个选项运行使用的选项数量。

• Service-ID [uint16]:描述受SD消息影响的服务或服务实例的Service-ID。

• Instance ID [uint16]:描述受SD消息影响的服务实例的Service-Instance-ID,如果是针对一个服务的所有服务实例,则设置为0xFFFF。

• Reserved [uint8]:应设置为0x00。

• TTL [uint24]:以秒为单位描述条目的生存期。

• Reserved [uint16]:应设置为0x0000。

• Eventgroup ID [uint16]:传输一个事件组的ID。

图片

选项格式

为了标识选项类型,每个选项都应以以下方式开始:
• Length字段 [uint16]:指定选项的字节长度。

• 类型[uint8]:指定选项的类型。

长度字段不应包括长度字段和类型字段的长度。

配置选项

配置选项的格式应如下:

• 长度 [uint16]:应设置为配置选项占用的总字节数,不包括16位长度字段和8位类型标志。

• 类型 [uint8]:应设置为0x01。

• 保留 [uint8]:应设置为0x00。

• 配置字符串 [动态长度]:应携带配置字符串。

配置选项应基于DNS TXT和DNS-SD格式指定一组键-值对。

配置字符串的格式应以一个单字节长度字段开头,该字段描述了在此长度字段后面的字节数。

在每个字符序列之后,期望另一个长度字段和一个随后的字符序列,直到长度字段设置为0x00为止。

在长度字段设置为0x00之后,不再跟随任何字符。

一个字符序列应编码一个键和可选的值。

字符序列应包含一个等号字符("=",0x03D)来分隔键和值。

键不应包含等号字符,并且至少应为一个非空白字符。键的字符应为可打印的US-ASCII值(0x20-0x7E),不包括'='(0x3D)。

"="不应该是序列的第一个字符。

对于一个没有"="的字符序列,该键应被解释为存在。

对于以"="结尾的字符序列,该键应被解释为存在,但值为空。

在单个配置选项中支持具有相同键的多个条目。

配置选项还应用于编码主机名、服务名和实例名(如果需要)。

图3显示了配置选项的格式,图4显示了配置选项的示例。

图片

图片

负载均衡选项

负载均衡选项应使用类型0x02。

负载均衡选项应携带类似DNS-SRV记录的优先级和权重,可用于负载均衡不同的服务实例。

IPv4端点选项的格式应如下所示:

  • 长度 [uint16]:应设置为0x0005。

  • 类型 [uint8]:应设置为0x02。

  • 保留 [uint8]:应设置为0x00。

  • 优先级 [uint16]:携带此实例的优先级。

  • 权重 [uint16]:携带此实例的权重。

图5显示了负载均衡选项的格式。

图片

保护选项

保护选项应使用类型0x03。

保护选项应携带Alive-Counter和CRC,可用于保护整个消息,包括SOME/IP头。

保护选项的格式应如下所示:

  • 长度 [uint16]:应设置为0x0009。

  • 类型 [uint8]:应设置为0x03。

  • 保留 [uint8]:应设置为0x00。

  • Alive-Counter [uint32]:应设置为活动计数器的值。如果不存在活动计数器,则应在此字段中使用请求ID的值。

  • CRC [uint32]:应包含用于保护此消息的CRC多项式的值。CRC多项式应由系统部门指定。

如果SOME/IP消息中包含多个保护选项,则它们仅应覆盖它们前面的消息部分。此外,使用多个保护选项将触发可配置的开发错误。

IPv4端点选项

IPv4端点选项应使用类型0x04。

IPv4端点选项应指定使用的IPv4地址、第4层协议和第4层端口号。

IPv4端点选项的格式应如下:

• 长度[uint16]:应设置为0x0009。

• 类型[uint8]:应设置为0x04。

• 保留[uint8]:应设置为0x00。

• IPv4地址[uint32]:应将IP地址作为四个字节传输。

• 保留 [uint8]:应设置为0x00。

• L4-Proto [uint8]:应根据IANA/IETF类型设置为第4层协议(0x06:TCP,0x11:UDP)。

• L4-Port [uint16]:应设置为第4层协议的端口号。

图6显示了IPv4端点选项的格式。

图片

IPv6端点选项

IPv6端点选项应使用类型0x06。

IPv6端点选项应指定使用的IPv6地址、第4层协议和第4层端口号。

IPv6端点选项的格式应如下:

• 长度[uint16]:应设置为0x0015。

• 类型[uint8]:应设置为0x06。

• 保留[uint8]:应设置为0x00。

• IPv6地址[uint128]:应将IP地址作为16个字节传输。

• 保留[uint8]:应设置为0x00。

• L4-Proto [uint8]:应根据IANA/IETF类型设置为第4层协议(0x06:TCP,0x11:UDP)。

• L4-Port [uint16]:应设置为第4层协议的端口号。

图 7 显示了IPv6端点选项的格式。

图片

引用选项来自条目的以下字段:

使用条目的以下字段,选项被条目引用:
• Index First Option Run:对于第一个选项运行,索引到选项数组。索引0表示SOME/IP-SD数据包的第一个选项。
• Index Second Option Run:对于第二个选项运行,索引到选项数组。索引0表示SOME/IP-SD数据包的第一个选项。
• Number of Options 1:第一个选项运行的长度。长度为0表示选项运行中没有选项。
• Number of Options 2:第二个选项运行的长度。长度为0表示选项运行中没有选项。

存在两个不同的选项运行:第一个选项运行和第二个选项运行。

支持两个选项运行的原因:预期存在两种不同类型的选项:多个SOME/IP-SD条目之间共享的选项和每个SOME/IP-SD条目特有的选项。支持两个不同的选项运行是支持这两种选项的最有效方式,同时保持了数据传输格式的高效性。

每个选项运行都应引用第一个选项和该运行中的选项数量。

如果选项数量设置为零,则认为选项运行为空。

对于空的运行,索引(即Index First Option Run和/或Index Second Option Run)应设置为零。

实现应接受并处理接收到的选项运行长度设置为零且选项索引未设置为零的SD消息。

示例

图8显示了一个SOME/IP-SD PDU的示例。IP和UDP头部仅以简化形式显示。

图片


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

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

相关文章

榜单!高阶智驾冲刺10%搭载率,哪些玩家占据自研感知「高地」

得「感知」者,是智能化尤其是智能驾驶技术变革快速演进期的受益者。尤其是对于车企来说,规控自研易,感知自研难。 尤其是过去几年时间,基于机器学习和深度学习,TransformerBEV技术进一步提高对异常行为的预测准确性&am…

CHS_06.2.3.4_2+用信号量实现进程互斥、同步、前驱关系

CHS_06.2.3.4_2用信号量实现进程互斥、同步、前驱关系 知识总览信号量机制实现进程互斥信号量机制实现进程同步信号量机制实现前驱关系 知识回顾 各位同学 大家好 在这个小节中 我们要学习怎么用信号量机制来实现进程的同步互制关系 知识总览 那么 我们之前学习了互斥的几种软…

只有一台显示器,如何实现同时显示4台主机的HDMI信号?

HDMI画面分割器概述 HDMI画面分割器属于画面分割器中的一种,因为其信号接口是HDMI接口而得其名,多用于监控、多媒体、视频会议等常见的场景 HDMI画面分割器-图 HDMI画面分割器工作原理 使用硬件方式将多路HDMI信号以多种不同的模式分割显示在同一个显示…

香蕉派BPI-M7 瑞芯微RK3588 人工智能开源硬件开发板公开发售

香蕉派(Banana Pi) BPI-M7瑞芯微K3588开源硬件单板计算机公开销售,支持WiFi 6和BT5.2,硬件有3个版本:8G Ram64G eMMC, 16G Ram128 eMMC和32G Ram128 eMMC 香蕉派BPI-M7采用睿芯最新旗舰RK3588八核64位处理器,最高频率为2.4GHz, 6 TOPS NPU&…

谷歌把GenAI装进Chrome

谷歌不甘示弱,在其Chrome浏览器中引入了新的实验性生成式AI功能,以简化并为用户提供更高效的浏览体验。 值得注意的是,微软去年推出了Edge浏览器和人工智能驱动的必应搜索引擎的集成。随着Chrome M121版本的发布,谷歌打算利用最新…

2024年美赛赛前复习大纲

CC数模-优质解答 引言 数学建模是一个将数学理论和方法应用于解决现实世界问题的过程。在数学建模比赛中,学生需要运用自己的数学知识和技能,解决给定的复杂问题。这不仅是一次展示自己能力的机会,也是一次学习和成长的过程。随着比赛的临近…

Wheeltec小车的开发实录(2)

小车初步启动控制 小车终端运行l: roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch 控制终端运行(多机通讯设置后,可以不必执行这一步) export ROS_HOSTNAME192.168.224.122(控制终端ip)export R…

【Tomcat与网络8】从源码看Tomcat的层次结构

在前面我们介绍了如何通过源码来启动Tomcat,本文我们就来看一下Tomcat是如何一步步启动的,以及在启动过程中,不同的组件是如何加载的。 一般,我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat,如果…

【HarmonyOS应用开发】UIAbility实践第二部分(六)

内容接上篇 【HarmonyOS应用开发】UIAbility实践第一部分(五) 末尾含示例源码 三、UIAbility的生命周期 当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期的不同状态之间转换。 UIAbility类提供了很多回调&a…

关于字符串处理

文章目录 关于字符串处理1、取字符串的长度2、跳过前面的字符3、取字符串右边的字符4、掐头去尾5、取倒数的范围6、删左留右7、删右留左8、查找替换9、大小写转换 关于字符串处理 1、取字符串的长度 [rootlocalhost ~]#strabcd1128 #定义变量 [rootlocalhost ~]#echo ${#str}…

IEEE| IceNet《IceNet for Interactive Contrast Enhancement》论文超详细解读(翻译+精读)

学习资料: 论文题目:《IceNet for Interactive Contrast Enhancement》(用于交互式对比度增强的IceNet)原文地址:export.arxiv.org/pdf/2109.05838v2.pdf 目录 ABSTRACT—摘要 翻译 精读 I. INTRODUCTION—简介 翻…

通俗易懂三大范式

通俗易懂三大范式 第一范式说的是每个字段不可再分 第二范式说的是不能存在部分依赖(不能由联合主键的部分就可以推出其他字段,必须整个联合主键才能推出其他字段) 第三范式说的是不能存在间接依赖(A(主键)→B,B→C…

瑞_23种设计模式_工厂模式

文章目录 1 什么是工厂模式案例案例代码 2 简单工厂模式(Simple Factory)2.1 简单工厂模式的结构2.2 案例改进——简单工厂模式2.3 案例改进代码实现2.4 简单工厂模式优缺点2.5 拓展——静态工厂 3 工厂方法模式(Factory Method)★…

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…

数组与字符串深度巩固

经过再三思考觉得今天就写一篇关于数组与字符串相关的文章吧!其中字符串主要通过练习来巩固知识亦或是获得新知识。好接下来将进行我们的学习时刻了。 首先我们来思考一个问题,你真的了解数组的数组名吗?数组名真的就单单一个名字而已吗&…

Mac安装配置JDK

Mac安装配置jdk 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载jdk1.8及以上需要Oracle账号及密码 dokidoki811163.com\pass:Zywxmxbt1314… 安装jdk 双击安装包,点击.pkg,按照提示安装,配置环境之前…

微信小程序(二十八)网络请求数据进行列表渲染

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.GET请求的规范 2.数据赋值的方法 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item">&…

介绍一个超好用的API管理工具:Apipost

Apipost是一款集API调试、生成文档、Mock、测试于一体的协同工具。单个工具可以同时满足接口测试、生成/分享文档、Mock、流程测试等功能&#xff0c;还有超实用的多人多角色间实时协作的功能。将前端、后端、测试三种角色串联起来&#xff0c;从而实现工作流程无缝衔接、提高研…

【Qt】—— 项⽬⽂件解析

目录 &#xff08;一&#xff09;.pro⽂件解析 &#xff08;二&#xff09;widget.h⽂件解析 &#xff08;三&#xff09;main.cpp⽂件解析 &#xff08;四&#xff09;widget.cpp⽂件解析 &#xff08;五&#xff09;widget.ui⽂件解析 &#xff08;一&#xff09;.pro⽂…

P1083 [NOIP2012 提高组] 借教室

P1083 [NOIP2012 提高组] 借教室 题目描述 在大学期间&#xff0c;经常需要租借教室。大到院系举办活动&#xff0c;小到学习小组自习讨论&#xff0c;都需要向学校申请借教室。教室的大小功能不同&#xff0c;借教室人的身份不同&#xff0c;借教室的手续也不一样。 面对海…