Locator_t
唯一标识了与远程对等体的通信通道,特定于某个传输协议。例如,在 UDP 传输中,Locator 将包含远程对等体的 IP 地址和端口信息。
Locator 类
- 非抽象类:Locator 类不是一个抽象类,并且没有针对每种传输类型实现特别的实例化。相反,各种传输应将 Locator 类的数据成员映射到其自身的通道识别概念上。例如,在共享内存(Shared Memory)传输中,地址包含本地主机的唯一 ID,而端口表示用于通信缓冲区描述符的共享环形缓冲区。
有关如何配置 DomainParticipant 以监听进入流量的信息,请参见监听定位器(Listening Locators)。
数据成员
Locator 定义了以下数据成员:
成员 | 数据类型 | 描述 |
---|---|---|
kind | int32_t |
传输类型的唯一标识符 |
port | uint32_t |
通道端口 |
address | octet[16] |
通道地址 |
在 TCP 中,locator 的端口被分为物理端口和逻辑端口:
物理端口:由网络设备使用,是操作系统理解的真实端口。它存储在 port 成员的两个最低有效字节中。
逻辑端口:RTPS 端口,用于 RTPS 协议区分不同实体。它存储在 port 成员的两个最高有效字节中。
在 TCP 中,这种区分允许多个 DDS 应用程序使用不同的 RTPS 端口(逻辑端口)共享同一个物理端口,从而只需为所有通信打开一个单独的端口。而在 UDP 中,只有物理端口,即 RTPS 端口,也存储在 port 成员的两个最低有效字节中。
Locator 地址
Locator 地址以16个字节表示,根据所使用协议是 IPv4 还是 IPv6,会有不同的管理方式:
IPv6 地址:利用可用的16个字节表示唯一且全球可寻址。
IPv4 地址:将这16个字节划分为以下三部分,由低到高的重要性排序:
- 4 字节局域网 IP(LAN IP):本地子网标识(UDP 和 TCP)。
- 4 字节广域网 IP(WAN IP):公共 IP(仅 TCP)。
- 8 字节未使用空间。
Locator IPv4 地址示例
+--------+-----------------------------+-----------------------------+
| Unused | WAN address (62.128.41.210) | LAN address (192.168.0.113) |
+--------+-----------------------------+-----------------------------+
8 bytes (TCP only) 4 bytes 4 bytes
Locator IPv6 地址示例
+--------------------------------------------------------------------+
| Address (2001:0000:130F:0000:0000:09C0:876A:130B) |
+--------------------------------------------------------------------+
16 bytes
小结
总之,Locator_t
是用于实现远程通信的重要组件,它通过提供统一的方法来处理不同传输协议下通道的信息,为 Fast DDS 框架中的各类应用程序提供支持。理解其数据结构对于进行网络编程和设计基于 DDS 的系统至关重要。如果需要进一步了解如何操作 WAN 地址,可以查看相关 TCP IPv4 的传输描述符 API 部分。
内容由零声教学AI助手提供,问题来源于学员提问