fastdds:传输层端口号计算规则
当使用UDP或者SHM作为传输层时我们经常看到7400、7410、7411、7412这些端口号。那么这些端口号是怎么计算出来的又有什么用呢如下图所示使用fastdds中的例子delivery_mechanisms指定传输层为UDPv4启动了两个publisher。启动的第一个publisher使用了端口号7400、7410、7411第二个publisher使用了端口号7400、7412、7413。dds流量有两类发现流量和用户流量。发现流量(PDP/EDP)用于particiapant以及data writer/data reader之间的发现用户流量用于收发用户数据。发现流量需要用到多播和单播。发现流量是用户流量的基础只有相互发现的data writer/data reader之间才能够进行数据传输。发现流量作为dds工作的基础和发起点本身没有前置条件所以在同一个domain内发现流量多播端口号需要时众所周知的。发现流量多播端口PB DG *domainId d0多播端口只受domaiId影响所以在同一个domain内的所有participant均使用相同的多播端口这也说明只有在同一个domain内的participant才能相互发现。默认情况下组播地址是239.255.0.1不同的domain变的只有端口多播地址不会变。每一个participant创建之后都要通过多播的方式向多播组内发布自己的信息。发现过程除了使用多播还会使用单播。假如一个domain内有3个participant分别为A、B、C。假如A发布的多播消息那么B和C都会收到如果B和A之间有相同topic的writer和reader也就是说B和A是可以通信的那么B就会向A发送单播消息进行后续的协商后边的协商过程均通过单播来实现。这里跟tcp建立连接的过程是有些相似的tcp建立连接时客户端需要向服务端发起连接tcp服务端接收连接请求的是监听套接字这个套接字类似于多播流量当监听套接字收到连接请求后会在创建一个新的套接字与客户端形成连接后边的用户流量都通过新的套接字来进行。发现流量单播端口PB DG *domainId d1 PG *participantId如果domainId是0participantId也是0那么发现流量的多播端口是7400单播端口是7410。在函数RTPSParticipantImpl::createReceiverResources中首先使用7410端口进行绑定如果失败那么会进行重试重试就是重新选择一个新的端口来使用。在函数RTPSParticipantImpl::applyLocatorAdaptRule中选择新的端口选择新的端口的算法就是在端口的基础上加上delta默认情况下delta是2。单播端口在多播报文中会携带。单播端口也不完全由domainId和participantId来决定。participantId的分配如下代码所示同一个进程的同一个domain内participantId都是从0开始的也就是说participantId并不是domain内唯一的而是domain和进程内唯一的。如果我们使用udp传输层但是publisher和subscriber在同一台机器上的两个进程中那么两者的participantId都是0那么两个进程都要使用单播端口7410吗这样显然是不对的。uint32_t RTPSDomainImpl::getNewId(){// Get the smallest available participant ID.// Settings like maxInitialPeersRange control how many participants a peer// will look for on this host.// Choosing the smallest value ensures peers using unicast discovery will// find this participant as long as the total number of participants has// not exceeded the number of peers they will look for.uint32_t i 0;while (m_RTPSParticipantIDs[i].reserved || m_RTPSParticipantIDs[i].used){i;}m_RTPSParticipantIDs[i].reserved true;return i;}bool RTPSParticipantImpl::createReceiverResources(LocatorList_t Locator_list,bool ApplyMutation,bool RegisterReceiver,bool log_when_creation_fails){...for (auto it_loc input_list.begin(); it_loc ! input_list.end(); it_loc){Locator_t loc *it_loc;bool ret m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);if (!ret ApplyMutation){uint32_t tries 0;while (!ret (tries m_att.builtin.mutation_tries)){tries;applyLocatorAdaptRule(loc);ret m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);}}...}Locator_t RTPSParticipantImpl::applyLocatorAdaptRule(Locator_t loc){// This is a completely made up rule// It is transport responsibility to interpret this new port.uint16_t delta m_att.port.participantIDGain;if (metatraffic_unicast_port_ loc.port){metatraffic_unicast_port_ delta;//这就是各种gain的用途是在判断端口号已经被占用的时候进行步进选择的}loc.port delta;return loc;}一般情况下用户的流量使用单播来进行计算公式如下。同样的如果单播端口已经被占用那么就会进行重试重试的算法是在上一个端口的基础上加2。用户流量单播端口PB DG *domainId d3 PG *participantId这样我们就能知道下图中的端口分别是做什么用的了7400两个进程的都会使用的组播端口用于发现流量7410:5013进程发现流量的单播端口7411:5013进程用户流量的单播端口7412:5025进程发现流量的单播端口7413:5025进程用户流量的单播端口共享内存借用UDP中端口的概念还是使用例子delivery_mechanisms指定传输层是SHM在/dev/shm下可以看到如下文件其中7400、7410、7411、7412、7413也是用来标记通信的端口。共享内存和UDP都是dds中标准的传输层都是带port的传输层。

相关新闻

TimeSformer-pytorch与Rotary Position Embedding:位置编码的终极解决方案

TimeSformer-pytorch与Rotary Position Embedding:位置编码的终极解决方案

TimeSformer-pytorch与Rotary Position Embedding:位置编码的终极解决方案 【免费下载链接】TimeSformer-pytorch Implementation of TimeSformer from Facebook AI, a pure attention-based solution for video classification 项目地址: https://gitcode.com/gh…

2026/7/30 15:44:13 阅读更多 →
AWS Service Operator 代码生成器揭秘:如何扩展支持新的 AWS 服务

AWS Service Operator 代码生成器揭秘:如何扩展支持新的 AWS 服务

AWS Service Operator 代码生成器揭秘:如何扩展支持新的 AWS 服务 【免费下载链接】aws-service-operator AWS Service Operator allows you to create AWS resources using kubectl. 项目地址: https://gitcode.com/gh_mirrors/aw/aws-service-operator AWS…

2026/7/28 0:00:32 阅读更多 →
碧蓝航线自动化脚本Alas终极指南:7x24小时解放双手的完整解决方案

碧蓝航线自动化脚本Alas终极指南:7x24小时解放双手的完整解决方案

碧蓝航线自动化脚本Alas终极指南:7x24小时解放双手的完整解决方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …

2026/7/27 12:50:35 阅读更多 →

最新新闻

Prompt工程不是玄学:基于2376组A/B测试的指令设计公式(含数学推导+效果提升32.7%实证)

Prompt工程不是玄学:基于2376组A/B测试的指令设计公式(含数学推导+效果提升32.7%实证)

更多请点击: https://intelliparadigm.com 第一章:Prompt工程不是玄学:基于2376组A/B测试的指令设计公式(含数学推导效果提升32.7%实证) Prompt工程的本质是可控的信息映射过程,而非经验主义的“咒语调参”…

2026/7/30 16:50:15 阅读更多 →
揭秘AI配音自然停顿背后的语音学原理:3步精准控制呼吸感、语义停顿与情感节奏

揭秘AI配音自然停顿背后的语音学原理:3步精准控制呼吸感、语义停顿与情感节奏

更多请点击: https://intelliparadigm.com 第一章:AI配音自然停顿的语音学本质与技术挑战 自然停顿并非语音的“空白”,而是承载语义边界、句法结构与认知节奏的关键韵律线索。在人类语音产出中,停顿受语调短语(Into…

2026/7/30 16:50:15 阅读更多 →
SAP-I肽的生物活性解析与生殖医学应用

SAP-I肽的生物活性解析与生殖医学应用

1. 项目概述:SAP-I (Speract) 肽的生物活性解析 第一次在实验室里观察到海胆精子因SAP-I肽而突然加速运动的场景时,那种微观世界里的"化学对话"令人震撼。Speract(全称Sperm Activating Peptide-I)是从紫球海胆&#xf…

2026/7/30 16:50:15 阅读更多 →
解决UE4.27在VS2022中无法生成项目文件的完整指南

解决UE4.27在VS2022中无法生成项目文件的完整指南

1. 项目概述:当UE4.27在VS2022中“罢工” 如果你是一名使用虚幻引擎4(UE4)进行游戏或应用开发的从业者,那么你大概率已经将主力开发环境升级到了Visual Studio 2022。VS2022在性能、C标准支持和界面体验上的提升,对于U…

2026/7/30 16:50:15 阅读更多 →
功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用

功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用

1. 从“开关”说起:为什么我们需要这么多功率器件? 如果你拆开过家里的电磁炉、变频空调,或者研究过电动汽车的电机控制器,大概率会看到一块布满各种“大块头”元器件的电路板。这些“大块头”里,GTO、GTR、MOSFET和IG…

2026/7/30 16:50:15 阅读更多 →
汤头APP商业版后台怎么上架商家自己的产品?来看这份操作指南

汤头APP商业版后台怎么上架商家自己的产品?来看这份操作指南

对于理疗馆、食疗养生馆、社区康养门店而言,拓客难、输出标准化养护方案更难——缺的往往不是好产品,而是能让产品“找到对的人”的专业能力。汤头APP商业版的后台商品上架功能,正是为了解决这一痛点而设计。完成商业版账号注册审核之后&…

2026/7/30 16:49:14 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻