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 TP -> 正文阅读

[网络协议]SOME/IP TP

此文标准来源于AUTOSAR_SWS_SOMEIPTransportProtocol.pdf(R21-11)

1. 前言

SOME/IP – Scalable service-Oriented MiddlewarE over IP,基于IP的可扩展面向服务中间件;
SWS – Software specification,软件规范;

2. 简介

SOME/IP TP规范包含功能API配置。其主要任务是对SOME/IP数据包进行分段/分包/分片,在接收端的数据重组
SOME/IP TP的限制:没有实现重试机制,不能对接收到的SOME/IP段进行重新排序。主要是为了节约接收方运行时间和内存资源。
SOME/IP TP与其他模块的依赖关系

  • AUTOSAR PDU Router: 将PduR用于两个方向,即传输路径和接收路径。
  • AUTOSAR 默认错误跟踪程序: 为了能够报告开发错误,SOME/IP TP模块必须能够访问默认错误跟踪程序的错误挂钩。

3. 功能规范

SOME/IP TP模块与PDU路由器进行双向交互,如下图所示:
模块位置

3.1 SOME/IP报文分段

3.1.1 字段定义

注:当TP Flag为1时,才会有offset、RES、其他标志;
SOME/IP报文格式,如下图所示:
SOME/IP报文格式
TP Flag位置,如下图所示:
TP标志位置
offset: 28bit,根据之前发送/接收的SOME/IP段的有效载荷长度,在每个发送/接收段之后,包含的值增加;该字段以16进制为单位。
示例:若offset = 92, 表示当前已传输1472个有效负载字节数。
保留字段: 3bit,应该置为0。
More Segments: 1bit,表示是否还有分段数据。

3.1.2 分段示例

5571字节的有效负载,将被分割为5个连续的SOME/IP段,原始数据如下所示:
8+5571长度报文
分段后的头设置,如下图所示:
分段报文信息
分片后的报文

3.2 SOME/IP分段发送

3.2.1 分段大小

  • 每个分段的SOME/IP消息的大小应由SOME/IP报头的12个字节和有效负载字节本身组成;
  • 分段SOME/IP消息的每个有效负载(最后一个除外)必须是16字节的倍数(最后一段可能由奇数有效载荷或不可以被16分割的有效载荷组成);

3.2.2 SOME/IP头

上层需要接收字段值,如下所示:

  • Request ID [32 bit]
  • Protocol Version [8 bit]
  • Interface Version [8 bit]
  • Message Type [8 bit]
  • Return Code [8 bit]
    什么叫做计算值、衍生值、导出值?

SOME/IP TP模块添加字段值,如下所示:

  • Offset [28 bit]
  • Reserved bits [3 bit]
  • More Segment Flag [1 bit]

若SOME/IP报文不需要分段,则直接使用SOME/IP原始报文的头部;
第一个分段的offset = 0;
保留位应静态设置为 000;
除最后一个段的More Segments标志为0,其余分段的More Segments都为1;

3.2.3 SOME/IP段发送

发送数据前,应该检测数据是否已经分段结束;
发送数据前,应该进行数据长度检测,保证数据长度符合传输要求,否则应该进行分段处理;
发送数据前,应该检测是否按照最大可能大小进行分段;
发送多个数据段时,应以相同的时间间隔,去除发送数据包时的乱序与抖动;

3.2.4 分段终止

若PDU ID被占用,不应该继续进行当前段的分解,并抛出相应的错误码;
若是可用缓冲区不满足如下条件,分段将被终止:

  • 大于或等于16字节;
  • 大于分段大小空间使用要求;
    若发送第一个分段数据失败,则应该停止当前分段行为,并抛出响应错误码;

3.3 SOME/IP分段组装

收到最后一个分段后,应该做接收完成的应答;
接收到分段信息后,应提取下列信息:

  • 请求ID[32位]
  • 协议版本[8位]
  • 接口版本[8位]
  • 消息类型[8位]
  • 返回码[8位]
  • 偏移量[28位]
  • 保留位[3位]
  • 更多段标志[1位]
    接收到未分段的消息后,应提取下列信息:
  • 请求ID[32位]
  • 协议版本[8位]
  • 接口版本[8位]
  • 消息类型[8位]
  • 返回码[8位]

应该对分段报文、未分段报文做合理的管理

3.3.1 offset = 0

接收到首段数据后,应将重组相关的字段数据做管理;
接收到首段数据后,应该设置端接收超时时钟;
接收到首段数据后,应该为后续数据的接收分配合理的空间;
数组组装完成后,应该先将SOME/IP报头信息传给SOME/IP TP上层,后将组装的SOME/IP消息的有效载荷传给SOME/IP TP上层,第一包数据内容如下:

  • 请求ID[32位]
  • 协议版本[8位]
  • 接口版本[8位]
  • 消息类型[8位]-参见[SWS_SomeIpTp_00028]
  • 返回码[8位]

在将组装好的SOME/IP报头传递给用户之前,SOME/IP TP模块应将消息类型中包含的TP标志设置回“0”;
SOME/IP TP模块应分别存储已传递到上层的每个PDU ID的有效负载字节数;

3.3.2 offset > 0

如果在偏移量字段大于0的情况下成功接收到某个/IP段,则某个/IP TP模块应将接收到的某个/IP头字段与第一个段接收到的存储的某个/IP头字段的值进行比较(即偏移量设置为0):

  • 请求ID[32位]
  • 协议版本[8位]
  • 接口版本[8位]
  • 消息类型[8位]
  • 返回码[8位]
    若是接收报文信息吻合,应重启接收的超时计时器,继续后续数据的接收;
    每接收一个分段,都应该将有效负载长度与报文头的长度字段做比较;
    如果Offset Field value>0,则只向上层提供有效负载字节(也就是说第一个段接收后要传递SOME/IP头信息,后续段只传有效数据);
    接收到尾段后,应关闭接收超时计时器,并将有效负载数据传递到上层;

3.3.3 组装终止

当接收超时时,应终止当前的数据重组,并抛出相应错误信息;
当在没有重组任务时,接收到非首段的分段数据,该数据应该被忽略,并抛出相应错误信息;
当模块检测到错误时,应返回接收错误信息,并重置接收超时计时器;
常见的中断原因,列举如下:

  • 开启数据接收后,且会话一直保持活动状态,如接收数据的TP Flag为1;
  • 同一个分段数据的报头信息不一致;
  • 若非首段数据的有效负载长度值不可以被16整除;
  • 长度字段与有效负载长度值不一致;
  • 接收字段的顺序不正确;
  • 报文存储空间申请失败;
  • 建立会话连接失败;

3.4 错误分类

开发错误,如下图所示:
开发错误
运行错误,如下图所示:
运行错误

4. API规范

这是AUTOSAR自己的代码实现,若不需要可以不看。

4.1 导入类型

导入类型

4.2 类型定义

类型定义

4.3 函数定义

1.版本信息获取(SomeIpTp_GetVersionInfo)
版本信息获取
2.初始化(SomeIpTp_Init)
初始化
3.数据传输(SomeIpTp_Transmit)
数据传输
此接口,必须在初始化接口之后调用;

4.4 回调函数

1.触发回调(SomeIpTp_TriggerTransmit)
触发回调
如果给定的PduInfoPtr->SDULENGHT小于SOME/IP-TP段的计算大小(考虑报头和有效载荷)。
2.消息到来(SomeIpTp_RxIndication)
消息回调
3.接收确认(SomeIpTp_TxConfirmation)
接收确认

4.5 预定功能

1.发送函数(SomeIpTp_MainFunctionTx)
发送函数
2.接收函数(SomeIpTp_MainFunctionRx)
接收函数

4.6 外部接口

1.强制接口
外部接口1
外部接口2

2.选项接口
错误通报

3.配置接口

5. 时序图

1.接收时序图
接收时序图
2.发送时序图
发送时序图

6.配置规范

参考文章

AUTOSAR官网

如有错误,欢迎指正,也欢迎相互交流学习,本人属于菜鸡。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:14:59  更:2022-05-10 12:15:40 
 
开发: 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年5日历 -2024/5/19 9:08:52-

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