SOME\IP

产生与发展

2011年宝马公司设计开发了一套中间件,实现以服务为导向的通信方式,能够大大减少网络负载以提高通信双方的效率,也可以满足未来车辆不断增长的通信需求。
宝马将这种面向服务的通信方式叫做SOME\IP(Scalable service-Oriented MiddlewarE over IP),是一种运行在车载以太网协议栈基础上的中间件。当客户端需要来自服务器的数据时,它可由客户端使用 TCP 协议进行请求。如果服务器必须将数据传送给所有活动的订阅者,则可通过 UDP 协议传输。UDP 协议上的数据通信可以是单播、多播或广播。

  • Scalable:该协议设计的初衷之一就是为了实现不同硬件平台、不同操作系统或嵌入式固件以及不同应用软件的异构设备之间的可扩展性和互操作性。
  • service-Oriented:表明它是一种面向服务的基本协议。因此仅当客户端请求或服务器通知特定订阅者时,才在客户端-服务器配置中交换数据 ,这就确保了永远不会浪费带宽,并且仅在需要的时间和地点进行数据通信/交换。
  • MiddlewarE:它也是一种中间件。即其位于应用层,有自己的通用协议层来处理更具体的操作及应用;
  • over IP:它也是一个基于以太网的协议。它使用类似的硬件接口,确保高达 100Mbps 的带宽。同时数据通过中间件(即应用层)通过网络电缆使用 TCP/IP 或 UDP 协议进行通信。

发展过程

  • AUTOSAR 4.0 - 完成宝马SOME/IP消息的初步集成;
  • AUTOSAR 4.1 - 支持SOME/IP-SD及其发布/订阅功能;
  • AUTOSAR 4.2 - 添加transformer用于序列化以及其他相关优化;
  • AUTOSAR 4.3 - 修复一些transformer bug同时添加针对大量UDP数据包的SOME/IP-TP协议以及其他SOME/IP-SD的优化工作;

服务说明

服务是SOME/IP的最核心概念。在一个服务中,定义了Server和Client两个角色:

  • Server提供服务
  • Client调用服务

对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。
一个Service由0~多个Event/Method/Field组成。
与CAN相比,面向服务的通讯方式能够大大降低总线的负载率。

  • Method
    • 调用或引用一个进程/函数/子程序,通常由Client发起,并由Server答复。
    • Request是最常见的一种Method,由Client向Server请求数据;
    • Response是Request的结果,由Server答复Client的Request。
    • 而Method Fire & Forget方式,只Client向Server发起,但Server对该请求不回复。
  • Event:一个单向的数据传输,只能是on change类型,用于Server主动向订阅(Subscribe)了相关服务的Client发布(Publish)信息。
  • Field:由以下三项内容构成:
    • Notifier:通知,Server的Client订阅了服务后第一时间主动向其发送数据。
    • Getter:获取,由Client向Server请求数据。
    • Setter:设置,由Client修改Server的数据。

协议栈

在这里插入图片描述
在这里插入图片描述
SOME/IP协议涉及到与RTE,COM,PDUR以及SOAd这些AUTOSAR标准模块的交互,而用于服务发现的SOME/IP-SD则涉及到BswM,SD以及SoAd模块的交互。
摄像头、主机、远程信息处理设备、AUTOSAR 设备,甚至信息娱乐系统等大型设备,都可以使用 SOME/IP 协议有效地交换 ECU 间消息。自 Wireshark 3.2 SOME/IP 发布以来,SOME/IP 支持就已公开,可以在 Wireshark 上解析SOME/IP数据。
在这里插入图片描述

SOME\IP协议帧格式

在这里插入图片描述
在这里插入图片描述

  • Length:Length正如上图2所示,其涵盖的范围是Request ID开始至SOME/IP报文结束。
  • Message Type:用来识别不同的消息类型
    在这里插入图片描述
  • Return Code
    在这里插入图片描述

SOME\IP通信机制

1:服务发现:SOME\IP-SD
在这里插入图片描述

  • Client通过发送Find Service的报文去寻找车载网络中可用的服务实例;
  • Server接收到Client的Find Server后通过UDP发送Offer Service响应;
  • Client通过发送Subcribe Event Group去订阅相关Event;
  • Server检查是否满足Client是否满足订阅条件,如果满足回复ACK,如果不满足,则回复NACK;
  • Client成功订阅相关事件后,Server会按照事件本身属性来实现对已订阅该事件的Client的发布;

2:远程进程调用

  • Request/Response通信模式:客户端发送请求信息,服务端接收到请求,进行相关处理之后进行相应的响应。
    在这里插入图片描述
  • Fire&Forget通信模式:客户端向服务端发送请求,服务端无需进行任何响应,有点类似诊断服务中的抑制正响应。
    在这里插入图片描述
  • Notification Event通信模式:实现客户端向服务端订阅相关的事件组,当服务端的事件组发生或者值发生变化时,就需要向已订阅该事件组的客户端发布更新的内容。
    在这里插入图片描述
  • 远程进程控制(Field):访问进程通信机制主要是为了实现针对对应用程序的数据获取与更改,主要任务就是实现客户端通过Getter获取Server的值,通过Setter设置Server的值。Field就可理解为一个Service的基本属性,可包含Getter,Setter,Notifier三种方式。其中Getter就是读取Field中某个值的方法,Setter就是一种改变Field值的方法,而Notifier则是一种当Field中的值发生变化的触发事件。
    在这里插入图片描述

由上图可知,在Getter与Setter的方式中我们使用的Request/Response机制。在Getter的请求报文中是一个空的Payload,响应报文中的Payload才是需要获取的值;使用Setter请求时,请求消息中的Payload则是要设置的值,如果设置成功,那么响应报文中Payload就是设定成功的值。同时我们也可得出服务实体在SOME/IP协议中是一个十分重要的概念。一个服务实体可以是Field,Events以及Method的任意组合。

SOME\IP错误处理机制

  • 消息类型0x80,Response信息,即可以通过Response Message中的Return Code来定位到问题所在;
  • 消息类型0x81,显式的错误信息;
    在这里插入图片描述

SOME\IP-SD协议解析

SOME/IP是client和server对服务内容的请求和响应,但是client如何知道server有哪些服务可提供呢?常规的SOME/IP消息并不具有这样的功能,所以就有了SOME/IP-SD协议(Service Discovery Protocol),可用于汽车网络中的服务发布/订阅

  • 找到服务
  • 检测服务是否正在运行
  • 实现发布/订阅处理

SOME/IP可用在TCP/UDP协议上,但是SOME/IP-SD只能用在UDP上,因为SOME/IP-SD只是为了发现服务,并不需要TCP的可靠性连接等特性
有两种发现机制

  • Find Service Entry:在服务的当前状态未知的情况下,由client向server发送请求可用的服务
  • Offer Service Entry:主动告知其他通信节点它可用的服务

格式说明

在这里插入图片描述

  • Entries用于同步服务实例的状态和发布/订阅的管理。
  • Options用于传输Entries的附加信息。

1:Entry
包含服务实例以及需要订阅的事件组的信息。主要通过Entry实现提供服务、发现服务,以及订阅事件组的功能。有两类:
在这里插入图片描述

  • Service Type:用于FindService,OfferService,StopOfferService这几种场景;
    在这里插入图片描述在这里插入图片描述

  • EventGroup Type: 用于 SubscribeEventgroup, StopSubscribeEventgroup,SubscribeEventgroupAck,SubscribeEventgroupNack这几类场景。
    在这里插入图片描述
    在这里插入图片描述
    2:Option Array
    主要作用就是为了提供在通信的过程中提供下附加信息,如配置信息,IP地址,端口号等。主要有三类:

  • Configuration Options:用于配置通信过程的必要的信息

    • configuration options仅适用于任意Service ID的Service Entry Array以及Service ID为0xFFFE的EventGroup Entry Array。
    • 对于那些非标准的SOME/IP 服务,由于不能够被Service ID进行标识,此时就需要通过一个key “otherserv”的值来进行标识,这类服务则可通过使用0xFFFE作为Service ID同时附带otherserv的value的configuration option来完成双方的通信。
      在这里插入图片描述
      在这里插入图片描述
  • Endpoint Options(IPV4/IPV6):用于传递IPV4或者IPV6的Endpoint信息(IP地址 Port号)以及使用的传输层协议;

    • IPv4 Endpoint Options
      在这里插入图片描述
    • IPv6 Endpoint Options
      在这里插入图片描述
  • Multicast Options(IPV4/IPV6):用于广播IPV4或者IPV6的IP地址及Port号,其中传输层协议只能使用UDP协议;

    • IPv4 Multicast Option
      在这里插入图片描述
    • IPv6 Multicast Option
      在这里插入图片描述
  • IPv4 SD Endpoint Option
    在这里插入图片描述

  • IPv6 SD Endpoint Option
    在这里插入图片描述
    以上六种字段相关内容解释
    在这里插入图片描述

SD状态机

在这里插入图片描述
在这里插入图片描述

SOME/IP-TP

SOME/IP-TP模块的主体功能就是为了实现对应用层发送数据过大时进行的必要拆包与组包的工作,进而完成大量数据包的发送与接收。
在这里插入图片描述

数据帧格式

在这里插入图片描述
在这里插入图片描述

  • 当且仅当TP-Flag==1时,OffsetField,Reserved Field以及More Segement Flag才会存在;
  • 当TP-Flag == 1时,表示当前SOME/IP报文为被分割的报文,即Segement报文;
  • 其中Offset Field 表示当前已发送或者接收的数据量,其基本单位为16Byte,如该值等于92,表示截至目前为止已发送了92X16=1472字节长度的Payload。同时该长度并不包含SOME/IP header的长度。
  • 其中Reserved Field为未来预留,目前默认为0即可;
  • 其中More Segments Flag用来表示是否还有Segement报文,当其值为1时表示还有剩余的Segement,当其值为0时则表示没有剩余的Segement,当前Segement就是最后一条。

通信过程

1:发送
对于发送一个基于UDP完整的SOME/IP报文而言,报文的发送需要经历以下几个模块:

  • 应用层调用Rte_Send函数来实现数据SOME/IP序列化;
  • 通过LdCom模块间接调用SomeIpTp_Transmit来开启发送;
  • 通过循环调用SOME/IP-TP的主函数来遍历发送每一个Segement;
  • 同时发送出去的报文也会回复Txconfirmation中断最终传递至RteLdCom模块;
    在这里插入图片描述
    2:接收
    针对被分割的segment,接收方需要通过下列几个步骤进行接收:
  • 通过SoAd模块来获取来自总线的SOME/IP数据;
  • PDUR模块接收到来自SoAd模块的数据后会触发SomeIpTp_Rxindicaion表明存在segement数据,准备开启接收;
  • SOME/IP-TP模块通过调用PDUR_SomeIpTpStartOfReception开启接收第一个Segement;
  • 剩余的Segment则可以通过不断触发PDUR_SomeIpTpCopyRxData来接收,最终传送至RTE层;
  • 当最后一个segment被接收到后,则通过调用函数PduR_SomeIpRxIndication来完成最终的接收并使得RTE反序列化给到应用层读取;
    在这里插入图片描述

参考资料

https://zhuanlan.zhihu.com/p/253077443
https://blog.csdn.net/wjz110201/article/details/114585913
https://blog.csdn.net/usstmiracle/article/details/112986659
http://www.360doc.com/showweb/0/0/1081107501.aspx

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值