2017-08-11 280 views
0

我在一台VM Ubuntu 16.04计算机上的100个多播组上生成UDP数据包,并订阅另一台VM Ubuntu 16.04计算机上的这些组。两者都位于由Hyper-V管理器运行的惠普服务器上。问题是我的应用程序只能收到100个组中的2个。但是,当Wireshark捕获时,应用程序开始接收所有消息。仅在混杂模式下接收UDP数据包

我发现了几个其他类似的问题,如this one,它解释说因为Wireshark运行在混杂模式下,它允许所有数据包都通过(通过什么?),这就解释了为什么我的应用程序也开始“看”它们。因此,将以太网接口配置更改为混杂模式允许应用程序在不运行Wireshark的情况下接收所有消息。

但是,通常不会收到的其他数据包的问题是什么?我试图交叉验证“好”和“坏”消息的十六进制转储,并且它们似乎没有不同。 IP和UDP级别的校验和是正确的。还有什么可能是这个问题?

  • 多播IP范围239.1.4.1-100
  • 目的端口50003
  • 源端口范围〜33000 - 60900
  • 禁用防火墙

编辑:

它看起来像应用程序订阅了8个多播组时,它的工作原理然而,如果订阅超过8个,则仅接收2个(如果它们以.7或.8结尾)或没有,如上所述。所以,我会假设数据包是正确的。问题可能出现在网络设置中吗?或者应用程序本身 - 需要找到我没有写过的脚本中的错误。

EDIT2:

我安装在另一台机器(虚拟框,而不是惠普的Windows Server),ISO映像和它的作品,因为它应该。因此,我认为我的应用程序工作正常,所有的Ubuntu操作系统配置都是正确的。现在我把所有的责任都放在虚拟管理器/设置上。有任何想法吗?

+0

数据包,而不是“包”。 –

+1

@JamesKPolk感谢您的更正 – Nazar

+0

这里的可能性,最大群组成员身份:https://serverfault.com/questions/248094/igmp-membership-under-linux-igmp-max-memberships –

回答

1

听起来好像你没有告诉内核。

http://tldp.org/HOWTO/Multicast-HOWTO-6.html

你必须使用setsockoptIP_ADD_MEMBERSHIP。并且一定要使用正确的值作为本地接口。

+0

是的,我在套接字选项。还有别的东西。刚刚更新了我的问题。 – Nazar

+0

@Naz:也许这个? https://serverfault.com/questions/248094/igmp-membership-under-linux-igmp-max-memberships –

+0

netstat列出了它订阅的所有IP组,以及其他一些... – Nazar