一、DDS协议
OSI七层网络模型:物数网传会表应(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
1、本质:通信中间件(会话层协议)
2、发布最小单位:Topic
Topic三要素
(1)数据类型
仅支持OMG Interface Definition Launguage(IDL)定义的数据类型;
支持基本数据结构(eg:short,long,float,string),以及array,sequence,union,enumeration,支持结构体嵌套;
与定义C结构体的语法基本相同;
(2)Topic名称
由用户自己定义,如果要建立通信,pub和sub需要相同的名字
(3)一组QoS策略
上述三者一样,pub和sub才可以建立通信
同一个Topic可以存在多个实例,通过Key来进行区分,eg:#pragma中的id
Topic定义完成后,通过预处理器将IDL文件生成类型库,应用程序可以通过DDS API将这些类型实例化
tutorial::TempSensorType由IDL工具自动生成
3、订阅发布模型(通信形式):DCPS模型
DDS使用称为RTPS(实时发布订阅)的有线协议
4、DDS最重要的特性是以数据为中心,这是与其他很多通信中间件不同的地方。DDS的数据共享以Topic为单元,应用程序能够通过Topic判断其所包含的数据类型,而不必依赖其他的上下文信息。同时,DDS能够按照用户定义的方式自动地进行存储、发布或订阅数据,使应用程序能够像访问本地数据一样去写入或者读取数据。
DDS实现的数据共享可以理解成一个抽象的“全局数据空间”,任何应用程序,不论开发语言,或者运行的操作系统类型,都可以通过相同的方式访问这个“全局数据空间”
5、服务质量QoS
用户可以通过设置QoS策略来控制数据在应用程序之间共享的方式,每个DCPS实体,包括Topic,DataWriter,Publisher,DataReader,Subscriber等,都能够独立配置相应的QoS策略。以下是几种常用的策略
(1)DEADLINE
如果希望某个Topic能够周期更新,可以设置DEADLINE属性。在数据的发布方设置DEADLINE,这意味着应用程序必须以小于DEADLINE的周期去更新Topic,而在数据的订阅方设置DEADLINE,这意味着数据的发布方必须以小于DEADLINE的周期去发布Topic。
(2)LIFESPAN
通过设置LIFESPAN,可以使DataWriter写入的每个数据样本都有一个关联的“到期时间”,超过该时间后,该数据样本不再传送给任何应用程序,并且这些数据将从DataReader缓存中清除。
(3)HISTORY
设置HISTORY属性可以让DataWriter保存并发送旧的采样数据,新的DDS节点如果订阅了相关的Topic,它不仅能够接收到数据的当前值,也能收到一部分历史值,从而了解数据近期的变化趋势
(4)RELIABILITY
为DataWriter设置RELIABILITY属性,可以使数据实现“可靠”的传输,当出现通信错误导致数据采样没有被接收到时,DataWriter会持续重传,直到所有数据被正确接收。
二、SOME/IP协议
1、本质:是定义在传输层(TCP/UDP)之上的面向服务的中间件
2、概述
众所周知,在传统以太网中,OSI将以太网分层七层,但是汽车行业,只有5层,将OSI 5-7层统称为应用层,其中SOME/IP协议是一种应用层协议,运行在TCP/UDP传输协议之上。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。
3、消息格式
上图是SOME/IP数据的格式,除了最下面的Payload之外都属于SOME/IP的header,这里面的字段不一一介绍,只提一下Message Type [8 Bit],它有以下几种取值:
- REQUEST (期待响应的请求)
- REQUEST_NO_RETURN(不期待响应的请求)
- NOTIFICATION(事件通知)
- RESPONSE(响应消息)
- ERROR(报错消息)
REQUEST,REQUEST_NO_RETURN,RESPONSE属于同一类远程过程调用方法,当client有需求的时候,发送一个request消息,server根据这个消息类型(REQUEST或REQUEST_NO_RETURN)来决定是否发送response消息。过程如下图所示。
NOTIFICATION属于事件通知类的服务,首先由client向server订阅服务内容,然后server向client自动发布服务内容。
NOTIFICATION又分为Event和Field 两类,这两类通知都需要首先使用SOME/IP-SD(Service Discovery)来进行服务订阅,然后才能发布通知。区别在于,Event是某一时刻的快照,只是事件通知,而Field除了事件通知之外,还具有Getter和Setter的功能,即对信息进行读写的操作。
Event类
Field类
四、SOME/IP-SD
SOME/IP-SD可以被当作SOME/IP的一种特殊服务,前面提到过,client可以远程调用server提供的服务,或者订阅server发布的内容,那么client是怎么知道server提供哪些服务呢,就是通过SOME/IP-SD来实现服务发现过程的
从上图可见,SOME/IP-SD是一种特殊的SOME/IP格式,它对SOME/IP-SD报文中的Payload进行了定义和实现。而Message ID字段则是固定的0xFF FF 81 00。
SOME/IP-SD提供了两种动态发现服务的机制。一种是Offer Service ,由server向网络上的小伙伴告知它所提供的服务;另一种是Find Service ,由client向别人请求可用的服务。
三、DDS与SOME/IP的区别
1、通信模式
SOME/IP是面向服务的通信,服务端将方法和数据以服务的形式暴露给其他节点。而DDS最大的特点是以数据为中心,侧重数据的分发,这种模式其实很像传统的面向信号的通信,只不过DDS更灵活,功能更强大。
2、应用程序接口
SOME/IP协议标准中没有定义标准API,所以基于不同SOME/IP实现的应用程序一般是不能互相移植的。DDS制定了多种编程语言的标准API,因此DDS应用程序理论上能够在不同的DDS实现上进行移植。
3、传输协议
SOME/IP支持UDP和TCP,此外,从AUTOSAR 4.3开始支持对大于1400字节的UDP数据进行分段传输,即SOME/IP-TP。DDS则使用前面提到的RTPS协议(实时发布订阅的有线协议), 大多数DDS(DDS-RTPS)实现至少支持UDP,TCP和共享内存。 RTPS实现了与传输无关的可靠性和分段协议,理论上可在任何传输形式之上运行。
4、安全性
SOME/IP本身并不提供数据安全的控制,所以它的安全性依赖于传输协议,比如基于IPsec或TLS上运行。DDS当然也可以在IPsec或TLS上运行,但这并不是首选的方式。DDS提供多种插件,实现了对安全性的更细粒度的控制,比如数据的加密传输,读写权限控制,应用程序身份认证等,并且DDS安全机制与传输协议无关,因此使用任何传输协议都不影响安全机制的实现。
5、QoS支持
DDS提供多种QoS策略,而SOME/IP本身不提供QoS的支持,因此只能在传输协议或者应用程序中实现。
6、资源需求
DDS在诸多方面提供了更丰富的特性,这自然就导致了在资源需求上,比如内存占用,比SOME/IP要大得多。
7、AUTOSAR平台支持
AUTOSAR Adaptive平台从2018年起开始支持对DDS的绑定,Classic平台目前还并没有支持DDS绑定的规划。而SOME/IP是针对汽车应用定制的,可以无缝部署在AUTOSAR Adaptive和Classic平台中。
区别总结:
SOME/IP |
DDS |
|
通信模式 |
面向服务(接收方有需求就发送) |
面向数据(全局数据空间,都可以访问) |
应用程序接口 |
没有定义标准API,具体的实 现中通常提供了C++ API |
具有用于多种语言的标准API |
传输协议 |
SOME/IP支持UDP和TCP |
大多数DDS(DDS-RTPS)实现至少支持UDP,TCP和共享内存 |
安全性 |
安全性依赖于传输协议 |
DDS安全机制与传输协议无关,且可用插件来提高安全性 |
QoS支持 |
不提供QoS的支持 |
多种QoS策略 |
资源需求 |
需求大 |
需求小 |
平台支持 |
可部署在AUTOSAR Adaptive和Classic平台中文章来源:https://www.toymoban.com/news/detail-765473.html |
仅AUTOSAR Adaptive文章来源地址https://www.toymoban.com/news/detail-765473.html |
到了这里,关于DDS和SOME/IP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!