Some/IP学习笔记

目录

1.概述

2.SOME/IP 报文格式

3.数据结构序列化


1.概述

        SOME/IP全称为Scalable Service Oriented MiddlewarE Over IP,是车载以太网技术中的核心内容,它为网络提供了面向服务的通信方式。一个服务可以包含0个或者多个事件(events),方法(methods)和fields。

Events提供周期性发送的数据或者有变化的数据(从provider到subscriber),单向数据传输;

Methods为subscriber提供远程调用,供subscriber端使用;

Fileds由以下组合;

  1. 从provider向subscriber发送变更数据的通知
  2. Subscriber可调用的getter,用于显示向provider提供值
  3. Subscriber想要更改provider端的值时可以调用的setter

    Filed中的通知与event的区别在于:event只会在变化时发送,通知除了上述上述功能,还会在订阅后直接发送数据。

在Autosar ECU中,SOME/IP架构如下:

下图为车载SOME/IP的通信demo:

其中,车载以太网100BASE-T1和1000BASE-T1对比如下:

100BASE-T1

1000BASE-T1

线缆类型

1对UTP

1对UTP

通信方式

全双工

全双工

编码方式

3B2T to PAM3

3B2T to PAM3

传输频率及位时间

66.666MHz/15ns

750MHz/1.33ns

传输距离

15m

15m

PoDL

支持

支持

2.SOME/IP 报文格式

        OSI七层模型中,数据从应用层到物理层经过层层封装然后传输,上三层的数据流在传输层被封装层数据段,在网络层数据段被封装成数据报,在链路层被封装为数据帧,最后在物理层编码陈比特流进行传输,如下:

        SOME/IP属于应用层,以中间件的形式为应用层和下层提供通信接口;它用于面向服务的通信,主要特点为:降低负载、兼容AUTOSAR、实现方法复用、扩展,其数据结构如下:

报文格式

解释

Message ID(Service ID)

服务的ID号,16bits,用于标识一个服务(0+15bit MessageID)

Message ID(Method ID)

方法的ID号,16bits,用于标识一个方法(1+15 bit EventID)

Length(Byte 0,1)

报文长度,从Request ID到报文结束的总长度

Length(Byte 2,3)

Request ID(Client ID)

客户端ID,16bits,区分不同客户端

Request ID(Session ID)

会话ID,区分同一客户端的连续消息或请求

Protocol Version

协议版本号

Interface Version

服务接口版本

Message Type

报文类型

Return Code

返回码

Payload

数据段,需要传输的相关数据

Message Type

Number

Value

Description

0x00

REQUEST

请求并期望响应

0x01

REQUEST_NO_RETURN

请求但不期望响应

0x02

NOTIFICATION

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

0x40

REQUEST_ACK

0x00的ACK确认

0x41

REQUEST_NO_RETURN_ACK

0x01的ACK确认

0x42

NOTIFICATION_ACK

0x02的ACK确认

0x80

RESPONSE

响应

0x81

ERROR

响应中包含错误

0xC0

RESPONSE_ACK

0x80的ACK确认

0xC1

ERROR_ACK

0x81的ACK确认

0x20

TP_REQUEST

TP请求并期望响应

0x21

TP_REQUEST_NO_RETURN

TP请求但不期望响应

0x22

TP_NOTIFICATION

一个TP通知/事件回调的请求,不期望有响应

0xa0

TP_RESPONSE

TP响应

0xa1

TP_ERROR

TP响应中包含错误

Return Code

Number

Value

Description

0x00

E_OK

没有错误发生

0x01

E_NOT_OK

发生了没有指定的错误

0x02

E_UNKNOWN_SERVICE

未知的服务ID

0x03

E_UNKNOWN_METHOD

服务ID预定义相符,未知的Method ID

0x04

E_NOT_READY

应用程序没有运行

0x05

E_NOT_REACHABLE

运行该服务的系统不可用

0x06

E_TIMEOUT

发生超时

0x07

E_WRONG_PROTOCOL_VERSION

SOME/IP协议版本不支持

0x08

E_WRONG_INTERFACE_VERSION

接口版本不匹配

0x09

E_MALFORMED_MESSAGE

反序列化错误

0x0a

E_WRONG_MESSAGE_TYPE

接收到不符合预期的消息类型

0x0b-0x1f

RESERVED

预留

0x20-0x5E

RESERVED

用于服务和方法的特定错误,由接口规范指定

 Payload之前的称为SOMI/IP Header

Payload:用户自定义数据,由工程师根据节点功能需求对每个服务或方法中的数据进行详细定义。

如果有E2E通信,E2E Header应该放在Payload之上,如下:

        SOME/IP的传输必须封装到OSI第四层的报文中进行传输,即封装到UDP/TCP中,需要注意的是使用TCP进行传输时,必须由Client来建议连接或者终止。 

3.数据结构序列化

        序列化基于接口规范定义的参数列表。接口规范定义了PDU中所有数据结构的确切位置,并且必须考虑存储器对齐。对齐用于通过在数据之后插入填充元素来对齐数据的开头,以确保对齐的数据从特定内存地址开始。

 

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

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

相关文章

flutter逆向 ACTF native app

前言 算了一下好长时间没打过CTF了,前两天看到ACTF逆向有道flutter逆向题就过来玩玩啦,花了一个下午做完了.说来也巧,我给DASCTF十月赛出的逆向题其中一道也是flutter,不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ 还原函数名 flutter逆向的一大难点就是不知道l…

常见面试题-Redis底层的SDS、ZipList、ListPack

Redis 的 SDS 了解吗? 答: Redis 创建了 SDS(simple dynamic string) 的抽象类型作为 String 的默认实现 SDS 的结构如下: struct sdshdr {// 字节数组,用于保存字符串char buf[];// buf[]中已使用字节…

介绍YOLO-NAS Pose:姿势估计的技术

YOLO-NAS 姿势 YOLO-NAS Pose models是对 Pose Estimation 领域的最新贡献。今年早些时候,Deci 因其突破性的目标检测基础模型 YOLO-NAS 获得了广泛认可。在 YOLO-NAS 成功的基础上,该公司现在推出了 YOLO-NAS Pose 作为其姿势估计的对应产品。该姿势模型在延迟和准确性之间…

linux入门---自旋锁和读写锁

自旋锁 首先通过一个例子来带着大家理解自旋锁,在生活中大家肯定都等过人比如你们一家人准备出去玩可是出发的时候妻子发现自己还没有化妆于是连忙赶回了家这个时候其他人就得在楼下等着,但是这个等又分为两种情况第一种是真的在楼下等其他的什么事都没…

DeCLIP 论文阅读

DeCLIP:supervision exists everywhere:a data efficient contrastive language-image pre-training paradigm 贡献: 论文是为了充分利用单模态和多模态,充分利用单模态特征用自监督(SIMSAM和MLM),多模态用图像文本对…

P6入门:项目初始化4-项目详情之预算日志及汇总Budget

前言 使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等&…

ELK之Logstash解析时间相差8h的问题

一、问题描述 服务器当前时间为:2022年 06月 28日 星期二 11:24:22 CST 而logstash解析的时间为2022-06-28T03:15:25.545Z与实际时间相差8h 一、解决办法: 需改logstash的配置文件: 原理就是:定义一个中间变量timestamp&…

Unity如何保存场景,如何导出工程文件/如何查看保存位置?【各版本通用】

如何保存场景? 在unity中CtrlS 或者File—>Save 输入你要保存的场景名【建议保存在Scenes文件夹下】 下图,保存场景不在Scenes文件夹下: 下图,保存在Scenes文件夹下: 下图,保存完成 如何导出工程文…

nginx配置和热部署实践

目录 一、nginx配置文件 1.配置文件 2.nginx配置文件语法 3.include 二、nginx.conf参数 1.user参数 2.nginx.conf重要的指令块 3.nginx命令行 三、nginx热部署功能实践 1.热部署的特点 2.大致流程 3.环境准备 4.备份旧nginx二进制文件 5.下载编译安装新的nginx …

Mac电脑配置Flutter开发环境

1.进入官网下载页: Flutter SDK releases | Flutter 可以看到有 Windows、macOS、Linux三种系统的下载包 选择macOS,然后点击下载 Stable channel(稳定版)中的最新版本,下载完成后可以移动到资源库Library中。 2.下载…

Unity Input System最简单使用

开始学的是 Input Manager 比较好理解,Input System却不好理解,教程也找了很多,感觉都讲的不清楚,我这里做一个最简单的用 Input System 添加鼠标左键和右键的效果。 1. 安装 Input System 包 首先这个功能不是内置的&#xff0…

Flutter笔记:使用Flutter构建响应式PC客户端/Web页面-案例

Flutter笔记 使用Flutter构建响应式PC客户端/Web页面-案例 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/detai…

红黑树,AVLTree树(平衡二叉树)迭代器原理讲解

红黑树,AVLTree树底层实现逻辑都是平衡二叉树(AVLTree高度平衡,红黑树以某种规则平衡),但终究不像链表的迭代器那样逻辑简单。 简单叙述以下,二叉树上面迭代器的运行逻辑,根据下面的图&#xff…

leetcode-链表经典题

1.反转单链表 206. 反转链表https://leetcode.cn/problems/reverse-linked-list/这里我们使用创建一个变量cur来遍历原链表,再创建一个新节点newnode,首先使用一个循环来遍历原链表,cur为NULL是循环结束,每次进入循环将cur的下一…

.mallab勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

导言: .mallab勒索病毒是一种极具威胁性的数字病毒,通过高级加密算法深度侵袭用户文件,迫使受害者支付赎金以获取解密密钥。了解其侵害方式和对抗手段对数字安全至关重要。数据的重要性不容小觑,您可添加我们的技术服务号&#x…

threejs(12)-着色器打造烟雾水云效果

一、自己封装水波纹效果 src/main/main01.js import * as THREE from "three";import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; import gsap from "gsap"; import * as dat from "dat.gui"; import ver…

【文件IO】

文章目录 File常见方法和属性属性构造方法方法 InputStream方法FileInputStream OutputStream利用 OutputStreamWriter 进行字符写入 总结按字节读取数据按字节写入数据按字符读取数据按字符写入数据 File常见方法和属性 属性 修饰符及类型属性说明static StringpathSeparato…

网络安全(黑客技术)-高效自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…

思科设备静态路由配置

一、静态路由基本知识 路由器的主要功能就是用来转发IP 数据包以使数据包到达正确的目的主机。可以想象数据包到达路由器就像一辆汽车开到十字路口,路由表就类似路标,列出可能到达的目的地,以及应该选择哪条路到达目的地。 路由器必须要有相应…

Linux - 基础IO(重定向 - 重定向模拟实现 - shell 当中的 重定向)- 下篇

前言 上一篇博客当中,我们对 文件 在操作系统当中是 如何就管理的,这个问题做了 详细描述,本篇博客将基于上篇 博客当中的内容进行 阐述,如有疑问,请参考上篇博客: Linux - 基础IO(Linux 当中…