SOME/IP 消息的布局

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的封装】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值