我目前正在尝试在树莓派上发布时间戳,并在基于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 /上监听。
有什么建议吗?防火墙可能是这里的问题吗? 任何建议都将受到高度赞赏!
答案 0 :(得分:0)
可能有很多事情使您的数据报无法到达应用程序:
大多数NIC将在数据链路层填充数据,因此这可能不是问题。 Wireshark将无法看到这种情况的发生。要进行验证,请尝试自己填充数据有效负载(例如0xFF
),直到数据包的数据量超过64字节为止。幸运的是,这些天来这已经不是什么问题了,但是很久以前我就遇到过这种情况。
如果计算出的校验和与发送方提供的校验和不匹配,则该数据包将被静默丢弃。默认情况下,Wireshark不会计算校验和,它会在驱动程序获取数据包之前将其自身连接起来,特别是如果您以混杂模式运行Wireshark时。您可以通过编辑>首选项>协议> UDP>验证UDP校验和来打开校验和验证。
如果可以在发送方更改代码,请将UDP校验和标头字段设置为全零以禁用校验和。
如果您的计算机是在企业内部管理的,那么我知道至少有两个适配器插件会干扰异常的网络数据包。尝试打开网络适配器上的“属性”对话框,然后看看。
我不是专家,但是我认为Windows防火墙的默认设置允许多播通过。再说一次,如果您的计算机是集中管理的,则策略可能已经过调整。