0

描述

我目前正在尝试在树莓派上发布时间戳并在基于 Windows 的 PC 上订阅它们。为此,我将 Raspberry Pi 和 Windows PC 都连接到了 Switch。因此,如果我在 Raspberry Pi 上启动发布示例,我已经可以在我的 Windows PC 上的 Wireshark 中看到传入的 UDP 多播包。所以理论上,订阅应用程序也应该能够接收包并将它们打印到控制台。但事实并非如此。订阅示例不会向控制台打印任何时间戳,这意味着它不会接收任何 UDP 多播包。这是为什么?如果我在 Windows PC 上同时运行发布和订阅示例,它可以工作......

我可能有一个线索可能是什么问题:如果我在我的 windows pc 上运行两个发布/订阅示例,它们都会在控制台中打印出来,它们正在监听 opc.tcp://mypc:4801/ 但是当我运行它说 raspi 上的发布示例正在侦听 opc.tcp://raspberrypi:4840/ 但订阅示例仍在侦听 opc.tcp://mypc:4801/ 。

有什么建议么?防火墙可能是这里的问题吗?任何建议都非常感谢!

附加信息

在下图中,您可以看到树莓派的 IP 地址: 在此处输入图像描述

下面你可以看到在 Wireshark 中传输的 UDP 多播包。它们确实来自树莓派,因为 IP 地址匹配: 在此处输入图像描述

4

1 回答 1

0

可能有很多事情使您的数据报无法到达应用程序:

小于 64 字节的以太网帧

大多数 NIC 将在数据链路层填充数据,因此这可能不是问题。Wireshark 将无法看到这种情况发生。要验证,请尝试自己填充数据有效负载(比如0xFF),直到数据包的数据超过 64 字节。幸运的是,这些天来这不是一个问题,但我很久以前就发生过这种情况。

UDP校验和不正确

如果计算出的校验和与发送方提供的校验和不匹配,则数据包将被静默丢弃。默认情况下,Wireshark 不计算校验和,它会在驱动程序获取数据包之前自行连接,尤其是在混杂模式下运行 Wireshark 时。如果可能,您可以通过Edit > Preferences > Protocols > UDP > Validate UDP checksum打开校验和验证。

如果您可以更改发送方的代码,请将 UDP 校验和标头字段设置为全零以禁用校验和。

Windows 上的网络适配器设置

如果您的机器是在企业内部管理的,那么我知道至少有几个适配器插件会干扰异常的网络数据包。尝试打开网络适配器上的“属性”对话框并查看一下。

Windows 防火墙

我不是这方面的专家,但我认为 Windows 防火墙的默认设置允许多播通过。再说一次,如果您的计算机是集中管理的,则可能会调整策略。

于 2019-04-02T06:56:59.153 回答