目录
1.1 产生背景与动机
1.2 什么是SOME/IP
1.3 SOME/IP与SOA的关系
2011年宝马公司开发设计了一套中间件,该中间件能够实现以服务为导向的通信方式,该中间件区别于传统以信号为导向的通信方式,不仅能够大大减少网络负载以提高通信双方的效率,同时引入以太网通信也能够大大满足未来车辆不断增长的通信需求。
面向信号的数据传输不管网络需不需要始终会不断循环发送,而面向服务的通信方式则不同,只有当网络中至少存在一个接收方需要这些数据时,发送方才会发送数据,这是一种面向服务通信方式的显著优点。
宝马将该面向服务的通信方式叫做SOME/IP(全称为:Scalable service-Oriented MiddlewarE over IP)。正如其名,可见该协议跟以太网密切相关。
没错!SOME/IP就是运行在车载以太网协议栈基础之上的中间件,或者也可以称为应用层软件。
SOME/IP正由于其知名度逐渐被AUTOSAR接纳并计划纳入其正式标准,并且在2014年集成进AUTOSAR 4.X中,几个关键发展节点如下:
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的全称,接下来我们就来通过其全称一起来了解下SOME/IP到底是个什么东西:
Scalable
该协议设计的初衷之一就是为了实现不同硬件平台、不同操作系统或嵌入式固件以及不同应用软件的异构设备之间的可扩展性和互操作性。
service-Oriented
表明它是一种面向服务的基本协议。因此仅当客户端请求或服务器通知特定订阅者时,才在客户端-服务器配置中交换数据 ,这就确保了永远不会浪费带宽,并且仅在需要的时间和地点进行数据通信/交换。
MiddlewarE
它也是一种中间件。即其位于应用层,有自己的通用协议层来处理更具体的操作及应用;
over IP
它也是一个基于以太网的协议。它使用类似的硬件接口,确保高达 100Mbps 的带宽。同时数据通过中间件(即应用层)通过网络电缆使用 TCP/IP 或 UDP 协议进行通信。
当客户端需要来自服务器的数据时,它可由客户端使用 TCP 协议进行请求。如果服务器必须将数据传送给所有活动的订阅者,则可通过 UDP 协议传输。UDP 协议上的数据通信可以是单播、多播或广播。
如下图1所示,就十分清晰地展示了SOME/IP在车载以太网协议栈中的位置以及与其他模块的关系:
图1 SOME/IP 与车载以太网协议栈关系
那么在AUTOSAR协议栈中,SOME/IP协议又处于一个什么样的位置呢?如下图所示:
如上图可知,SOME/IP协议涉及到与RTE,COM,PDUR以及SOAd这些AUTOSAR标准模块的交互,而用于服务发现的SOME/IP-SD则涉及到BswM,SD以及SoAd模块的交互。
SOME/IP协议与各个模块的交互关系会在后续文章讲到,提及于此让大家对SOME/IP协议与AUTOSAR协议栈的关联有个整体概念,此文中不做过多展开。
SOME/IP 最初是作为另一种 RPC 机制开发的,以确保与 AUTOSAR 设备的兼容性并提供汽车用例所需的最大功能,同时它也是专为ECU间客户端-服务器序列化而设计的网络层协议。
目前,该协议可以在多种不同的操作系统上实现,包括 AUTOSAR、OSEK 和 GENIVI。它也可以在不运行操作系统的嵌入式固件上实现。
摄像头、主机、远程信息处理设备、AUTOSAR 设备,甚至信息娱乐系统等大型设备,都可以使用 SOME/IP 协议有效地交换 ECU 间消息。自 Wireshark 3.2 SOME/IP 发布以来,SOME/IP 支持就已公开,可以在 Wireshark 上解析SOME/IP数据。
综上所述,我们便可以总结出SOME/IP作为一种面向服务的通信协议,一种基于车载以太网协议栈基础上的应用层协议的基本特点有哪些,如下表1所示展现了SOME/IP协议的五大基本特点:
表1 SOME/IP协议五大基本特点
SOA简而言之就是一种面向服务的架构(Service-Oriented Architecture),当然也是一种软件设计的重要方式,IT研究与顾问咨询公司 Gartner 在 1996 年提出的,其本身并不是新鲜概念,而且已经在IT互联网领域风靡了20余年。
按照W3C对它的定义:“SOA是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
服务: 服务是一种比构件粒度更大的信息集合,实际是包含实现了多个关联业务需求的逻辑组合,并且允许每个服务使用特定的平台,架构或技术方案。
可调用接口: 面向服务的接口不同于构件的接口,他的实现与特定语言无关,与特定的平台也无关,可十分方便的实现不同异构平台的交互。
联系与区别: