多播能否与 OMG DDS 标准中的可靠消息一起使用,还是需要单播?
Can multicast be used with reliable messaging in OMG DDS standard, or is unicast required?
我目前正在尝试弄清楚我编写的 DDS
应用程序。
我的作者和 reader 目前具有可靠性,因此如果 reader 错过了一条消息,作者将重新发布该消息。我还使用默认的多播而不是单播来发现发布者和订阅者。
根据我使用的多播协议,只有端口 7000
和 7001
需要打开。但是,当我使用 wireshark 进行分析时,我发现端口 7010
和 7011
(单播)端口也处于打开状态。
经过一番挖掘,我发现了这个 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:预期的行为。
我目前正在尝试弄清楚我编写的 DDS
应用程序。
我的作者和 reader 目前具有可靠性,因此如果 reader 错过了一条消息,作者将重新发布该消息。我还使用默认的多播而不是单播来发现发布者和订阅者。
根据我使用的多播协议,只有端口 7000
和 7001
需要打开。但是,当我使用 wireshark 进行分析时,我发现端口 7010
和 7011
(单播)端口也处于打开状态。
经过一番挖掘,我发现了这个 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:预期的行为。