Some/IP学习笔记

news2024/11/16 11:48:40

目录

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中所有数据结构的确切位置,并且必须考虑存储器对齐。对齐用于通过在数据之后插入填充元素来对齐数据的开头,以确保对齐的数据从特定内存地址开始。

 

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

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

相关文章

【C++ 学习 ㉟】- 异常详解

目录 一、C 异常处理的基本语法 1.1 - 抛出异常 1.2 - 检测和捕获异常 二、在函数调用链中异常栈展开的匹配原则 三、异常重新抛出 四、异常规范 五、C 标准异常体系 程序的错误大致可以分为以下三种: 语法错误:在编译和链接阶段就能发现&#xf…

Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作

vim简介、配置方案、常用模式的基本操作 本章思维导图: 注:本章思维导图对应的xmind和.png文件都已同步导入至资源 1. vim简介 vim是Linux常用的文本编辑器,每个Linux账户都独有一个vim编辑器 本篇我们介绍vim最常用的三种模式:…

史上最全最新Ubuntu20.04安装教程(图文)

总的来说,安装Ubantu包含以下三个步骤: 一、安装虚拟机 二、Ubuntu镜像下载 三、虚拟机配置 一、安装虚拟机 选择安装VMware Workstation,登录其官网下载安装包,链接如下: 下载 VMware Workstation Pro​www.vmwa…

Linux中字符设备的打开、写入

一个内核模块应该由以下几部分组成。 第一部分&#xff0c;头文件部分。一般的内核模块&#xff0c;都需要 include 下面两个头文件&#xff1a; #include <linux/module.h> #include <linux/init.h> 第二部分&#xff0c;定义一些函数&#xff0c;用于处理内核…

【Python大数据笔记_day07_hive中的分区表、分桶表以及一些特殊类型】

分区表 分区表的特点/好处:需要产生分区目录,查询的时候使用分区字段筛选数据,避免全表扫描从而提升查询效率 效率上注意:如果分区表在查询的时候呀没有使用分区字段去筛选数据,效率不变 分区字段名注意:分区字段名不能和原有的字段名重复,因为分区字段名要作为字段拼接到表后…

常见面试题-JDK和CGLIB动态代理

JDK 动态代理和 CGLIB 动态代理对比 JDK 动态代理只能代理实现了接口的类&#xff0c;而 CGLIB 可以代理未实现任何接口的类。另外CGLIB 动态代理是通过生成一个被代理类的子类来拦截被代理类的方法调用&#xff0c;因此不能代理声明为final 类型的类和方法就二者的效率来说&a…

信息系统项目管理师 教材目录、考试大纲、考情

文章目录 考情考试大纲第1章 信息化发展第2章 信息技术发展第3章 信息系统治理第4章 信息系统管理第5章 信息系统工程第6章 项目管理概论第7章 项目立项管理第8章 项目整合管理第9章 项目范围管理272第10章 项目进度管理297第11章 项目成本管理334第12章 项目质量管理358第13章…

【图像卷积与卷积层】的基本概念与区别

图像卷积 卷积操作是指将一个滤波器&#xff08;也称为卷积核或内核&#xff09;应用于输入图像的小块区域&#xff0c;然后将滤波器在整个图像上滑动&#xff0c;逐步计算出输出特征图。这个过程可以帮助网络学习到图像的局部特征&#xff0c;因为每个卷积核都可以学习到不同…

VulnHub Prime_Series_Level-1

一、信息收集 1.nmap扫描 ┌──(root&#x1f480;kali)-[~/桌面] └─# arp-scan -l┌──(root&#x1f480;kali)-[~/桌面] └─# nmap -sS -A -p- 192.168.103.202发现开放了22和80端口 2.web页面 打开80端口的web页面&#xff0c;是一张静态的图片&#xff0c;没什么价…

【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…

探寻知识的新路径——电大搜题助您开启学习新纪元

江西开放大学和广播电视大学一直以来都是许多自学者和职场人士追寻知识的圣地。然而&#xff0c;对于许多学子来说&#xff0c;学习的过程也常常充满了困惑和挑战。为了帮助这些学习者通过更高效、便捷的方式获取知识&#xff0c;江西开放大学推出了一款创新的学习工具——电大…

谈谈越来越无效的拥塞控制

简单看一个图&#xff1a; 它不是互联网本身&#xff0c;但这是典型网络的必要组件&#xff0c;它决定了 flow 如何从从一边流向另一边&#xff1a;一条 flow 经过交换节点通过 NIC 被导入一条链路前在 buffer 中排队。 现如今大多数工程师的工作都在折腾那个单独的盒子&…

231112-中文错别字识别与纠正问题的大模型与小模型调研

A. 引言 当前&#xff0c;以ChatGPT为代表的大语言模型&#xff08;Large Language Models, LLMs&#xff09;正引领着新一轮工业革命。ChatGPT最开始的研究领域隶属于NLP的一个子问题&#xff0c;其输入是text&#xff0c;输出也是text。在从文本输入到文本输出的诸多应用场景…

C语言从入门到精通之【概述】

#include指令和头文件 例如#include <stdio.h>&#xff0c;我们经常看到C文件最上面会有类似这样的语句&#xff0c;它的作用相当于把stdio.h文件中的所有内容都输入该行所在的位置。实际上&#xff0c;这是一种“拷贝-粘贴”的操作。 #include这行代码是一条C预处理器…

Smart Link 和 Monitor Link应用

定义 Smart Link常用于双上行链路组网&#xff0c;提高接入的可靠性。 Monitor Link通过监视上行接口&#xff0c;使下行接口同步上行接口状态&#xff0c;起到传递故障信息的作用。 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个…

木疙瘩踩坑日记-容易忽略的一些BUG

在一开始玩家务必很清楚这三个概念 图形&#xff1a;舞台上元素的最小单位。软件自带的以及外部导入的图片默认都是图形&#xff01;最朴素的元素&#xff01;可以添加预制动画、关键帧动画、进度动画&#xff08;软件自带的形状&#xff09; 元件&#xff1a;一个可以内部封…

高性能收发原始数据包的框架(Netmap)

一、Netmap 简介 Netmap 是一个高性能收发原始数据包的框架&#xff0c;由 Luigi Rizzo 等人开发完成&#xff0c;其包含了内核模块以及用户态库函数。其目标是&#xff0c;不修改现有操作系统软件以及不需要特殊硬件支持&#xff0c;实现用户态和网卡之间数据包的高性能传递。…

Git系列之分支与标签的使用及应用场景模拟

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Git实战开发》。&#x1f3af;&#x1f3af; &a…

【网络奇遇记】我和因特网的初相遇2 —— 三种交换方式

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 前言一. 电路交换1.1 电路交换讲解1.2 电路交换实例 二. 分组交换1.1 分组交换讲解1.2 分组交换实例…

Go 14岁了

今天我们庆祝Go开源十四周年&#xff01;Go度过了美好的一年&#xff0c;发布了两个功能齐全的版本和其他重要的里程碑。 我们在2月份发布了Go 1.20&#xff0c;在8月份发布了Go 1.21&#xff0c;更多地关注实现改进而不是新的语言更改。 在Go 1.20中&#xff0c;我们预览了配置…