问题标签 [igmp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1163 浏览

linux - 当没有加入的用户时,是否可以检查多播组列表?

我可以使用 获取加入的多播列表netstat -g,但是否可以获得可用(未加入)多播的列表。Linux 内核是否跟踪传入的组特定 IGMP/MLD 查询?

0 投票
1 回答
600 浏览

java - Java 多播侦听和 IGMP

我有一个让我发疯的问题!无论是设计方面还是技术方面。我需要收听很多多播地址。我正在监视/收集的每个项目将它们分为 3 组。我已经走上了让一个进程启动 100 个线程的道路。每个线程使用 2 个端口和三个地址/组。(其中 2 个组在同一个端口上)我为每个端口使用 MulticastChannel,并使用 SELECT 来监视数据。(我使用过数据报,但发现 NIO MulticastChannel 要好得多)。无论如何,我看到我可以订阅大约一千个这样的线程的问题,并且数据很好地嗡嗡作响。问题是,过一段时间我会让他们中的一些人停止接收数据。我已向系统 (CentOS) 确认我仍然订阅这些地址,但数据只是停止了。我的线程中有监视器,通过 RTP 标头监视数据丢失和乱序。当我检测到一个线程停止获取数据时,我会执行 DROP/JOIN,然后数据会恢复。

我认为我路径中的路由器正在放弃我的订阅。我正在竭尽全力编写代码来稳定这个过程。

有没有人发送过 IGMP 加入网络以保持数据流动?这是可能的,甚至是合理的。

顺便说一句:计算机是 HP DL380 Gen-9,具有 10G 光纤连接到 6509 交换机。

任何关于在哪里寻找的指示都会有帮助。

请不要要求任何代码示例。

0 投票
2 回答
390 浏览

iptv - 停止 IPTV 流量

是否可以停止路由器中的 IPTV 流量?
我不想接收电视,我希望带宽仅用于互联网和 voip。
禁用IGMP协议是解决办法吗?

0 投票
1 回答
1111 浏览

linux - 跟踪 IGMP 查询的来源

我有一些 igmp 查询,每 2 分钟从 bond0 接口出来。

IP 0.0.0.0 > 224.0.0.1:igmp 查询 v2。

是否可以跟踪哪个进程/程序正在进行此查询?

通过检查发现查询的源MAC地址是bond0地址的mac地址。

由于这个查询需要几个 CPU 周期,我不确定我会在 ps 或 netstat 中找到它。我想我需要一些跟踪工具,比如 perf 或 systemtap。我是调试和跟踪领域的新手,所以我需要一些帮助来找到正确的命令和参数。

谢谢。

0 投票
1 回答
1450 浏览

python - 如何使用 python 从特定接口发送 igmp join?

我正在尝试在 Python 中实现以下程序以从特定接口发送加入请求(现在我的内核默认选择某些东西)。

我试图将我的接口 IP 地址更改socket.INADDR_ANY为何socket.inet_aton('X.X.X.X')X.X.X.X由字符串表示,但出现错误。

有什么办法可以让它工作吗?

谢谢,塔洛

0 投票
1 回答
710 浏览

java - 在 Java 中通过 Internet 发送多播数据包

我想开发一个使用 UDP 协议在 JAVA 中向客户端发送数据包的Web 应用程序。

我需要直接向每个客户端发送数据包。

Java 提供了一个名为MulticastSocket的类,它扩展了 UDP。这可以通过网络向多个客户端发送数据包。

但它只发生在本地网络而不是“互联网”上。

有没有办法通过互联网发送多播数据包?如果可能的话,解释它并解释我如何用 Java 实现它。

我发现了一些像 IGMP 这样的协议......但我认为它是在 MulticastSocket 中开发的。

0 投票
2 回答
1639 浏览

c++ - 如果我在关闭套接字之前不发送 IP_DROP_MEMBERSHIP 会发生什么?

我正在研究一些使用 IGMP 加入加入多播组的代码

当应用程序关闭时,它会关闭套接字

但是,它不执行IP_DROP_MEMBERSHIP.

  • 上游路由器是否会继续将多播传送到我的网络接口?
  • 操作系统(在我的情况下是 Linux)是否足够智能,可以在套接字关闭时为我发送删除会员请求?
0 投票
1 回答
977 浏览

sockets - 仅在混杂模式下接收的 UDP 数据包

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

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

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

  • 组播 ip 范围 239.1.4.1-100
  • 目的端口 50003
  • 源端口范围 ~33000 - 60900
  • 防火墙被禁用

编辑:

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

编辑2:

我在另一台机器上安装了 ISO 映像(虚拟机而不是 HP Windows Server),它可以正常工作。因此,我假设我的应用程序运行良好,并且所有 ubuntu 操作系统配置都是正确的。现在我把所有的责任都归咎于虚拟管理器/设置。有任何想法吗?

0 投票
1 回答
3603 浏览

multicast - 在 STM32F7 + FreeRTOS 上实现 LWIP 多播?

我有一个客户端/服务器 LWIP 程序,它可以与单播通信正常工作,但是我想使用多播功能,所以我使用 IGMP 库执行了以下操作:

1- 在 lwipopts.h 中:

2- 在 ethernetif.c 中:

3-在我的源文件中(对于客户端和服务器项目):

实现了以下代码:

结果:所有提到的代码步骤都在两个项目(客户端和服务器)中成功执行,但我没有收到任何多播消息(甚至可能没有发送)!

我在回调函数中添加了一个“BREAK_POINT”,但我从未达到它。你能帮助我吗?通过提出解决方案或至少通过一种方法来跟踪问题......我正在使用带有 LWIP 的 STM32F746 Nucleo 板,由 cubeMX 生成的 FreeRTOS 库。

谢谢你。

<<< 编辑>>> 经过更多调查,我发现问题出在接收多播帧上,这应该在 MAC 初始化期间启用。虽然下面的代码对我不起作用,但对其他人有帮助,所以这里是:

4-在stm32f7xx_hal_eth.c(ETH_MACDMAConfig函数)中:

0 投票
1 回答
1116 浏览

python - 由于两个 IGMPv2 加入消息,每个发送的 UDP 多播消息都会被接收两次。如何避免?

我有一个 Python 程序,它使用套接字在多播 IP 地址 224.0.1.1 和 UDP 端口 20001 上发送和接收 UDP 多播消息。

在接收端,我创建了一个接收套接字,并使用套接字选项 IP_ADD_MEMBERSHIP 调用 socket.setsockopt 一次以加入 IP 多播组。

但是,Wireshark 报告说,对 setsockopt 的单个调用会导致发送两个单独的加入(IGMPv2 成员报告)消息:

  • 一条加入消息使用以太网源地址 01:00:52:00:01:01,即 IP 组播组对应的以太网组播地址。

  • 使用以太网源地址 a8:66:7f:3a:2b:1a 的加入消息,这是与发送加入消息的物理“en0”接口对应的以太网单播地址。

在发送端,我创建了一个单独的发送套接字,调用 socket.connect 将套接字与多播 IP 地址 224.0.1.1 和 UDP 端口 20001 相关联。

然后我调用 socket.send 一次以发送一条测试消息。由于两个单独的加入消息,发送的测试消息在线上出现两次,一次是目标以太网地址 01:00:52:00:01:01,一次是目标以太网地址 a8:66:7f:3a:2b: 1a。

在接收方,两条消息是分开接收的。因此,每个发送的消息都会被接收两次。

问题是:我怎样才能防止这种情况发生?

重现该行为的最小示例如下:

额外细节:

1) 操作系统为 macOS High Sierra 10.13.5

2)Python版本为3.5.1

3)第一次睡眠是必不可少的;没有它,问题不会发生,因为发送加入消息需要一些时间

4)第二次睡眠不是必须的;它可以确保在程序终止和发送离开消息之前,wireshark 看到两个测试消息。

5)我尝试使用传出接口的真实IP地址代替req结构中的INADDR_ANY,但没有任何区别。