小故事:我的 DDS 订阅者无法看到来自我的 DDS 发布者的数据。我错过了什么?
很长的故事:
QNX 6.4.1 VM A -- Broken Publisher. IP ends with .113
QNX 6.4.1 VM B -- Working Publisher. IP ends with .114
Windows 7 -- Subscriber/Main Dev box. IP ends with .203
RTI DDS 5.0 -- Middleware version
我有一个 QNX VM(托管在网络上,而不是我的机器上),它通过 RTI DDS 发布一些数据。数据从未出现在我的 Windows 7 订阅者应用程序中。
有趣的是,我可以将相同的代码放在 VM B 上,然后订阅者获取数据。认为这一定是 Windows 7 防火墙问题,我将 VM A 的 IP 地址与 VM B 交换,但这并没有帮助。
使用 Wireshark,我可以看到来自 VM A 的一些心跳流量,但没有数据。从 VM B,我看到了心跳流量和数据。下面是经过消毒的 Wireshark 片段。
NDDS_DISCOVERY_PEERS
设置为包括多播和每个对话另一方的显式 IP 地址。QOS 配置文件相同,RTI Analyzer 指示匹配分析成功(全为绿色)。
虚拟机甲:
NDDS_DISCOVERY_PEERS=udpv4://239.255.0.1,udpv4://127.0.0.1,udpv4://BLAH.203
虚拟机乙:
NDDS_DISCOVERY_PEERS=udpv4://239.255.0.1,udpv4://127.0.0.1,udpv4://BLAH.203
Windows 7 盒子:
NDDS_DISCOVERY_PEERS=udpv4://239.255.0.1,udpv4://127.0.0.1,udpv4://BLAH.113,udpv4://BLAH.114
当我将它们包含NDDS_DISCOVERY_PEERS
在行中时,网络上的其他人可以在他们的 Windows 7 机器上通过 DDS SPY 看到来自 VM A 的 DDS 流量。我的 Windows 7 盒子不能。
Windows 7 事件日志似乎没有显示任何防火墙或 WFP 停止数据包。
在我的 Windows 7 机器上运行的 RTI DDS Spy 显示 VM A (0A061071) 写入器在网络上可见,但没有接收到数据。它还显示我的 Windows 7 机器上的订阅者中的阅读器是可见的,尽管它显示在一个奇怪的 IP 地址上。
额外的问题(只是出于好奇,不是主要问题):为什么我的本地机器上的流量显示在 DDS SPY 中192.168.11.1
而不是我机器的 IP 甚至127.0.0.1
?
主要问题:我错过了什么?
更新:
route print
在我的 Windows 7 盒子上似乎显示我已经加入了一个带有 VM A 的多播组。
netsh interface ip show joins
似乎同意。
调查更新:
我重新启动了VM,但没有效果。
我重新启动了 Windows 框,但没有效果。
我从
NDDS_DISCOVERY_PEERS
两边的环境变量中删除了多播,但没有效果。Windows 7 机器具有三个网络接口(加上环回):1 个 LAN 连接和 2 个(不相关的)VM 适配器。我们正在使用 LAN 连接。QNX VM 有一个网络接口(加上环回)。请注意,工作 VM 和损坏的 VM 使用不同的以太网驱动程序,因为它们与 QNX 6.4.1 的风格略有不同。坏的有
wm0
接口,工作的有en0
接口。我不认为这是问题所在,但这是不同的。我在“损坏的”QNX VM 上运行 DDS SPY,而它正在播放,我得到了 DDS 数据。我没有一个很好的方法来嗅探虚拟机所在的位置和我的 Windows 7 机器之间的网络,看看它是否会离开接口,但是查看 QNX 虚拟机上以太网接口的传输数据包计数表明它肯定在传输某些东西,而 Wireshark 在 Windows 7 机器上捕获的内容表明至少有一些流量正在通过。
LAN 上的其他人可以看到来自“损坏的”虚拟机的 DDS 流量,这让我相信这是 Windows 设置问题,而不是损坏的虚拟机——我只是看不出它可能是什么。我重新检查了防火墙,但无济于事。我原以为如果是防火墙问题,当我在 VM A 和 VM B 之间交换 IP 地址时,问题就会消失。无论如何,Windows 7 防火墙当前已关闭,但无济于事。
下面是 Wireshark 输出的几个屏幕。我在第三和第四之间跳过了一堆,因为在第四之后,流量往往看起来像第四的底部,直到结束。
(这里跳过了一堆) (几乎像上面的最后 11 行一样继续)
我还应该尝试什么?
更新:
要在下面回答 Rose 的问题,rtiddsping -publisher
请在坏的 VM 上使用并rtiddsping -subscriber
正常工作。
我想知道这个问题是否是由奇怪的 IP 地址引起的。它碰巧发布并以某种方式锁定到的 IP 地址是本地 VM 以太网适配器(与 VM A 分开)。请参阅下面的屏幕截图。
我希望它附加的地址是 10.6.6.203。有什么办法可以指定吗?