SOME/IP 消息的布局

2023-05-16

1 SOME/IP 消息的布局

前面两篇文章「SOME/IP概述【分层结构及要实现的需求】」、「SOME/IP概述2【SOME/IP的主要中间件功能+SOME/IP报文PDU的封装】 」讲述了SOME/IP的基本概念/需求及架构在以太网的4层模型。这一篇我们研究一下SOME/IP 消息报文的帧格式是什么?我们要按照这个格式才能让发送和接收的双方心领神会,知道对方说了什么?先看代码,大概理解一下:

typedef struct someip_header_s {
    uint32_t    msg_id;
    uint32_t    length;
    uint32_t    req_id;
    uint8_t     protocol_ver;
    uint8_t     interface_ver;
    uint8_t     msg_type;
    uint8_t     ret_code;
    uint8_t     payload[0];
} __attribute__((packed)) someip_t;

注意 payload[0]可变零长度数组经常以变长结构体的形式。在一个变长结构体中,零长度数组不占用结构体的存储空间,但是我们可以通过使用结构体的成员 payload去访问内存,非常方便,其本质是一块可变字节长度缓存的首地址。

根据SOME/IP 需求,SOME/IP 协议应定义SOME/IP 消息的报文头的布局。下图定义了SOME/IP 消息的布局(报文头+Payload的布局)。

SOME/IP报文头 长 为16 个字节,包含以下部分:

  • (1)第一个 4 字节包含消息标识符,可以是服务ID或方法ID

  • (2)第二个 4 字节包含消息长度

  • (3)第三个 4 字节包含请求标识符

  • (4)第 12 字节包含 SOME/IP 协议版本

  • (5)第 13 字节包含服务接口版本

  • (6)第 14 个字节包含消息类型,它是SOME/IP功能实现的重要部分,其长度为8 bit,有以下五种取值:

    • ① REQUEST(期待响应的请求)

    • ② REQUEST_NO_RETURN(不期待响应的请求)

    • ③ NOTIFICATION(事件通知)

    • ④ RESPONSE(响应消息)

    • ⑤ ERROR(报错消息)

  • (7)第 15 个字节包含可能的消息错误代码

SOME/IP有效Payload是可变长度的字节缓存,包含以下部分:

  • 包含已经序列化的Event/Field/Method的内容

1 什么是SOME/IP?

  • SOME/IP,全称叫做Scalable Service-Oriented Middleware over IP,由 BMW 集团于 2011 年开发。这个名字非常清楚地表明它是一种中间件解决方案,可以在控制单元之间实现面向服务的通信。面向服务的体系结构使不同网络上的软件组件更容易相互通信;为了使不同网络上的这些应用程序能够相互理解,必须有某种中间件,其主要作用是解析消息格式并使消息的预期接收者可以理解。SOME/IP 专为此目的而设计。更具体地说,SOME/IP 提供了很多中间件功能,如序列化和远程过程调用 (RPC),以使 ECU 软件能够相互通信。

  • SOME/IP 可以在操作系统(Genivi、 AUTOSAR、Linux 和 OSEK)和非操作系统嵌入式系统上实现。它也成为自适应 AUTOSAR 实施的首选中间件。

  • SOME/IP 支持信息娱乐域以及车辆中其他域的功能, 可以替换MOST和CAN 总线协议。

  • Supported by ARXML and FIBEX databases as well as Franca IDL

2 SOME/IP 的主要中间件功能

  • (1)序列化:这是数据在数据单元中表示的方式,可以是 UDP 或 TCP 消息。当数据通过网络传输时,读取数据的ECU可能有不同的架构、操作系统等,只有有一致的数据传输机制才能保证互操作性。SOME/IP 允许序列化,来实现 transforming into and from on-wire representation。

  • (2)远程过程调用 (RPC):这是一种客户端 ECU 远程调用服务端ECU提供的服务的方法。它是客户端 ECU 在需要来自服务器的一些数据时采用的一种数据交换方法。RPC 可以有返回值也可以没有返回值,即客户端可以请求数据作为响应,或者简单地调用一个函数来在服务器端执行某些任务。

  • (3)服务发现:服务发现 (SD) 协议是 SOME/IP 的核心功能。在面向服务的架构中,服务(即函数功能实体【方法、事件或字段】)必须是可发现的。SOME/IP SD 协议管理提供动态查找功能并能配置其访问权限【是提供服务还是阻止它可用】。

  • (4)发布/订阅:客户端可以订阅服务器的内容,从而可以动态地接收来自服务器的更新数据。SOME/IP 的发布/订阅功能动态配置客户需要哪些数据(事件/字段)并共享这些数据。Pub/Sub 由 SOME/IP SD 管理。

  • (5)UDP 消息分段:允许通过 UDP 传输较大长度的SOME/IP 消息。

3 SOME/IP 报文PDU在各层中封装

SOME/IP 本质上是位于传输层之上的应用层通信协议,它是位于TCP/UDP报文的Payload部分。我们可以参考【1.1各层的PDU之间的‘信息接力’】来理解SOME/IP 报文是如何一步步在以太网4层网络架构中封装的,本质上就是每一层都要有特定的报文头。发送就是加报文头的过程,接收就是去除报文头的过程。发送的具体过程为:

  • 应用层填充【SOME/IP 发送的消息,即SOME/IP Data Payload】

  • 【应用层SOME/IP Data Payload】+ SOME/IP中间件添加的SOME/IP 报文头

  • 【SOME/IP 报文】+ 传输层添加的TCP或者UDP报文头

  • 【传输层报文】+ 网络层的添加IP报文头

  • 【网络层报文】+ 链路层添的加MAC报文头

     SOME/IP概述2【SOME/IP的主要中间件功能+SOME/IP报文PDU的封装】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SOME/IP 消息的布局 的相关文章

随机推荐

  • 什么情况下需要加extern “C“,通俗易懂

    下午看了一些关于extern 34 C 34 的博客 xff0c 都写得很啰嗦 xff0c 看来看去还是有一些细节不怎么了解 xff0c 自己开了个程序测试了一下 xff0c 总结了什么情况下需要加入extern C 首先c 43 43 和
  • POSIX介绍

    POSIX表示可移植操作系统接口 xff08 Portable Operating System Interface of UNIX xff0c 缩写为 POSIX xff09 xff0c POSIX标准定义了操作系统应该为应用程序提供的接
  • Linux crond 命令使用实例

    每一分钟调用一次 ls l etc gt tmp to txt crontab e 进行编辑 1 ls l etc gt tmp to txt 1 代表每一分钟执行一次 1 第二个 代表一天中的某个小时 案例2 xff1a 写一个脚本 vi
  • DoIP诊断技术一点通

    DoIP的全称是Diagnostic Over Internet Protocol xff0c 即基于TCP IP协议的诊断协议 随着以太网技术在车载领域的应用范围逐步扩大 xff0c 越来越多的控制器支持通过以太网进行诊断通信 xff0c
  • 嵌入式必备基础一

    嵌入式必备知识 Oliver H的博客 CSDN博客 一 进程与线程 1 1 进程和线程的概念 1 1 1 什么是进程 线程 xff0c 各自有什么优点 概念 xff1a 进程是对运行时程序的封装 xff0c 是系统进行资源调度和分配的的基
  • 嵌入式基础二——C/C++

    二 C C 43 43 2 1 c和c 43 43 区别 概念相关面试题 2 1 1 new和malloc的区别 属性 xff1a new delete是C 43 43 关键字 xff0c 需要编译器支持 malloc free是库函数 x
  • ​Linux 黑话解释:什么是 POSIX?

    POSIX xff0c 你肯定在各种在线论坛和文章中 xff0c 听到过这个缩写 xff0c 或读到过关于它的信息 程序员和系统开发人员似乎最关心这个问题 它听起来很神秘 xff0c 虽然有很多关于这个主题的好资料 xff0c 但一些讨论区
  • 科研进阶篇——论文完结

    终于完成了人生的第一篇学术论文 xff0c 对这次的科研做个总结 xff0c 画上一个完美的问号 xff0c 让我们快乐的继续进阶 xff0c 投了会议 xff0c 中了的话应该会推荐到CCF C期刊 虽然还没出结果 xff0c 还是为自己
  • AP AUTOSAR 平台设计总体框架全解

    AP AUTOSAR 平台设计总体框架全解 01 简介 1 1内容 本规范描述技术范围和方法 AP的背景 逻辑和物理视图的架构 xff0c 是AUTOSAR自适应平台设计的总体框架 全文32000余字 xff0c 建议收藏阅读 02 技术范
  • 谈谈Bootloader自更新

    目录 01 Supplier Boot SB 43 Customer Boot CB 02 将Boot先放到RAM中运行 xff0c 然后更新Boot的Flash区域 03 两个CB 43 minBoot 04 小结 汽车控制器的BootL
  • E2E通信保护协议学习笔记

    E2E通信保护协议学习笔记 最近在做功能安全方面工作 xff0c 想了解E2E保护的问题 本文试着说明两个点 xff1a 功能安全需要考虑通信失效造成的影响 xff0c 因此E2E通信保护协议被提出 xff0c 以满足功能安全要求 xff1
  • TSN(时间敏感网络)介绍

    1 前言 TSN是时间敏感网络 xff08 Time Sensitive Network xff09 的英文缩写 xff0c 是IEEE 802 1 TSN工作组开发的一系列数据链路层协议规范的统称 xff0c 用于指导和开发低延迟 低抖动
  • 汽车OTA是个什么鬼?

    OTA xff1a Over the Air Technology 这描述的是手机吧 xff01 不过一开始的手机也是不可以直接OTA的 1997年之前所有汽车都是一个独立的机械个体 xff0c 一个方向盘 xff0c 一组踏板 xff0c
  • Hypervisor简介

    从头开始了解和使用Hypervisor xff08 第4部分 xff09 嘶吼 RoarTalk 回归最本质的信息安全 互联网安全新媒体 4hou com 根据 Hypervisor 的不同类型 xff0c 我们将虚拟化分为I 型和 II
  • 使用repo下载google源码,跟编译 ,遇到的错误解决

    最近一直想下载android的源码看看 xff0c 但是按照官方的文档下载 xff0c 遇到了问题 在执行的curl http commondatastorage googleapis com git repo downloads repo
  • S32V234 Linux yocto开发环境搭建

    一 主机环境 主机 xff1a Ubuntu 16 04 5 64bit S32V bsp infomation xff1a Bsp version auto yocto bsp 19 0 Linux Kernel version 4 13
  • NXP S32G2开发

    https blog csdn net bigzhizhi article details 123069235 导言 Linux BSP是一组源代码 xff0c 可用于为受支持的板卡创建U Boot引导加载程序 Linux内核映像 根文件系
  • 简单解决Please install the gcc make perl packages from your distribution问题 and VirtualBox安装增强功能失败

    在vbox安装ubantu增强功能 xff0c 出现下面这种情况 xff1a Please install the gcc make perl packages from your distribution 在这里插入图片描述 把需要的包都
  • 图形学就业方向&&春招部份纪实

    以下分几个模块分别介绍图形学 xff1a 1 图形学未来方向以及需要的技术 2 个人找工作情况 xff0c 具体介绍 图形学未来方向以及需要的技术 最近GAMES论坛搞了一个计算机图形学走进高校企业活动 xff0c 可以简称图形学招聘活动
  • SOME/IP 消息的布局

    1 SOME IP 消息的布局 前面两篇文章 SOME IP概述 分层结构及要实现的需求 SOME IP概述2 SOME IP的主要中间件功能 43 SOME IP报文PDU的封装 讲述了SOME IP的基本概念 需求及架构在以太网的4层模