当前位置: 首页 > news >正文

DDS通信支持UDP与TCP

DDS消息中间件在通信时既支持TCP也支持UDP具体采用哪种传输协议取决于多种因素包括应用场景、QoS服务质量配置以及底层DDS实现的具体设计。这两种协议各有其适用场景DDS通过其灵活的架构和丰富的QoS策略来适配不同的需求。1. DDS支持的传输协议根据FastDDS等主流实现的特性DDS的通道层支持多种传输协议 。主要包含传输协议描述典型应用场景UDP无连接、尽力而为的传输协议具有低延迟、低开销的特点。对实时性要求高、允许少量数据丢失的场景如传感器数据流、视频流 。TCP面向连接、可靠的传输协议保证数据顺序和可达性但延迟和开销相对较高。要求数据可靠、完整传输的场景如关键控制指令、配置信息同步 。SHM (共享内存)在同一台主机内的进程间进行通信速度极快零拷贝。同一节点上不同进程或线程间的高性能数据交换 。TCPv4/TCPv6, UDPv4/UDPv6分别对应IPv4和IPv6网络环境下的TCP和UDP协议。跨网络通信适应不同的网络基础设施 。DDS的设计允许在同一应用甚至同一数据流中根据不同的数据主题Topic或服务质量要求混合使用这些传输方式 。2. 协议选择的决定因素选择UDP还是TCP主要由以下几个核心因素决定2.1 QoS策略配置QoS策略是DDS的核心直接决定了通信的行为和底层传输协议的选择 。可靠性要求 (ReliabilityQosPolicy)BEST_EFFORT_RELIABILITY_QOS(尽力而为): 此策略不保证数据一定送达通常与UDP协议配对使用以追求最低的延迟和最高的吞吐量 。RELIABLE_RELIABILITY_QOS(可靠传输): 此策略保证数据可靠、有序地送达订阅者。它通常基于TCP协议实现因为TCP本身提供了重传、确认和排序机制。值得注意的是一些DDS实现如FastDDS也能在UDP之上通过应用层协议如RTPS实现可靠传输但这通常会增加复杂性和开销。DataWriter和DataReader的QoS必须兼容才能建立连接兼容性如下表所示 DataWriter 可靠性策略DataReader 可靠性策略是否兼容BEST_EFFORT_RELIABILITY_QOSBEST_EFFORT_RELIABILITY_QOS是BEST_EFFORT_RELIABILITY_QOSRELIABLE_RELIABILITY_QOS否RELIABLE_RELIABILITY_QOSBEST_EFFORT_RELIABILITY_QOS是RELIABLE_RELIABILITY_QOSRELIABLE_RELIABILITY_QOS是实时性要求对于需要极低延迟的硬实时系统如机器人关节控制、飞行器姿态调整通常优先选择UDP并配合BEST_EFFORT可靠性策略避免TCP重传机制引入的不确定延迟 。对于软实时系统或对延迟有要求但更注重数据完整性的场景可以使用基于TCP的可靠传输并通过优化缓冲区、调整心跳间隔等QoS参数来平衡延迟和可靠性 。2.2 网络环境与通信范围本地通信 (同一主机): 即使配置为使用TCP或UDP数据包也会通过操作系统的回环接口Loopback进行传输不经过物理网卡速度非常快 。此时选择TCP或UDP的性能差异远小于网络传输。更优的选择是SHM共享内存它能完全绕过网络协议栈实现最高效的进程间通信 。广域网/不稳定网络: 在丢包率高、延迟大的网络中TCP的拥塞控制和重传机制可能导致性能急剧下降。此时采用基于UDP的定制可靠传输协议如DDS自身的RTPS over UDP有时能通过更激进的策略获得更好的表现但这需要仔细调优 。2.3 DDS实现与RTPS协议DDS标准定义了应用层的API和语义而实际的网络互通性由RTPSReal-Time Publish-Subscribe协议保障 。RTPS是DDS的Wire Protocol它可以在TCP或UDP上运行。RTPS over UDP: 这是最常见的配置尤其在对实时性要求高的领域如ROS 2默认使用Fast DDS的UDP传输。RTPS协议在UDP之上实现了发现、心跳、确认等机制可以在需要时提供应用层的可靠性。RTPS over TCP: 当需要穿越防火墙TCP端口更易配置或与仅支持TCP的遗留系统集成时会使用此方式。它利用TCP的流特性简化了RTPS的部分设计 。3. 配置示例与代码片段以下是一个简化的FastDDS QoS配置示例展示了如何为DataWriter设置传输协议和可靠性策略。// 示例创建一个使用UDP且为尽力而为可靠性的Publisher #include fastdds/dds/domain/DomainParticipant.hpp #include fastdds/dds/publisher/Publisher.hpp #include fastdds/dds/publisher/DataWriter.hpp #include fastdds/dds/publisher/qos/DataWriterQos.hpp #include fastdds/rtps/transport/UDPv4TransportDescriptor.h // 创建Participant和Publisher的代码省略... // 1. 创建DataWriter的QoS对象 eprosima::fastdds::dds::DataWriterQos writer_qos; // 2. 配置可靠性策略为“尽力而为”通常隐式选择UDP writer_qos.reliability().kind eprosima::fastdds::dds::BEST_EFFORT_RELIABILITY_QOS; // 3. 可选显式指定UDP传输并配置其参数 auto udp_transport std::make_sharedeprosima::fastdds::rtps::UDPv4TransportDescriptor(); udp_transport-sendBufferSize 65536; // 设置发送缓冲区大小 udp_transport-receiveBufferSize 65536; // 设置接收缓冲区大小 // 获取Participant的属性并添加自定义传输 eprosima::fastdds::dds::DomainParticipantQos participant_qos; // ... 初始化participant_qos ... participant_qos.transport().user_transports.push_back(udp_transport); // 4. 使用配置好的QoS创建DataWriter eprosima::fastdds::dds::DataWriter* writer publisher-create_datawriter(topic, writer_qos);注释此代码片段展示了在FastDDS中配置QoS的基本方法。通过设置reliability().kind来选择可靠性策略这间接影响了底层传输协议的选择。也可以显式创建并配置UDP传输描述符以实现更精细的控制 。4. 总结与最佳实践建议场景特征推荐传输协议关键QoS配置理由高频传感器数据如激光雷达点云UDPBEST_EFFORT_RELIABILITY, 调整HistoryQosPolicy的 depth容忍偶发丢帧追求最低延迟和最高吞吐量 。关键控制指令如紧急停止命令TCP(或可靠的RTPS over UDP)RELIABLE_RELIABILITY,DEADLINE_QOS必须保证指令100%可靠送达并可能要求定期心跳确认 。同一主机内进程通信SHM (共享内存)使用SHM传输描述符零拷贝性能远超基于套接字的TCP/UDP 。跨复杂网络如4G/5G车联网TCP或定制UDPLIVELINESS_QOS(设置租约期限),RESOURCE_LIMITS_QOSTCP更易穿透网络设备若用UDP需加强应用层心跳和重传逻辑以应对网络抖动 。核心结论DDS消息中间件不强制使用单一的TCP或UDP。它是一个高度可配置的系统允许开发者根据数据的重要性、实时性要求和网络条件通过QoS策略为每个数据主题Topic选择最合适的传输方式。在实际工程中通常会在同一个DDS域Domain内混合使用多种传输协议以满足不同子系统或数据流的差异化需求 。设计时应首先明确数据的可靠性和实时性等级再据此选择对应的QoS策略而底层传输协议TCP/UDP往往是该策略选择的自然结果。参考来源DDS通信协议与安全实践通讯协议篇底层TCP/UDP上层MQTT、HTTP、CoAP、DDS、AMQP、JMS实现层RabbitMQ、ActiveMQ、KafkaDDS通信协议与安全实践ros2通信核心之DDS简介DDS通信原理深度解析学习笔记关于DDS中TCP与UDP传输方式的思考
http://www.gsyq.cn/news/1398354.html

相关文章:

  • AI Agent实战教程:用LangGraph构建Multi-Agent协作系统
  • Lovable运维平台从0到1搭建全流程:7步实现自动化、可观测性与DevOps无缝集成
  • 保姆级教程:用STM32CubeMX和HAL库配置CAN扩展帧过滤器(掩码模式)
  • LLM安全攻防:对抗攻击原理与防御实践
  • 2026年Q2智慧酒店OLT光网系统专业厂家排行:智慧酒店RCU客房控制系统、智慧酒店升级改造方案及报价、智慧酒店客房系统选择指南 - 优质品牌商家
  • 从用户分群到商品推荐:K-Means和KNN在电商数据分析里的真实应用案例
  • 高光谱数据降维实战:鲁棒局部流形表示(RLMR)算法解析与应用
  • 文档级神经机器翻译:基于全局与局部嵌入的工程实践
  • 【AI面试临阵磨枪-73】金融 AI 安全:风控、反欺诈、合规、幻觉、隐私保护
  • pandas数据清洗实战:从脏数据到分析就绪的工程化流程
  • Burp Suite Sequencer深度解析:会话Token不可预测性验证实战
  • Apache Superset认证绕过漏洞CVE-2023-27524深度解析
  • 安卓so动态调试实战:5步精准定位关键函数
  • PyTorch多GPU训练避坑指南:CUDA_VISIBLE_DEVICES和DataParallel的正确打开方式
  • YOLO26实现布料缺陷自动化检测(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)
  • 吴恩达深度学习笔记:手把手教你用Python实现一个4层神经网络(附完整代码)
  • CentOS 7网络配置踩坑实录:从‘网络不可达’到完美联通的避坑指南
  • 为什么92%的企业AI项目将在2028年前失效?从Transformer到Neuromorphic AI的工具代际断层全解析
  • 别再死磕CNN了!用GCN搞定社交网络好友推荐,Python代码实战(附避坑指南)
  • 从特征选择到模型压缩:聊聊L1范数在实战中的那些‘神奇’应用(附Sklearn代码)
  • 如何高效处理小红书链接解析:完整异常修复与下载指南
  • AI智能体持久记忆系统构建:从RAG架构到向量数据库实战
  • 从开发到上线:UniApp小程序跳转全环境(develop/trial/release)配置指南
  • Vivado-ECO实战:巧用网表修改,精准定位并修复硬件调试难题
  • 2026-05-26 GitHub 热点项目精选
  • 2025-2026年本地生活服务商推荐:五大专业评测夜宵引流技巧案例适用场景
  • 避坑指南:Unity用C#获取系统时间,别忘了时区、性能和格式化这三点!
  • 通过taotoken用量看板分析并优化ai应用月度消耗的实践
  • 2026年AI获客工具避坑:防4类收费虚高套路
  • 拯救者工具箱:联想笔记本性能优化终极指南