多播能否与 OMG DDS 标准中的可靠消息一起使用,还是需要单播?

Can multicast be used with reliable messaging in OMG DDS standard, or is unicast required?

我目前正在尝试弄清楚我编写的 DDS 应用程序。

我的作者和 reader 目前具有可靠性,因此如果 reader 错过了一条消息,作者将重新发布该消息。我还使用默认的多播而不是单播来发现发布者和订阅者。

根据我使用的多播协议,只有端口 70007001 需要打开。但是,当我使用 wireshark 进行分析时,我发现端口 70107011(单播)端口也处于打开状态。

经过一番挖掘,我发现了这个 link 似乎要为 reader 和编写器使用可靠性,您需要启用单播,这就是单播端口的原因也打开并正在使用。

是否真的必须启用单播才能可靠地传送消息?如果是,为什么需要这样做,以及为什么多播不能执行此功能?

在这种情况下,大部分流量将通过 MC 传出。有时,可靠性协议会发送一条消息,实际上是 "I have sequence numbers N through M available."

每个 reader 将(这在不同的实现中是高度可调的)响应一些东西(通过单播!)"ok" 或 "I didn't get x or z".

如果只有一个reader没有得到x,MC修复样本x是没有意义的,因为只有一个reader需要它。所以作者会把它单播给吱吱作响的reader.

简而言之,我可以再花 10 段来讨论配置选项和调整行为。

但是是的 tl;dr:预期的行为。