Fastdds中的端口号计算
源代码路径在端口参数的头文件 PortParameters.h
参数分析:
- portBase:基端口号,默认值为 7400(符合 OMG RTPS 规范)。
- domainIDGain:域增量,默认值为 250,用于区分不同 Domain ID 的端口。
- participantIDGain:参与者增量,默认值为 2,用于区分同一域内不同参与者的端口。
- offsetd0:组播发现端口的偏移量,默认值为 0。
- offsetd1:单播发现端口的偏移量,默认值为 10。
- offsetd2:组播用户数据端口的偏移量,默认值为 1。
- offsetd3:单播用户数据端口的偏移量,默认值为 11。
这些默认值遵循 OMG RTPS 规范,确保不同域和参与者之间的端口分配通常不会冲突。
- 根据 Domain ID 计算组播发现端口号
- port = portBase + domainIDGain * domainId + offsetd0
- 使用默认值(portBase = 7400, domainIDGain = 250, offsetd0 = 0):
- 对于 DomainID = 1,端口 = 7400 + 250 * 1 = 7650。
- 对于 DomainID = 0,端口 = 7400。
- 端口检查:如果计算出的端口号超过 65535(TCP/UDP 端口上限),记录错误日志并退出程序,提示 Domain ID 或基端口号可能过大。
- 根据 Domain ID 和 Participant ID 计算单播发现端口号。
- 公式:
port = portBase + domainIDGain * domainId + offsetd1 + participantIDGain * RTPSParticipantID
- 使用默认值(portBase = 7400, domainIDGain = 250, offsetd1 = 10, participantIDGain = 2):
- 对于 DomainID = 0,ParticipantID = 0,端口 = 7400 + 0 + 10 + 2 * 0 = 7410。
- 对于 DomainID = 0,ParticipantID = 1,端口 = 7400 + 0 + 10 + 2 * 1 = 7412。
- 使用默认值(portBase = 7400, domainIDGain = 250, offsetd1 = 10, participantIDGain = 2):
- 端口检查:同组播端口,检查端口号是否超过 65535,超限时记录错误并退出。
- 端口号计算:
- PortParameters 类用于 FastDDS 的 RTPS 协议实现,自动为 DDS 参与者分配组播和单播端口。
- 组播端口用于发现阶段的广播消息,单播端口用于参与者之间的点对点通信。
- 避免端口冲突:
- 通过 domainIDGain 和 participantIDGain,确保不同 Domain ID 和 Participant ID 的端口号唯一。
- 例如,DomainID = 0 的参与者使用 7410、7412 等端口,而 DomainID = 1 的参与者使用 7660、7662 等端口。
- 错误处理:
- 如果端口号超过 65535,程序会终止并输出错误信息,提示用户检查 Domain ID 或端口配置。