DDS configuration with multicast and unicast
我仍在尝试了解 DDS 及其概念。
我有一个配置,其中 2 台笔记本电脑运行基于 dds 的应用程序。我的环境不允许多播,所以我决定进行点对点连接(单播)。为了将两台笔记本电脑放在同一个网络中,我使用以太网电缆连接它们(不确定是否有必要)。
现在我没有更改 QoS 中的任何内容,即我没有对单播进行任何设置。但现在我的应用程序正在相互通信。
问题:
编辑:
配置如下:
- 第一台笔记本电脑:Windows 操作系统:基于本机 DDS 的应用程序:发布者:不允许多播。
- 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
开箱即用,DDS 需要支持多播和单播发现。匿名连接通过多播处理。如果您知道收件人的 IP 地址,则可以手动将这些地址配置到单播发现列表中(每个 vendor都有自己的方式来命名/处理此列表)。
"我们的网络不允许多播",在大多数情况下,意味着您的 IT 部门已在定义您的网络的结构的交换机(或多个交换机)上关闭了多播数据包转发。
然而,出厂时的、符合标准的 DDS 配置不了解此本地策略(怎么可能?)。如果您没有根据当地政策更改配置,DDS 参与者仍会尝试通过多播进行连接,因为您尚未将其关闭。
如果使用 DDS 的机器连接到同一个集线器或非托管交换机(此处定义为您的 IT 部门不关心或配置错误的交换机),并且网络拓扑不跨越托管交换机,并且它们使用默认配置,并且它们找到彼此,然后它们使用多播匿名发现。
弄清楚如何配置您的 DDS 实施,以添加需要通信的机器的单播 IP 地址。因为发现通常只需要在一个方向上(如果 A 发现 B,那么 B 确实发现了 A,假设 A 和 B 都没有配置为忽略另一个[1])。
一旦您配置了单播发现,您就可以配置为无组播。如果机器在 IP 跳跃网络(WiFi 等)上,除非 DDS 实现理解多路径,否则会很困难。与 vendor交谈,看看是否是这种情况。
[1] 如果不是过度可配置,DDS 什么都不是。
How are the participants being discovered ? Multicasting ? as I did not do any settings for unicasting.
我不可能完全肯定地回答这个问题,因为您使用 DDS 作为 ROS2 框架的一部分,而且我不熟悉如何将两者设置为一起交互的确切细节。话虽如此,从您的描述看来,参与者确实在使用多播来发现彼此。
获得确定性答案的最佳方法是嗅探网络——假设您拥有这样做所需的权限。例如,您可以使用 Wireshark ,它带有一个 RTPS 解析器,允许您过滤 RTPS 消息。 (RTPS 是标准化 DDS 有线协议的名称。)检查目标地址,看看是否检测到多播范围内的任何地址。您可以在启动单个基于 DDS 的应用程序时执行此操作。它将立即开始通过网络宣布自己。
Was it necessary to bring them under one network i.e. connect with ethernet cable if I wanted to use unicasting ?
如果您想使用单播,您需要知道所有对等节点的 IP 地址或主机名。只要这些对等节点可以通过 UDP 相互访问,您就可以开始了。通常,但并非总是如此,
但是,请注意,不同类型的网络具有自己的特定属性,您可能需要根据这些属性调整配置。例如,通过 WiFi,丢包的可能性(尤其是数据突发)比直接用电线连接节点时要大得多。 DDS 允许调整其协议以处理该问题。