当前位置 : 主页 > 编程语言 > c语言 >

[FASTDDS]05-DDS库总览

来源:互联网 收集:自由互联 发布时间:2023-09-03
[FASTDDS]05-DDS库总览 架构 应用层:用户应用通过 fast dds 的 API 实现分布式系统通信 Fast DDS 层: DDS 通信中间件的实现。它允许部署一个或多个DDS域,同一域内的 DomainParticipants 通过在 D

[FASTDDS]05-DDS库总览

架构

  • 应用层:用户应用通过fast ddsAPI实现分布式系统通信
  • Fast DDS 层:DDS通信中间件的实现。它允许部署一个或多个DDS域,同一域内的DomainParticipants通过在Domain中的topic来发布/订阅来交换消息。
  • RTPS 层:实现实时发布-订阅(RTPS)协议,以实现与DDS应用程序的互操作性。该层充当传输层的抽象层。
  • 传输层:DDS的传输层,支持各种传输协议,例如UDPTCPSHM

image.png

DDS层

DDS层定义了几个关键的通信元素——用户将会在他们的应用中创建这些元素,然后将DDS应用串联起来,并创建一个以数据为中心的通信系统。DDS实体是任何支持服务质量配置(QoS)并实现侦听器的对象。

  • Qos:每个实体所定义的行为机制
  • Listener:向实体通知应用执行过程中可能的事件的机制

以下为DDS实例的功能和描述:

  • domain:用于定义DDS Domain的正整数。每个Domain Participant都被赋予一个DDS Doamin,因此在相同domainDomain Participant可以进行通信,并且用来隔离不同DDS Domain之间的通信。当创建Domain Participant时,应用开发者必须提供domain的值
  • domain participant:包含其他DDS实例的对象,例如发布者、订阅者、话题。它提供创建前面那些它所包含的实体,并且配置它们的行为
  • publisher:发布者,通过datawritertopic发布数据,将数据写入传输层。它包含并负责创建、配置datawriter——一个发布者可以包含一个或多个datawriter
  • datawriter:负责发布消息的实体。用户创建该实体时,必须提供一个topic与之对应,通过该datawriter发布数据将会写到与之绑定的topic下。发布成功是通过在datawriter history中写入数据更改来完成的
  • DataWriterHisory:这是数据对象的变更列表。当datawriter在指定的topic下发布数据时,将在该数据中创建一个变更记录,这些变更记录将被发送给订阅了该topic的订阅者。
  • Subscriber:订阅者通过data reader订阅指定的topic,它是包含并创建和配置data reader的实体——一个订阅者可以包含一个或多个data reader
  • DataReader:它是订阅者接收发布信息的实体。用户在创建该实体时,必须提供订阅的topic。一个data readerdata reader history中接收消息作为更改
  • DataReaderHistory:它包含DataReader订阅了某个Topic接收的数据对象中的更改
  • Topic:绑定发布者data writer和订阅者data reader的实体

RTPS层

RTPSDDS中传输层的抽象,如上图所示,RTPS有四个实体:

  • RTPSDomain:它是DDS域到RTPS协议的扩展
  • RTPSParticipant:包含其他RTPS实体的实体,通过它可以配置和创建它所包含的其他实体。
  • RTPSWriter:消息的来源。它读取DataWriterHistory中写入的更改,并将其传输到之前匹配的所有RTPSReader
  • RTPSReader:消息的接收实体。它将RTPSWriter报告的更改写入DataReaderHistory

传输层

FAST DDS支持UDPv4UDPv6TCPv4TCPv6SHM等传输协议。默认情况下,DomainParticipant支持UDPv4SHM传输协议,可以通过配置来支持所有的传输协议。

编程和执行模型

fast dds是基于事件的并发模型。接下来将解释fast dds的多线程模型以及可能的事件。

并发与多线程

Fast DDS实现了一个并发多线程系统。每个DomainParticipant生成一组线程来处理后台任务,如日志记录、消息接收和异步通信。Fast DDSAPI是线程安全的,因此你可以从不同的线程无畏地调用同一DomainParticipant上的任何方法。以下是FAST DDS多线程调度工作方式的简要概述:

  • Main thread:由应用管理
  • Event thread:每个domain participant都有一个事件线程,它处理周期型和触发型的时间信号
  • Asynchronous writer thread:这个线程管理所有domain participant的异步写入。即使对于同步写,某些形式的通信也必须在后台启动
  • Reception threads:DomainParticipants为每个接收通道生成一个线程,其中通道的概念取决于传输层

事件驱动架构

DDS通过time-event系统响应特定的条件,并以此进行周期性的调度。因为他们大多数都是DDSRTPS的元数据,因此对于用户大多是不可见的。但是,用户可以通过继承TimedEvent类来自定义周期性的时间事件。

功能特性

FAST DDS具有一些附加功能,用户可以在其应用程序中实现和配置这些功能。

发现协议

发现协议定义了DataWriterDataReader如何匹配同一topic,并在该topic下通过发布和订阅交换共享数据。FAST DDS的发现机制如下:

  • Simple Discovery:默认的发现机制,定义在RTPS标准中,并提供与其他DDS实现的兼容性。此处,DomainParticipants在早期阶段被单独发现,以随后匹配它们实现的DataWriterDataReader
  • Discovery Server:这种发现机制使用集中式发现体系结构,其中服务器充当元数据的hub
  • Static Discovery:DomainParticipant之间相互发现的机制,如果远程的DomainParticipant事先已经知道了每个DomainParticipant中包含的实体(DataReader/DataWriter),则可以跳过这些实体的发现
  • Manual Discovery:该机制仅与RTPS层兼容。它允许用户使用其选择的任何外部元信息通道手动匹配和取消RTPS ParticipantRTPS WriterRTPS Reader

安全

FAST DDS可以通过配置在三个级别事先可插拔的安全性通信:

  • 远程DoaminParticipant安全验证:DDS:Auth:PKI-DH使用可信的身份验证(CA)和ECDSA数字前面算法执行身份验证。它还使用Diffie-Hellman(ECDH)密钥协商协议建立了共享秘密
  • 实体访问控制:DDS:Access:Permissions插件提供DDS DomainTopic层的Domain Participant访问控制
  • 数据加密:DDS:Crypto:AES-GCM-GMAC插件在通过(AES-GCM)中使用高级加密标准(AES)提供经过身份验证的加密

日志

FAST DDS提供扩展的日志系统。Log类是日志系统的入口。它暴露三个宏定义便于日志的使用——EPROSIMA_LOG_INFOEPROSIMA_LOG_WARNINGEPROSIMA_LOG_ERROR。此外,除了已经可用的类别(INFO_MSG、WARN_MSG和ERROR_MSG)之外,它还允许定义新的类别。它使用正则表达式按类别提供筛选,并控制日志记录系统的详细程度。可以在日志记录部分找到可能的日志记录系统配置的详细信息。

XML配置

Fast DDS提供了通过使用XML配置文件更改其默认设置的可能性。因此,用户不需要更改任何代码或重新构建现有应用程序,就可以修改DDS实体的行为。每个用户API功能都有对应的XML tag。因此,可以通过participant标记构建和配置domain participant配置文件,或者分别使用data_writerdata_reader来配置DataWriterDataReader

环境变量

用户可以通过FAST DDS环境变量轻易的定制默认的DDS应用设置。

上一篇:CTF 2023 三道pwn题
下一篇:没有了
网友评论