短篇小说:我的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分析器指示匹配分析成功(全绿色)。
VM A:
NDDS_DISCOVERY_PEERS=udpv4://239.255.0.1,udpv4://127.0.0.1,udpv4://BLAH.203
VM B:
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的框中看到来自VM A的DDS流量与DDS SPY。我的Windows 7盒子不能。
Windows 7事件日志似乎没有显示任何防火墙或WFP停止数据包。
从我的Windows 7计算机上运行的RTI DDS Spy显示VM A(0A061071)编写器在网络上可见,但没有收到任何数据。它还显示我的Windows 7计算机上的订阅者中的读者可见,但它显示在奇怪的IP地址。 加分问题(仅出于好奇,不是主要问题):为什么本地计算机上的流量在DDS SPY中显示为192.168.11.1
而不是我的计算机的IP甚至{ {1}}?
主要问题:我缺少什么?
更新:
我的Windows 7框上的127.0.0.1
似乎显示我已加入了具有VM A的多播组。
route print
似乎同意。
调查更新:
我重新启动虚拟机无效。
我重新启动Windows框无效。
我从netsh interface ip show joins
环境中删除了多播
双方的变量都没有效果。
Windows 7机箱有三个网络接口(加上环回):1
LAN连接和2个(不相关的)VM适配器。我们正在合作
局域网连接。 QNX VM有一个网络接口(另外
环回)。请注意,工作VM和损坏的VM使用a
不同的以太网驱动程序,因为它们略有不同
不同风格的QNX 6.4.1。破碎的那个有NDDS_DISCOVERY_PEERS
接口,工作接口有wm0
。我不相信这是问题,但这是一个区别。
我正在回放“破坏”的QNX VM上运行DDS SPY,并且 我得到了DDS数据。我没有一个好的方法来嗅探网络 在托管VM的位置和我的Windows 7计算机之间查看是否存在 使它脱离接口,但查看传输的数据包 从QNX VM上的以太网接口开始计数表明它 肯定会传输一些东西,而且Windows 7机器上的Wireshark捕获显示至少有一些流量正在通过。
局域网上的其他人可以看到来自的DDS流量 “破碎”的虚拟机,让我相信这是一个Windows安装问题, 而不是一个破碎的虚拟机 - 我只是看不到它可能是什么。我有 重新检查防火墙,无济于事。我原以为如果它是防火墙问题,当我在VM A和VM B之间交换IP地址时,问题就会消失。无论如何,Windows 7防火墙目前都处于关闭状态,但无济于事。
以下是Wireshark输出的几个屏幕。我在第三和第四之间跳了一堆,因为在第四次之后,流量往往看起来像第四个的底部直到结束。
(在这里跳了一堆) (几乎继续像上面的最后11行一样)
我还应该尝试什么?
更新
要回答下面的Rose问题,在错误的VM上使用en0
并rtiddsping -publisher
正常工作。
我想知道这个问题是否是由奇怪的IP地址引起的。它发布并以某种方式锁定的IP地址是本地VM以太网适配器(与VM A分开)。请参见下面的屏幕截图。
我希望它附加的地址是10.6.6.203。我可以用任何方式指定吗?
答案 0 :(得分:4)
一年多以后这件事发生在我身上再次与另一个虚拟机。我昨天工作了,所以我非常怀疑。我搜索了过去24小时内所有代码更改的问题,但没有发现任何问题。然后我决定看看IT是否已将任何补丁推送到我的计算机上。
猜猜是什么?自前一天起,Windows防火墙已经积极更新。规则丢失或更改等。日志表示数据包被丢弃。我打开防火墙过滤器了一下,突然间,一切都恢复了。我对这个问题犹豫不决,因为我不是100%这与去年完全相同,但感觉非常相似。我怀疑去年防火墙中的设置没有记录数据包丢失。长短不一:如果DDS突然停止工作,检查防火墙设置。
答案 1 :(得分:2)
要尝试的几件事情:
尝试在损坏的VM上运行rtiddsping -publisher,并在Windows上运行rtiddsping -subscriber。这有两个好处:
如果您在应用程序中看到与rtiddsping相同的问题,请将详细程度增加到rtiddsping -verbosity 3,然后再增加5.在最高详细级别,这将打印(大量)额外输出,这可能会给我们一些关于正在发生的事情的暗示。
回答关于间谍的奖金问题:间谍显示IP地址的原因是因为这是作为发现的一部分而宣布的地址之一。在发现过程中,DomainParticipant可以发布最多四个可用于访问它的IP地址。间谍将选择其中一个显示,但它可能不是用于与应用程序通信的实际地址。如果您的计算机没有任何具有192.168.11.1 IP地址的接口,则可能表示存在较大问题。 (但这可能是正常的 - 只要正确的IP是宣布的四种IP之一。)
查看数据包跟踪图像,显然没有任何问题。我注意到的一些事情:
因此,应用程序在.113上发送了发现数据。它正在被WireShark接收和重新组装,但这并不总是意味着应用程序正确接收了它。
数据包#816的结尾有一个心跳。数据包#818或#819可能是响应该心跳的ACKNACK,但我无法从图像中确定。下一步是查看从.203到.113的那些ACKNACK,以查看.203是否认为它已收到所有发现数据。以下是发现DataReader已收到所有数据的HB / ACKNACK对的示例:
Submessage: HEARTBEAT
...
firstSeqNumber: 1
lastSeqNumber: 1
心跳序列号为1,表示它只发送了关于单个DataReader的公告。
Submessage: ACKNACK
...
readerSNState: 2/0:
bitmapBase: 2
numBits: 0
readerSNState是2/0,意味着它已经收到序列号2之前的所有内容,并且没有任何遗漏。如果位图中不存在0,则表示DataReader没有收到某些数据。
如果您可以确认应用程序正在正确接收所有发现数据,那么如果您可以使用WireShark过滤器仅显示用户数据,将会很有帮助,因为图像不会突出显示发现与用户数据。
仅用于rtps2用户数据的WireShark过滤器: rtps2&& (rtps2.traffic_nature == 3 || rtps2.traffic_nature == 1)
答案 2 :(得分:1)
我们遇到了类似的问题。这是一个非常概括的环境:
两个用户都持有完全相同的软件(桌面是笔记本电脑的克隆,通过Clonezilla),但从桌面的角度来看,rtiddsspy是盲目的;然而,相反的方式效果很好:发布商机器的rtiddsspy看到了桌面。笔记本电脑和发行商机器'一直很好。笔记本电脑和台式机(他们看到了彼此的订阅)
此解决方法(基于https://community.rti.com/content/forum-topic/discovery-issues)是为了增加桌面网卡上的MTU。不要问我为什么,但它有效。
编辑:开始时,发布者的MTU设置为高于订阅者的值。因此,我们更改了订阅者中的MTU以匹配发布商。