DDS 协议详细总结
目录
DDS协议 全面详细总结
DDS(Data Distribution Service,数据分发服务)是由OMG(对象管理组织) 标准化的、以数据为中心的发布-订阅(DCPS) 分布式实时通信中间件协议,专为高可靠、低延迟、高可用的分布式硬实时系统设计,是自动驾驶、工业4.0、航空航天、机器人等领域的核心通信标准。
一、标准体系与发展历程
1. 核心标准分层
DDS协议体系分为两大核心层,配套十余项专项规范,形成完整的标准化体系:
| 层级 | 全称 | 核心作用 |
|---|---|---|
| DCPS层 | Data-Centric Publish-Subscribe(以数据为中心的发布订阅层) | DDS的核心顶层规范,定义了实体模型、API接口、以数据为中心的通信范式、QoS策略框架,是应用层直接交互的部分 |
| RTPS层 | Real-Time Publish-Subscribe Protocol(实时发布订阅协议) | DDS的底层线速协议(Wire Protocol),定义了网络传输格式、自动发现机制、可靠传输算法、互操作规范,是不同厂商DDS实现互联互通的基础 |
2. 关键配套规范
- DDS-XTypes:动态数据类型规范,支持运行时动态定义/修改数据结构,无需预编译IDL,提升系统灵活性
- DDS-Security:端到端安全规范,覆盖身份认证、访问控制、数据加密、消息完整性校验、防重放攻击
- DDS-RPC:远程服务调用规范,在发布订阅模型基础上补充同步/异步RPC能力,适配请求-响应场景
- DDS-WebSocket:WebSocket传输绑定规范,支持浏览器端与DDS网络直接通信
- DDS for AUTOSAR Adaptive:车载自适应平台适配规范,满足ISO 26262功能安全要求
- OPC UA over DDS:工业自动化融合规范,打通工业互联网端到端实时通信链路
3. 版本演进
- 2004年:OMG发布DDS 1.0核心标准,正式确立DCPS+RTPS架构
- 2015年:DDS 1.4版本成为行业主流稳定版本,完善QoS与RTPS互操作性
- 2021年:发布DDS 1.5最新版本,优化动态类型、安全机制与边缘计算场景适配
二、核心架构与实体模型
DDS采用面向对象的分层实体架构,所有实体均绑定独立的QoS策略,通过QoS匹配实现发布-订阅的互联互通。
1. 顶层隔离单元:域(Domain)
- Domain是DDS网络的顶层隔离边界,通过唯一的Domain ID标识
- 只有处于同一个Domain的节点才能通信,不同Domain之间完全隔离,可实现多业务网络的物理/逻辑复用
- 一个应用可同时加入多个Domain,适配多业务并行场景
2. 核心实体层级
Domain(域)
└── DomainParticipant(域参与者)
├── Publisher(发布者)
│ └── DataWriter(数据写入者)→ 绑定Topic(主题)
├── Subscriber(订阅者)
│ └── DataReader(数据读取者)→ 绑定Topic(主题)
└── Topic(主题)(1)DomainParticipant(域参与者)
- 应用程序接入DDS域的唯一入口,是所有其他实体的容器
- 管理节点的全局配置、资源分配、自动发现流程,负责与其他节点的Participant建立通信
- 一个应用在单个Domain中通常仅需一个Participant实例
(2)Topic(主题)
- DDS数据分发的核心载体,是发布与订阅的锚点,由主题名称+数据类型唯一标识
- 只有名称、数据类型完全匹配,且QoS兼容的DataWriter与DataReader才能建立通信链路
- 支持实例(Instance) 细分:通过数据结构中的key字段,将一个Topic划分为多个独立实例(如“温度传感器”Topic下,每个传感器ID对应一个实例),实现实例级的生命周期、QoS与历史数据管理
(3)Publisher & DataWriter
- Publisher:发布行为的管理容器,统一管理旗下所有DataWriter的发布策略、流量控制
- DataWriter:数据发布的执行实体,绑定特定Topic,负责数据的序列化、发布、缓存与重传,是应用写入数据的直接接口
(4)Subscriber & DataReader
- Subscriber:订阅行为的管理容器,统一管理旗下所有DataReader的接收策略、事件回调
- DataReader:数据接收的执行实体,绑定特定Topic,负责数据的接收、反序列化、缓存与事件通知,是应用读取数据的直接接口
3. 全局数据空间(GDS)
DDS的核心设计理念是构建一个逻辑上的全局共享数据空间:
- 所有发布者将数据写入GDS,所有订阅者从GDS中读取自己需要的数据
- 应用无需关注数据的来源、数量、网络地址,仅需关注“需要什么数据”,实现极致的三方解耦:
- 时间解耦:发布者与订阅者无需同时在线,可通过持久化机制实现离线数据同步
- 空间解耦:无需知晓对方的IP、端口,通过自动发现实现即插即用
- 流量解耦:异步非阻塞通信,发布与订阅互不阻塞
三、灵魂核心:QoS(服务质量)策略
QoS是DDS区别于其他通信协议的核心能力,通过20+可组合的细粒度策略,精准控制数据的可靠性、实时性、生命周期、资源占用等行为,实现“一套协议覆盖从硬实时控制到非实时数据传输的全场景需求”。
QoS遵循请求-提供(Request-Offer) 匹配原则:订阅端的QoS需求不能超出发布端的提供能力,否则两端无法建立通信。
核心QoS策略分类与说明
| 策略类别 | 核心策略 | 取值与作用 | 典型场景 |
|---|---|---|---|
| 可靠性控制 | Reliability | 1. BEST_EFFORT:尽力而为,无重传,极致低延迟 2. RELIABLE:可靠传输,内置重传与确认机制,保证数据不丢不重 |
控制指令用RELIABLE,视频/点云流用BEST_EFFORT |
| 数据持久化 | Durability | 1. VOLATILE:默认,仅发送给当前在线的订阅者 2. TRANSIENT_LOCAL:DataWriter缓存数据,新订阅者上线自动推送最新数据 3. TRANSIENT:数据缓存在节点内存,节点重启失效 4. PERSISTENT:数据持久化到磁盘,节点重启仍可提供 |
设备状态数据用TRANSIENT_LOCAL,关键配置用PERSISTENT |
| 历史数据管理 | History | 1. KEEP_LAST:仅保留最新N个样本(默认N=1) 2. KEEP_ALL:保留所有未被处理的样本,受资源限制 |
高频传感器数据用KEEP_LAST,关键事件用KEEP_ALL |
| 实时性与生命周期 | Deadline | 发布端承诺数据发布的最大周期,订阅端要求数据接收的最大周期,超时触发离线/故障事件 | 心跳检测、设备在线状态监控 |
| Lifespan | 定义数据样本的过期时间,超时样本自动丢弃,避免旧脏数据影响系统 | 实时控制指令、临时状态数据 | |
| 资源管控 | Resource Limits | 限制最大样本数、最大实例数、最大缓存内存,防止内存溢出 | 嵌入式MCU、资源受限设备 |
| 高可用控制 | Liveliness | 定义发布端的活跃度检测机制,通过心跳确认发布端是否在线,离线自动通知订阅端 | 冗余备份、故障快速切换 |
| Ownership | 1. EXCLUSIVE:排他所有权,仅最高优先级的DataWriter可发布该Topic,实现主备冗余 2. SHARED:共享所有权,多个发布者可同时发布 |
高可靠控制系统、主备冗余架构 | |
| 流量与隔离控制 | Partition | 在Domain内实现二次逻辑隔离,仅同分区的发布/订阅端可匹配 | 多业务系统的同域隔离 |
| TimeBasedFilter | 订阅端设置最小数据接收间隔,自动过滤高频冗余数据,降低CPU/带宽占用 | 高频传感器数据降频、低算力设备适配 |
四、底层核心:RTPS协议
RTPS是DDS的底层传输标准,是DDS实现无中心、低延迟、高可靠、互操作性的核心基石,原生基于UDP/IP设计,同时兼容TCP、共享内存、WebSocket、5G等多种传输层。
1. 核心特性
- 完全分布式无中心:无broker节点,所有节点完全对等,无单点故障,系统可线性扩展
- 原生自动发现机制:内置两大发现协议,实现节点即插即用,无需手动配置任何IP/端口:
- PDP(Participant Discovery Protocol):域参与者发现协议,自动发现同Domain内的所有节点
- EDP(Endpoint Discovery Protocol):端点发现协议,自动发现节点内的DataWriter/DataReader,完成QoS匹配与链路建立
- UDP可靠传输增强:在无连接的UDP之上,实现了比TCP更适合实时场景的可靠传输机制,包括选择性重传、负确认(NACK)、拥塞控制,避免TCP的队头阻塞问题,实现亚毫秒级端到端延迟
- 原生多播支持:默认采用多播实现发现与数据分发,一个发布者对应N个订阅者时,仅需发送一次数据包,大幅降低网络带宽占用,完美适配大规模分布式节点场景
- 强互操作性:所有兼容OMG RTPS标准的DDS实现,均可直接互联互通,无厂商锁定
2. 协议报文类型
RTPS定义了四大类核心报文,覆盖全通信流程:
- 信息报文(Info):用于节点发现、握手与元数据交换
- 数据报文(Data):用于传输业务数据样本,支持带内/带外元数据
- 确认报文(AckNack):用于数据接收确认与重传请求,实现可靠传输
- 心跳报文(Heartbeat):用于发布端活跃度检测与数据完整性校验
五、DDS核心特性
- 无中心高可用架构:无broker节点,所有节点对等,彻底消除单点故障,支持节点动态上下线,系统可用性与扩展性极强
- 以数据为中心的通信范式:区别于MQTT/Kafka的“以消息为中心”,DDS关注数据本身的状态、生命周期与缓存,应用直接获取数据的当前有效状态,无需自行实现数据缓存、过期、同步逻辑
- 细粒度可组合QoS控制:20+QoS策略可灵活组合,精准匹配不同业务的可靠性、实时性、资源占用需求,一套协议覆盖硬实时控制、高速数据分发、离线数据同步等全场景
- 原生即插即用能力:内置自动发现机制,无需手动配置节点地址,节点上线自动完成发现、匹配与链路建立,完美适配动态拓扑的分布式系统
- 极致实时性能:RTPS协议针对实时场景深度优化,亚毫秒级端到端延迟,微秒级抖动,高吞吐量,满足自动驾驶、运动控制等硬实时场景要求
- 端到端安全防护:DDS-Security标准提供全链路安全能力,支持国密算法,符合工业、车载、军工等领域的安全合规要求
- 全平台全场景适配:主流实现支持C/C++、Java、Python、Rust、C#等十余种开发语言,兼容Linux、Windows、VxWorks、QNX、Android、MCU等全平台,覆盖从边缘嵌入式设备到云端服务器的全链路通信
- 标准化生态完善:OMG标准化维护,跨厂商互操作,已成为AUTOSAR Adaptive、ROS2、OPC UA FX、美军NCES等主流体系的标准通信协议
六、主流DDS实现
开源实现
| 实现方案 | 开源协议 | 核心特点 | 典型应用 |
|---|---|---|---|
| Eclipse Cyclone DDS | Apache 2.0 | 轻量级、低内存占用、高性能,ROS2 Humble+默认实现,社区活跃,适配嵌入式与机器人场景 | ROS2机器人、工业IoT、边缘计算 |
| eProsima Fast DDS | Apache 2.0 | 全功能兼容DDS标准,支持共享内存、安全机制、多平台,ROS2 Foxy及之前默认实现,工具链完善 | 自动驾驶、工业自动化、机器人 |
| OpenDDS | MPL 2.0 | 全标准兼容,稳定性强,适配航空航天、国防场景,支持多种传输层 | 军工、航空航天、工业控制 |
商业实现
| 实现方案 | 核心特点 | 典型应用 |
|---|---|---|
| RTI Connext DDS | 行业标杆,全功能全场景覆盖,性能最强,通过DO-178C、ISO 26262、IEC 61508等安全认证,配套完善的调试监控工具链 | 航空航天、国防军工、自动驾驶、医疗设备 |
| ADLINK OpenSplice DDS | 高可用、大规模分布式场景优化,支持超大规模节点部署,适配工业、轨道交通、电信场景 | 智能工厂、轨道交通、电信核心网 |
| CoreDX DDS | 超轻量级,极致裁剪,适配资源极度受限的MCU,通过多项工业安全认证 | 嵌入式终端、工业传感器、车载MCU |
七、典型应用场景
- 自动驾驶与车载电子:是AUTOSAR Adaptive平台的标准通信协议,用于车内域控制器通信、传感器(激光雷达/摄像头/毫米波雷达)数据分发、车控指令传输,满足低延迟、高可靠、功能安全要求,已被国内外主流车企与自动驾驶方案商大规模采用
- 机器人与ROS2:ROS2的底层通信完全基于DDS,解决了ROS1中心化架构的实时性差、单点故障问题,DDS的自动发现、低延迟、可靠传输完美适配工业机器人、服务机器人、移动机器人的分布式控制需求
- 工业4.0与智能制造:是OPC UA FX的核心传输协议,用于PLC、SCADA、MES系统之间的实时通信,适配智能工厂、产线控制、设备状态监控场景,无中心架构避免单点故障,满足工业现场的硬实时控制要求
- 航空航天与国防:美军NCES网络中心体系、F-35战斗机航电系统、卫星地面站、雷达系统均采用DDS,其高可靠、抗毁性、低延迟、安全机制完全匹配军工场景的严苛要求
- 医疗设备:用于手术机器人、医疗影像设备、生命支持系统的通信,符合IEC 60601医疗安全认证,满足高可靠、低延迟的医疗场景需求
- 能源与轨道交通:用于智能电网、变电站自动化、轨道交通信号系统、车载控制系统,适配长距离、高可用、强实时的工业场景
八、DDS与主流通信协议对比
| 对比维度 | DDS | MQTT 3.1.1/5.0 | Kafka | gRPC |
|---|---|---|---|---|
| 核心架构 | 无中心分布式发布订阅 | 中心化broker发布订阅 | 中心化broker发布订阅 | 客户端-服务器RPC |
| 核心范式 | 以数据为中心 | 以消息为中心 | 以消息为中心 | 以服务为中心 |
| 实时性能 | 亚毫秒级硬实时,微秒级抖动 | 毫秒级软实时 | 百毫秒级非实时 | 毫秒级 |
| 单点故障 | 无,全节点对等 | broker单点(集群可缓解) | 依赖broker集群 | 服务端单点 |
| 自动发现 | 原生内置,即插即用 | 不支持,需手动配置 | 不支持 | 不支持 |
| QoS能力 | 20+细粒度可组合策略 | 3级基础QoS | 基于offset的可靠性,无细粒度控制 | 无内置QoS,依赖TCP |
| 多播支持 | 原生深度优化 | 不支持 | 不支持 | 不支持 |
| 资源占用 | 可裁剪,适配MCU到服务器 | 极轻量级,适配低带宽IoT | 重量级,依赖服务器集群 | 轻量级,点对点适配 |
| 核心适用场景 | 硬实时分布式系统、自动驾驶、工业控制、机器人 | 低带宽广域网IoT、智能家居、设备遥测 | 大数据日志采集、离线处理、高吞吐消息队列 | 微服务API调用、点对点服务通信 |
九、优势与局限性
核心优势
- 无中心架构天生高可用,无单点故障,系统扩展能力极强
- 以数据为中心的设计,大幅简化分布式系统的应用开发,无需自行实现数据管理、状态同步、节点发现等基础能力
- 细粒度QoS策略,一套协议覆盖从硬实时控制到非实时数据传输的全场景需求
- 原生多播支持,大规模节点部署下带宽占用远低于TCP-based协议
- 标准化程度高,跨厂商互操作,无厂商锁定,生态成熟完善
- 内置端到端安全机制,符合工业、车载、军工等领域的安全合规要求
局限性
- 学习曲线陡峭:DDS的实体模型、QoS策略、配置项远复杂于MQTT等协议,入门门槛高,需要较深的技术积累
- 资源占用:全功能DDS实现的内存占用高于轻量级MQTT客户端,超低成本MCU场景需使用裁剪版实现
- 多播网络依赖:核心性能优势依赖二层多播支持,部分广域网、云环境不支持多播,需配置隧道或单播,优势大幅下降
- 广域网优化不足:原生设计偏向局域网实时系统,弱网、高延迟广域网场景需额外做传输优化
- 开源工具链薄弱:商业版配套完善的调试、监控、可视化工具,开源版本的工具链能力相对有限