2

我仍在尝试了解 DDS 及其概念。我有一个配置,其中 2 台笔记本电脑运行基于 dds 的应用程序。我的环境不允许多播,所以我决定进行点对点连接(单播)。为了将两台笔记本电脑放在同一个网络中,我使用以太网电缆连接它们(不确定是否有必要)。

现在我没有更改 QoS 中的任何内容,即我没有为单播做任何设置。但现在我的应用程序正在相互通信。

问题 :

  1. 参与者是如何被发现的?多播?因为我没有为单播做任何设置。
  2. 如果我想使用单播,是否有必要将它们置于一个网络下,即用以太网电缆连接?

编辑 :

配置如下:

  • 第一台笔记本电脑:Windows 操作系统:基于本机 DDS 的应用程序:发布者:不允许多播。
  • 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
4

2 回答 2

3

开箱即用,DDS 需要支持多播和单播发现。匿名连接通过多播处理。如果您知道收件人的 IP 地址,您可以手动将这些地址配置到单播发现列表中(每个供应商都有自己的方式来命名/处理此列表)。

在大多数情况下,“我们的网络上不允许多播”意味着您的 IT 部门已在定义您的网络的结构的交换机(或多个交换机)上关闭了多播数据包转发。

但是,出厂时符合标准的 DDS 配置不了解此本地策略(怎么可能?)。如果您没有根据当地政策更改配置,DDS 参与者仍将尝试通过多播进行连接,因为您尚未将其关闭。

如果使用 DDS 的机器连接到同一个集线器或非托管交换机(此处定义为您的 IT 部门不关心或配置错误的交换机),并且网络拓扑不跨越托管交换机,并且他们使用默认配置,他们找到彼此,然后他们使用多播匿名发现

弄清楚如何配置您的 DDS 实现,以添加需要通信的机器的单播 IP 地址。因为发现通常只需要在一个方向上(如果 A 发现 B,那么 B 确实发现了 A,假设 A 和 B 都没有配置为忽略另一个 [1])。

一旦您配置了单播发现,您就可以配置为无组播。如果机器在 IP 跳跃网络(WiFi 等)上,除非 DDS 实现理解多路径,否则会很困难。与供应商交谈,看看是否是这种情况。

[1] 如果不是过度可配置,DDS 什么都不是。

于 2018-08-30T15:49:31.577 回答
2

参与者是如何被发现的?多播?因为我没有为单播做任何设置。

我不可能完全肯定地回答这个问题,因为您使用 DDS 作为 ROS2 框架的一部分,而且我不熟悉如何将两者设置为一起交互的确切细节。话虽如此,从您的描述来看,参与者似乎确实在使用多播来发现彼此。

获得结论性答案的最佳方法是嗅探网络——假设您拥有这样做所需的权限。例如,您可以使用 Wireshark ,它带有一个 RTPS 解析器,允许您过滤 RTPS 消息。(RTPS 是标准化 DDS 有线协议的名称。)检查目标地址,看看是否检测到多播范围内的任何地址。您可以在启动单个基于 DDS 的应用程序时执行此操作。它将立即开始通过网络宣布自己。

如果我想使用单播,是否有必要将它们置于一个网络下,即用以太网电缆连接?

如果要使用单播,则需要知道所有对等节点的 IP 地址或主机名。只要这些对等节点可以通过 UDP 相互访问,您就可以开始了。通常,但并非总是如此,ping会让您知道是否是这种情况。防火墙是导致问题的典型原因。

但是,请注意,不同类型的网络具有自己的特定属性,您可能需要将配置调整为这些属性。例如,通过 WiFi,丢包的可能性(尤其是数据突发)比直接用电线连接节点时要大得多。DDS 允许调整其协议以处理该问题。

于 2018-08-30T15:58:02.680 回答