目录
DDS
什么是 DDS 协议?
为什么需要 DDS 协议?
DDS 是如何工作的?
DDS的组成
RTPS
什么是 RTPS 协议?
为什么需要 RTPS 协议?
RTPS 是如何工作的?
负向确认机制NACK
DDS
什么是 DDS 协议?
DDS 是一种实时数据分发服务协议,由 OMG(Object Management Group)制定。它为分布式系统提供了一种基于发布/订阅(pub/sub)模型的实时、可靠、高性能的数据通信机制。DDS 已经成为自动驾驶、航空航天、工业自动化等许多实时和安全关键领域的通信标准。
为什么需要 DDS 协议?
在分布式实时系统中,组件之间需要高效、可靠地交换数据。传统的通信方法,如点对点连接或基于消息队列的方法,在某些方面可能无法满足实时性、可扩展性或容错性的需求。DDS 协议的出现解决了这些问题,它提供了以下优势:
- 解耦合:发布/订阅模型允许组件之间松耦合,使它们可以独立开发和更新,同时保持系统的整体稳定性。
- 实时性:DDS 提供了低延迟、高吞吐量的数据传输,满足实时应用的需求。
- 可扩展性:DDS 支持动态发现和自动匹配,使系统可以轻松地添加或删除组件,以适应不断变化的需求。
- 容错性:DDS 支持多种冗余和容错机制,以确保系统的稳定运行。
- 质量保证:DDS 提供了丰富的 QoS(Quality of Service)策略,允许开发者灵活地配置数据传输的性能和可靠性。
DDS 是如何工作的?
DDS 的核心是发布/订阅模型。系统中的组件可以作为发布者(publisher)或订阅者(subscriber)。发布者负责生成数据,而订阅者负责接收和处理数据。数据的传输基于主题(topic),主题是一种描述数据类型和名称的元数据。发布者和订阅者通过主题进行匹配,以便在不需要直接连接的情况下进行通信。
DDS的组成
DDS 还包括以下关键组件和概念:
- 实体(Entity):DDS 中的基本构建块,包括域(domain)、参与者(participant)、主题(topic)、发布者(publisher)、订阅者(subscriber)、数据写入器(data writer)和数据读取器(data reader)。
- 域(Domain):用于对系统进行分区,相互独立的组件可以在同一域中通信,而不会干扰其他域。
- 参与者(Participant):代表系统中的一个节点,管理与域相关的资源。
- QoS 策略:用于配置实体之间的通信行为和性能,例如可靠性、延迟、生存期等。
- RTPS(Real-Time Publish-Subscribe)协议:DDS 的底层传输协议,负责在参与者之间发现和匹配实体,以及传输数据。
RTPS
什么是 RTPS 协议?
全称是Real-Time Publish-Subscribe 协议。
RTPS 是一种实时发布/订阅协议,它是 OMG(Object Management Group)为 DDS(Data Distribution Service)制定的底层传输协议。RTPS 提供了一种机制,用于在分布式系统中的参与者之间发现和匹配实体(例如发布者、订阅者、数据写入器和数据读取器),以及传输数据。RTPS 的目标是提供实时性、可靠性、可扩展性和容错性。
为什么需要 RTPS 协议?
RTPS 协议作为 DDS 的底层传输协议,解决了分布式实时系统中的以下挑战:
- 实时性:RTPS 通过低延迟、高吞吐量的数据传输,满足实时应用的需求。
- 可扩展性:RTPS 支持动态发现和自动匹配,使系统可以轻松地添加或删除组件,以适应不断变化的需求。
- 容错性:RTPS 支持多种冗余和容错机制,以确保系统的稳定运行。
- 互操作性:RTPS 作为一个标准协议,可以与不同厂商的 DDS 实现进行互操作。
RTPS 是如何工作的?
RTPS 协议的核心是一种基于 UDP/IP 的可靠多播/单播传输机制。RTPS 的工作原理可分为以下几个关键部分:
- 实体和地址:RTPS 的基本构建块是实体,包括参与者(participant)、发布者(publisher)、订阅者(subscriber)、数据写入器(data writer)和数据读取器(data reader)。实体通过全局唯一的 GUID(Globally Unique Identifier)进行标识。RTPS 使用多播和单播地址进行通信,以提高传输效率。
- 发现(Discovery):RTPS 实现了一种动态发现机制,允许参与者自动发现网络中其他参与者的存在以及他们的实体。发现过程基于特殊的发现主题(如 "Participant Announcement" 和 "Endpoint Announcement")进行。
- 匹配(Matching):在发现过程之后,RTPS 对实体进行匹配,以便数据写入器和数据读取器之间建立通信关系。匹配过程根据数据类型、主题名称和 QoS(Quality of Service)策略进行。
- 数据传输:RTPS 使用可靠的多播/单播传输机制进行数据传输。可靠性通过一种称为 "NACK-based" 的确认机制实现,其中接收方发送 NACK(Negative Acknowledgment)报文以请求重新传输丢失的数据。
- 心跳(Heartbeat)和确认(Acknowledgment):RTPS 使用心跳和确认报文来检测和确保可靠的数据传输。数据写入器定期发送心跳报文,以通知数据读取器其当前的数据序列号状态。数据读取器则通过发送确认报文来确认已收到的数据或请求缺失的数据
负向确认机制NACK
Negative Acknowledgment(NACK,负向确认)是一种通信协议中用于表示接收方未成功接收到某些数据的信号。在可靠的数据传输机制中,NACK 被用于告知发送方哪些数据包未被正确接收,以便发送方可以重新传输这些丢失或损坏的数据包。
在基于 NACK 的确认机制中,接收方只在发现数据包丢失或损坏时发送 NACK。这与 Positive Acknowledgment(ACK,正向确认)机制不同,ACK 机制要求接收方对每个成功接收到的数据包发送 ACK 信号。
使用 NACK 机制的优势在于,当大部分数据包都被正确接收时,它可以减少网络上的确认信号通信开销。这是因为接收方只在需要重新传输数据包时发送 NACK,而不是对每个接收到的数据包发送 ACK。然而,这种方法在数据包丢失率较高的情况下可能不如 ACK 机制有效,因为可能需要频繁地发送 NACK 信号来请求丢失数据包的重新传输。