IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 详解SOME/IP协议文档-1 -> 正文阅读

[网络协议]详解SOME/IP协议文档-1

以下内容来源于AutoSar官网的AUTOSAR_PRS_SOMEIPProtocol文档

SOME/IP

什么是SOME/IP

SOME/IP,全称Scalable service-Oriented MiddlewarE over IP,基于IP的可扩展的面向服务的中间件

  • 基于IP的

基于TCP/IP通信协议

  • 可扩展的

不拘泥于某一个系统,可以用在多个系统上运行

  • 面向服务的

是直接为应用软件所使用的

  • 中间件

程序

所以SOME/IP是一套用TCP/IP协议帮助不同平台上的分布式应用软件互相传递信息的机制

说白了,就是把服务接口里的内容通过SOME/IP这一套规则打包,交给TCP/IP传输

服务可以是多个事件、方法和字段的组合

三种通信机制

事件Event

单向数据传输,仅在更改或循环时调用,从数据的提供者发送到订阅者

事件提供了从提供者到订阅者的循环发送变化的数据

由此可见,事件是订阅者对提供者提出订阅后,提供者把订阅的数据通过循环发送或变化时发送这两种方式,发送给订阅者

方法Method

被调用的方法、函数或子例程

方法为订阅者提供了在提供者端执行远程过程调用的可能性

订阅者如果想让提供者执行某个函数方法,就可以SOME/IP中的方法实现

字段Field

一个字段代表一个状态,getter、setter和notifier可以对其进行操作

  • getter

订阅者可以调用getter来获取提供者的值/状态

  • setter

订阅者可以调用setter来更改提供者端的值/状态

  • notifier

订阅者可以调用notifier让提供者把变化的数据发送给订阅者

Event和Field notifier的区别,notifier在订阅后会发送一个当前值

SOME/IP首部格式

SOME/IP是建立在TCP/IP协议上的应用层协议机制,对接上面的应用软件的服务接口,它有自己的协议首部

Message ID

4个字节,用来识别应用程序的方法或事件

所以Message ID由Service ID(16 bit)和Method ID(15 bit)组成,前者表示应用,后者表示方法或事件

  • 当Method ID表示方法时,bit16为0

  • 当Method ID表示事件时,bit16为1

Eventgroup,服务内部字段的事件和通知事件的逻辑分组,以允许订阅

举例来说,当你想用SOME/IP来远程控制汽车娱乐音响系统里的音乐播放器播放下一首歌时,音乐播放器就是用Service ID表示,而切换到下一曲的动作就是Method ID

由此看出

Message ID对于整个系统来说是唯一的

Length

4个字节,它是从Request ID到Payload的字节长度

注意,不包括Message ID和Length本身

Request ID

4个字节,用来区分订阅者和提供者之间的同一个方法、事件、getter或setter的多个并行使用

什么意思

当你前后两次远程控制音乐播放器切换到下一曲时,两次的Request ID是不同的,需要加以区分

准确来说,其实是Request ID里的Session ID来区分

Request ID由Client ID(2个字节)和Session ID(2个字节)组成

  • Client ID

2个字节,Client ID是订阅者的的唯一标识,提供者用Client ID区分调用同一方法的多个订阅者

比如汽车方向盘控件可以控制娱乐音响系统的音乐播放器切换到下一曲,后排的控制面板也可以控制它,那么就可以用不同的Client ID区分它们

所以,每个Client ID在整个车辆中应该是唯一的

  • Session ID

2个字节,用来区分同一发送者的连续请求或消息

既然Client ID是车辆中唯一的,而每次请求的Session ID又不能相同,所以Request ID对于提供者来说是唯一的

提供者在生产响应消息时,应该把Request ID复制到响应消息中,这样订阅者收到后可以根据Request ID判断这是哪条请求的响应

在响应到达之前,订阅者不得重用Request ID

由于提供者只需要在响应中复制Request ID,所以它并不需要提前知道Client ID

对于Session ID,还有一些注意点

如果会话处理未激活,Session ID应该设置为0x0000

这里我的理解是,比如按方向盘上的切换到下一曲的按键,如果对于方向盘来说,这个动作如果由于故障等原因未生效,那么这个Session ID就设置为0x00

如果会话处理处于激活状态,Session ID应设置为0x0001-0xFFFF范围内的值

如果会话处理处于激活状态,Session ID应根据各自的用例递增

这里我的理解是,比如按方向盘上的切曲按键,每按一次,Session ID就加1

当Session ID达到最大值0xFFFF时,它应该从0x0001重新开始

从这里能看出,如果Session ID为0x0000时,提供者并不会对这个请求作出反应

如果响应的Session ID与请求的Session ID不匹配,订阅者必须忽略这个响应

Protocol Version

1个字节,用来表示SOME/IP首部的格式

对于SOME/IP协议首部中的改动,Protocol Version应该增加,但是对于payload中格式的改变,Protocol Version不应该增加

Interface Version

1个字节,用来表示服务接口版本

Message Type

1个字节,用于区分不同类型的消息

当没有错误发生时,常规请求(Message Type = 0x00)应由响应(Message Type = 0x80)回复,如果发生错误,则应回复错误消息(Message Type = 0x81)

也可以发送没有响应消息的请求(Message Type = 0x01)

对于TP消息来说,Message Type的第三个高位要设置为1,以表示这个SOME/IP是一个segment,所以0x00对应0x20

这里我不理解segment是什么意思

Return Code

1个字节,用来表示请求是否已成功处理

SOME/IP的首部布局是请求和响应通用的,这表示请求消息也有Return Code,只是它的值是0x00

下图是响应消息的Return Code

响应的Return Code

以上是SOME/IP的部分内容,看完别忘了点个赞


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:47:35  更:2021-08-10 13:48:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:18:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码