问题标签 [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.
linux - 当没有加入的用户时,是否可以检查多播组列表?
我可以使用 获取加入的多播列表netstat -g
,但是否可以获得可用(未加入)多播的列表。Linux 内核是否跟踪传入的组特定 IGMP/MLD 查询?
java - Java 多播侦听和 IGMP
我有一个让我发疯的问题!无论是设计方面还是技术方面。我需要收听很多多播地址。我正在监视/收集的每个项目将它们分为 3 组。我已经走上了让一个进程启动 100 个线程的道路。每个线程使用 2 个端口和三个地址/组。(其中 2 个组在同一个端口上)我为每个端口使用 MulticastChannel,并使用 SELECT 来监视数据。(我使用过数据报,但发现 NIO MulticastChannel 要好得多)。无论如何,我看到我可以订阅大约一千个这样的线程的问题,并且数据很好地嗡嗡作响。问题是,过一段时间我会让他们中的一些人停止接收数据。我已向系统 (CentOS) 确认我仍然订阅这些地址,但数据只是停止了。我的线程中有监视器,通过 RTP 标头监视数据丢失和乱序。当我检测到一个线程停止获取数据时,我会执行 DROP/JOIN,然后数据会恢复。
我认为我路径中的路由器正在放弃我的订阅。我正在竭尽全力编写代码来稳定这个过程。
有没有人发送过 IGMP 加入网络以保持数据流动?这是可能的,甚至是合理的。
顺便说一句:计算机是 HP DL380 Gen-9,具有 10G 光纤连接到 6509 交换机。
任何关于在哪里寻找的指示都会有帮助。
请不要要求任何代码示例。
iptv - 停止 IPTV 流量
是否可以停止路由器中的 IPTV 流量?
我不想接收电视,我希望带宽仅用于互联网和 voip。
禁用IGMP协议是解决办法吗?
linux - 跟踪 IGMP 查询的来源
我有一些 igmp 查询,每 2 分钟从 bond0 接口出来。
IP 0.0.0.0 > 224.0.0.1:igmp 查询 v2。
是否可以跟踪哪个进程/程序正在进行此查询?
通过检查发现查询的源MAC地址是bond0地址的mac地址。
由于这个查询需要几个 CPU 周期,我不确定我会在 ps 或 netstat 中找到它。我想我需要一些跟踪工具,比如 perf 或 systemtap。我是调试和跟踪领域的新手,所以我需要一些帮助来找到正确的命令和参数。
谢谢。
python - 如何使用 python 从特定接口发送 igmp join?
我正在尝试在 Python 中实现以下程序以从特定接口发送加入请求(现在我的内核默认选择某些东西)。
我试图将我的接口 IP 地址更改socket.INADDR_ANY
为何socket.inet_aton('X.X.X.X')
时X.X.X.X
由字符串表示,但出现错误。
有什么办法可以让它工作吗?
谢谢,塔洛
java - 在 Java 中通过 Internet 发送多播数据包
我想开发一个使用 UDP 协议在 JAVA 中向客户端发送数据包的Web 应用程序。
我需要直接向每个客户端发送数据包。
Java 提供了一个名为MulticastSocket的类,它扩展了 UDP。这可以通过网络向多个客户端发送数据包。
但它只发生在本地网络而不是“互联网”上。
有没有办法通过互联网发送多播数据包?如果可能的话,解释它并解释我如何用 Java 实现它。
我发现了一些像 IGMP 这样的协议......但我认为它是在 MulticastSocket 中开发的。
c++ - 如果我在关闭套接字之前不发送 IP_DROP_MEMBERSHIP 会发生什么?
我正在研究一些使用 IGMP 加入加入多播组的代码
当应用程序关闭时,它会关闭套接字
但是,它不执行IP_DROP_MEMBERSHIP
.
- 上游路由器是否会继续将多播传送到我的网络接口?
- 操作系统(在我的情况下是 Linux)是否足够智能,可以在套接字关闭时为我发送删除会员请求?
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 操作系统配置都是正确的。现在我把所有的责任都归咎于虚拟管理器/设置。有任何想法吗?
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函数)中:
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,但没有任何区别。