具有多播和单播的 DDS 配置
DDS configuration with multicast and unicast
我仍在努力理解 DDS 及其概念。
我有一个配置,其中 2 台笔记本电脑 运行 基于 dds 的应用程序。我的环境不允许多播,所以我决定采用点对点连接(单播)。为了将两台笔记本电脑置于同一网络中,我使用以太网电缆将它们连接起来(不确定是否有必要)。
现在我没有更改 QoS 中的任何内容,即我没有为单播进行任何设置。但是现在我的应用程序正在相互通信。
问题:
- 如何发现参与者?多播?因为我没有做任何单播设置。
- 如果我想使用单播,是否有必要将它们置于一个网络下,即使用以太网电缆连接?
编辑:
配置如下:
- 第一台笔记本电脑:Windows OS:基于本机 DDS 的应用程序:发布者:不允许多播。
- 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
开箱即用,DDS 需要支持多播和单播发现。匿名连接通过多播处理。如果您知道收件人的 IP 地址,您可以手动将这些地址配置到单播发现列表中(每个供应商都有自己的方式来 name/process 此列表)。
"Multicast is not permitted on our network",在大多数情况下,意味着您的 IT 部门已在定义网络结构的交换机(或交换机)上关闭多播数据包转发。
然而,出厂时符合标准的 DDS 配置不知道此 local 策略(怎么可能?)。如果您没有根据您的本地策略更改配置,DDS 参与者仍然 将尝试通过多播连接,因为您没有关闭它。
如果使用 DDS 的机器连接到同一个集线器或非托管交换机(此处定义为您的 IT 部门不关心或配置错误的交换机),并且网络拓扑不交叉一个 managed 交换机,他们使用默认配置,他们找到彼此,然后 他们使用多播匿名发现.
弄清楚如何配置您的 DDS 实现,以添加需要通信的机器的单播 IP 地址。因为 discovery 通常只在一个方向上需要(如果 A 发现 B,那么 B 确实发现了 A,假设 A 和 B 都没有配置为忽略另一个[1]) .
配置单播发现后,您可以配置非多播。如果机器在 IP 跳频网络(WiFi 等)上,除非 DDS 实现了解多路径,否则这将很困难。与供应商交谈,看看是否属于这种情况。
[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 相互访问,就可以开始了。通常,但并非总是如此,ping
会让您知道是否属于这种情况。防火墙是导致问题的典型原因。
但是,请注意,不同类型的网络具有自己的特定属性,您可能需要调整配置以适应这些属性。例如,通过 WiFi,数据包被丢弃的可能性(尤其是数据突发)比直接用电线连接节点时要大得多。 DDS 允许调整其协议来处理该问题。
我仍在努力理解 DDS 及其概念。 我有一个配置,其中 2 台笔记本电脑 运行 基于 dds 的应用程序。我的环境不允许多播,所以我决定采用点对点连接(单播)。为了将两台笔记本电脑置于同一网络中,我使用以太网电缆将它们连接起来(不确定是否有必要)。
现在我没有更改 QoS 中的任何内容,即我没有为单播进行任何设置。但是现在我的应用程序正在相互通信。
问题:
- 如何发现参与者?多播?因为我没有做任何单播设置。
- 如果我想使用单播,是否有必要将它们置于一个网络下,即使用以太网电缆连接?
编辑:
配置如下:
- 第一台笔记本电脑:Windows OS:基于本机 DDS 的应用程序:发布者:不允许多播。
- 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
开箱即用,DDS 需要支持多播和单播发现。匿名连接通过多播处理。如果您知道收件人的 IP 地址,您可以手动将这些地址配置到单播发现列表中(每个供应商都有自己的方式来 name/process 此列表)。
"Multicast is not permitted on our network",在大多数情况下,意味着您的 IT 部门已在定义网络结构的交换机(或交换机)上关闭多播数据包转发。
然而,出厂时符合标准的 DDS 配置不知道此 local 策略(怎么可能?)。如果您没有根据您的本地策略更改配置,DDS 参与者仍然 将尝试通过多播连接,因为您没有关闭它。
如果使用 DDS 的机器连接到同一个集线器或非托管交换机(此处定义为您的 IT 部门不关心或配置错误的交换机),并且网络拓扑不交叉一个 managed 交换机,他们使用默认配置,他们找到彼此,然后 他们使用多播匿名发现.
弄清楚如何配置您的 DDS 实现,以添加需要通信的机器的单播 IP 地址。因为 discovery 通常只在一个方向上需要(如果 A 发现 B,那么 B 确实发现了 A,假设 A 和 B 都没有配置为忽略另一个[1]) .
配置单播发现后,您可以配置非多播。如果机器在 IP 跳频网络(WiFi 等)上,除非 DDS 实现了解多路径,否则这将很困难。与供应商交谈,看看是否属于这种情况。
[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 相互访问,就可以开始了。通常,但并非总是如此,ping
会让您知道是否属于这种情况。防火墙是导致问题的典型原因。
但是,请注意,不同类型的网络具有自己的特定属性,您可能需要调整配置以适应这些属性。例如,通过 WiFi,数据包被丢弃的可能性(尤其是数据突发)比直接用电线连接节点时要大得多。 DDS 允许调整其协议来处理该问题。