深入理解SOMEIP培训讲义 - 干货!!!

这篇具有很好参考价值的文章主要介绍了深入理解SOMEIP培训讲义 - 干货!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

曾经给同事培训 SOMEIP 写的干货,分享给大家!!!
也欢迎关注!!!评论!!!
以下是我写的系列文章

系列文章目录

C++高性能优化编程系列
深入理解设计原则系列
深入理解设计模式系列
高级C++并发线程编程

世间最容易的事是坚持,最难的事也是坚持。要记住,坚持到底就是胜利。

1、SOMEIP 概述

服务是SOME/IP的最核心的一个概念,属于会话层的协议。
深入理解SOMEIP培训讲义 - 干货!!!

  • 在一个服务中,定义了Server和Client两个不同角色:Server提供服务,Client调用服务。
  • 对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。一个Service由0至多个Event/Method/Field组成。
  • 在车载网络中,某个ECU有时会需要调用实现在其他ECU上的个服务,这个时候它俩就分别扮演了Client和Server的角色,而SOME/IP就是实现这种远程服务调用的接口。
  • 与CAN总线为主的车载网络(当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。)相比,而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而面向服务的通讯方式能够大大降低总线的负载率。

2、SOMEIP Protocol Frame(协议解读)

SOMEIP传输协议帧:
深入理解SOMEIP培训讲义 - 干货!!!

3、SOMEIP Serialization of Data Structures(数据结构的序列化)

什么是序列化?
序列化:将对象的状态信息转换为可以存储或以二进制的形式在网络中传输。
反序列化:将序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
序列化规则:
深入理解SOMEIP培训讲义 - 干货!!!

4、SOMEIP Serialization of Data Structures(序列化常见问题)

4.1 SOMEIP Serialization of Data Structures(序列化常见问题-大小端)

首先什么是大小端:

大端:高字节存放到内存的低地址。
小端:高字节存放到内存的高地址。

假如有一个数据是0x12345678,直接用memcpy将这个数copy到下图中的Length里面来,如果是大端的话,((uint8)Length)[0]就等于0x12;如果是小端的话,就是0x78。
深入理解SOMEIP培训讲义 - 干货!!!
因为对于赋值的方便性来讲,大端是网络通信中常用的方式(例如TCP/IP),所以SOME/IP格式头也使用大端。Payload由于是用户自主定义的内容,所以用户可以自己决定大小端。

4.2 SOMEIP Serialization of Data Structures(序列化常见问题-数据对齐)

对于不同的CPU,数据的存放有不同的对齐原则,有8、16、32甚至64位对齐(可以配置)。如果一个数据是按照CPU对齐的,那么在反序列化的时候会有一定的性能优势。但是SOME/IP序列化的时候只支持对动态数据类型自动添加填充位(即动态数组、动态字符串)。使用场景比较局限且序列化的时候还会消耗一些性能,多时候都默认使用8bit对齐(也就是不对齐)。我们也举个例子简单讲讲:
深入理解SOMEIP培训讲义 - 干货!!!
假如我们设计的服务接口有两个参数,一个是uint8 arr[5],另一个是uint8 arr2[3],且假设两个数组都是动态数组。动态数组都是要加长度域的,以表示后面的数组的字节数,假设arr使用2bytes的长度域,arr2使用1byte的字节域。当前CPU是4字节对齐,那么序列化完arr的5个数据后,就不能立即序列化arr2。因为arr的长度域+数据域一共7bytes,不是4的整数倍,要填充1byte。而后面的arr2由于是该someip报文的所有元素的末尾元素,虽然其也是动态数组,但是不用填充(因为后面没有数据了,不会影响后面数据的反序列化性能)

4.3 SOMEIP Serialization of Data Structures(序列化常见问题-数据类型)

拿C语言举例,能用到的数据类型有:
基础数据类型:就是C语言中的保留字能直接使用的类型及其重命名类型。如uint8,short,long和float64等
复杂数据类型:就是C语言中需要通过基础数据类型进行组合的新类型。如struct,union,array和string等
需要强调的一点是:string和动态array这样的类型在C语言中是不存在的,但是string可以通过array模拟;动态array也可以通过struct模拟。在CP协议中,可以识别这些模拟出来的类型,并序列化成string和动态array。下面列举一下someip所支持的所有可序列化的数据类型。
深入理解SOMEIP培训讲义 - 干货!!!
需要注意的是:
someip不支持指针的直接序列化,因为没有任何意义,通信双方的内容地址和存放的数据都是不同的,直接传地址是去不到对应数据的。
someip支持使用TLV(Tag Length Value)格式传输数据,需要配置打开。

5、SOMEIP Error Processing(错误处理)

客户端不管是请求还是订阅,都有可能在服务器中遭遇失败,这也就意味着服务器需要具备错误处理的能力。

Return Code是将应用程序错误和方法的响应数据从服务器传输到客户端。

对于通过UDP接收的SOME/IP消息,应检查UDP如下信息:

  • UDP数据报大小应至少为16字节(即SOME/IP消息的最小长度)
  • UDP首部中Length字段的值应小于或等于UDP payload字节数
    深入理解SOMEIP培训讲义 - 干货!!!

6、SOMEIP Service Discovery Protocol(服务发现协议)

SOME/IP SD全称,SOME/IP Service Discovery,即服务发现。在Client与Server间进行数据传输前,需要检测网络连接、询问Server服务能力、数据传输要求、Server与Client之间的发布/订阅处理等,这样的一系列过程叫做服务发现;

  • SOME/IP SD报文特征,报文结构有普通SOME/IP报文一致,但Message ID(ServiceID/MethodID) = 0xFFFF/8100;
  • SOME/IP SD功能,定位服务实例、检测服务实例状态、订阅/发布管理;
  • SOME/IP SD当前只支持基于IP的通信;
  • SOME/IP SD依赖于SOME/IP,SOME/IP支持TCP和UDP,但SOME/IP SD限制只能通过UDP(因为UDP单播、多播、延时小可满足SOME/IP SD要求);
  • SOME/IP SD报文特征,报文结构有普通SOME/IP报文一致,但Message ID(ServiceID/MethodID) = 0xFFFF/8100;
  • SOME/IP SD功能,定位服务实例、检测服务实例状态、订阅/发布管理;
  • SOME/IP SD当前只支持基于IP的通信;
  • SOME/IP SD依赖于SOME/IP,SOME/IP支持TCP和UDP,但SOME/IP SD限制只能通过UDP(因为UDP单播、多播、延时小可满足SOME/IP SD要求);
    深入理解SOMEIP培训讲义 - 干货!!!

6.1、 SOMEIP Service Discovery Protocol(服务发现协议)

  • SOME/IP-SD 消息的Client ID = 0x0000,因为只存在一个SOME/IP-SD实例;
  • SOME/IP-SD 消息可以配置Client ID前缀;
  • SOME/IP-SD Session ID遵循SOME/IP的原则(不能设置为0,从1开始并依次递增);
  • SOME/IP-SD 头部从falgs字段开始;
  • Reserved字段: 无;
  • Entries Array Length 与 Entries Array: 携带了服务和服务实例信息;
  • Entries Array Length 与 Entries Array: 是Entries的附加信息;
    深入理解SOMEIP培训讲义 - 干货!!!

6.2、SOMEIP Service Discovery Protocol(Flags字段含义)

Flags字段含义:
深入理解SOMEIP培训讲义 - 干货!!!

6.3、SOMEIP Service Discovery Protocol(SOME/IP SD)

SOME/IP SD支持在Entries array中放置多个Entry;Entries 用于同步服务实例状态(提供服务、发现服务)和发布/订阅管理;
Entries 有服务类型Entries和事件类型Entries;
深入理解SOMEIP培训讲义 - 干货!!!文章来源地址https://www.toymoban.com/news/detail-467795.html

  • Type字段: 包含FindService(0x00)、OfferService(0x01)、StopOfferService(0x01);
  • Index 1st Options: 在Option Array中要运行的第一个Option的索引,0表示第一个SOME/IP SD数据包;
  • Index 2nd Options: Option Array中要运行的第二个Option的索引,0表示第一个SOME/IP SD数据包;
  • of Opt 1: 描述第一个Option运行使用的option数量,0表示没有运行的option;
  • of Opt 2: 描述第二个Option运行使用的option数量,0表示没有运行的option;
  • Service ID: 描述Entry相关的服务或服务实例的Service ID;
  • Instance ID: 描述Entry相关的服务实例的实例ID,如果被设置为0xFFFF,表示一个服务的所有服务实例;
  • Major Version: 服务(实例)的主版本号,0xFF表示任意版本;
  • TTL: 描述Entry的生命周期,以秒为单位;
  • Minor Version: 服务的次要版本,0xFFFFFFFF表示任意版本;

到了这里,关于深入理解SOMEIP培训讲义 - 干货!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++干货基地】深度理解C++中的高效内存管理方式 new & delete

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作

    2024年04月26日
    浏览(38)
  • SomeIP 协议

    目录 目录 SomeIP协议 1.什么是SomeIP 1.1 someip是一种协议 1.2 someip是一个中间件 1.3 协议层 2.Some/IP的功能 2.1 序列化 2.2 远程调用 2.3 服务发现 2.4 订阅/发布 3.服务接口 Method -方法 3.1 Method 3.2 Event 3.3 filed -属性/状态 4.SomeIP报文格式 5.序列化 5.1 序列化和/反序列化 6.Some/IP SD(Service D

    2024年01月25日
    浏览(66)
  • 二分查找的讲义和视频

    源码下载: https://pan.baidu.com/s/1wMsUK4hZpdttFzOK66n3mQ?pwd=x7a7   提取码 x7a7 先进入《  视频教程及配套源 码》,再进入《 C++ 算法》。 在线看视频: https://www.bilibili.com/video/BV1nL411Q7DY/     1.1.1.  最简单的情况 a.  情况简述 数组已经按升序排好序。 假定要找的数一定存在。 如果存

    2024年02月11日
    浏览(42)
  • CANOE之以太网(SomeIP)信息收发

      CANoe中SOME/IP的仿真功能基于SomeIP_IL.dll以及CANoeILNL_AUTOSAR_ETH.DLL实现,可在Simulation Setup中将上述dll文件分配给对应的仿真节点并配置其SOME/IP交互层属性。 操作步骤:基于Vector Canoe16.0  SP2 Demo版本 1、在Simulation Setip中的 Ethernet Networks-Ethernet1-Databass Add如下数据库文件  2、上一

    2024年02月13日
    浏览(36)
  • 【linux深入剖析】深入理解基础外设--磁盘以及理解文件系统

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 我们所有的文件都是与进程相关的文件–进程打开的文件 系统中是不是所有的文件都被打开了呢?如果没

    2024年04月11日
    浏览(44)
  • 车载以太网 - SomeIP - 协议用例 - RPC

    1、Cleint和Server端应该为一个服务实例的所有的Methodsevents使用一个TCP连接

    2024年02月15日
    浏览(44)
  • NLP——操作步骤讲义与实践链接

    语料是NLP的生命之源,所有NLP问题都是从语料中学到数据分布的规律 语料的分类:单语料,平行语料,复杂结构 语料的例子:Penn Treebank, Daily Dialog, WMT-1x翻译数据集,中文闲聊数据集,中国古诗数据集 语料来源:公开数据集,爬虫,社交工具埋点,数据库,上述数据集如何

    2024年02月12日
    浏览(28)
  • 【云原生-深入理解 Kubernetes 系列 3】深入理解容器进程的文件系统

    【云原生-深入理解Kubernetes-1】容器的本质是进程 【云原生-深入理解Kubernetes-2】容器 Linux Cgroups 限制 大家好,我是秋意零。 😈 CSDN作者主页 😎 博客主页 👿 简介 👻 普通本科生在读 在校期间参与众多计算机相关比赛,如:🌟 “省赛”、“国赛” ,斩获多项奖项荣誉证书

    2024年02月06日
    浏览(49)
  • 【疯狂Java讲义】Java学习记录(IO流)

    IO:Input / Output 完成输入 / 输出 应用程序运行时——数据在内存中                        ←→                把数据写入硬盘(磁带)                                 内存中的数据不可持久保存 输入:从外部存储器(硬盘、磁带、U盘)把数据读入内存中。

    2024年02月07日
    浏览(37)
  • 【C语言深入】深入理解程序的预处理过程

    我们平时所写的每一个.c文件都会经过编译和连接的过程之后才会形成一个可执行程序: 今天我们就来详细的看看编译和连接这两个过程的具体细节。 程序的翻译环境与执行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换

    2023年04月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包