我仍在努力了解DDS及其概念。 我有一个配置,其中2台笔记本电脑运行基于dds的应用程序。我的环境不允许多播,所以我决定去点对点……
如何发现参与者?多播?因为我没有做任何单播设置。
由于您使用DDS作为ROS2框架的一部分,因此我不可能完全确定地回答这个问题,而且我不熟悉两者如何设置以进行交互的确切细节。话虽如此,从你的描述来看,似乎参与者确实使用多播来发现彼此。
获得确定答案的最佳方法是嗅探网络 - 假设您拥有所需的权限。例如,您可以使用Wireshark,它附带一个RTPS解析器,允许您过滤RTPS消息。 (RTPS是标准化DDS线路协议的名称。)检查目标地址,看看是否检测到组播范围内的任何地址。您可以在启动单个基于DDS的应用程序时执行此操作。它将立即开始通过网络宣布自己。
如果我想使用单播,是否有必要将它们置于一个网络下,即连接以太网电缆?
如果要使用单播,则需要知道所有对等节点的IP地址或主机名。只要这些对等节点可以通过UDP到达对方,就可以了。通常,但并非总是如此 ping 会告诉你是否是这种情况。防火墙是导致问题的典型原因。
ping
但是,请注意,不同类型的网络具有自己的特定属性,您可能需要调整配置。例如,通过WiFi,丢弃数据包的可能性(特别是数据突发)远远大于直接用线路连接节点时的可能性。 DDS允许调整其协议来处理它。
开箱即用,DDS需要支持多播和单播发现。匿名连接通过多播处理。如果您知道收件人的IP地址,则可以将这些地址手动配置到单播发现列表中(每个供应商都有自己的方式来命名/处理此列表)。
“在我们的网络中不允许多播”,在大多数情况下,意味着您的IT部门已经在定义网络结构的交换机(或交换机)处关闭了多播数据包转发。
然而,出厂时符合标准的DDS配置并不了解这一点 本地 政策(怎么可能?)。如果您未根据本地政策更改配置,则DDS参与者是 仍然 将尝试通过Multicast连接,因为您还没有将其关闭。
如果使用DDS的计算机连接到同一个集线器,或者连接到非管理型交换机(此处定义为您的IT部门不关心或配置错误的交换机),并且网络拓扑结构未连接到 管理 切换,他们正在使用默认配置, 他们找到了对方 , 然后 他们正在使用多播匿名发现 。
了解如何配置DDS实现,添加需要通信的计算机的单播IP地址。因为 发现 通常只需要在一个方向上进行(如果A发现B,那么B发现A是正确的,假设A和B都没有被配置为忽略另一个[1])。
配置单播发现后,可以配置no-multicast。如果机器在IP跳跃网络(WiFi等)上,除非DDS实现了解多路径,否则将很难。与供应商交谈,看看是否是这种情况。
[1]如果没有过度配置,DDS就没什么了不起的。