了解Linux中的IP多播

网络工程 转变 交换 多播 linux igmp
2022-02-06 03:53:27

我的最终目标是使用 netfilter 钩子在 linux 机器上设置 IGMP 侦听。这是为了了解 IGMP 协议的探索性目的。

我们使用的拓扑如下:

 |               |                        |                  |
 | Host 1        |<---------------------> |           Host 2 |
 | Linux         |                        |           Linux  |

我们计划在 Host2 上创建一个多播组,以便我们可以将多播流量从 Host1 发送到 Host2,然后使用 Host2 上的挂钩,我们可以检查 Host2 上的成员消息(加入、离开、时间信息、端口等)并创建我们自己的类似于 mdb 的多播数据库。

我们如何创建组播组?(在 linux 上使用的命令?)我们如何将接口或主机附加到该多播组?我们如何在属于多播组的接口之间传输数据包?谢谢

1个回答

我们如何创建组播组?

未“创建”多播组。

多播组由侦听某个多播地址的所有计算机组成。因此,只要至少有一台计算机正在侦听给定的多播地址,就会自动存在多播组。

我们如何将接口或主机附加到该多播组?

您只需启动一个程序,该程序正在侦听某个地址上的多播数据包。例如监听 UDP 数据包的程序。

使用 Wireshark,我看到 Linux 在程序启动时发送 IGMP 加入消息,在程序完成时发送 IGMP 离开消息。

如果有多个程序监听同一个地址,Linux 的行为可能是这样的:“加入”消息只会在这些程序中的第一个启动时发送,“离开”消息只会在最后一个程序完成时发送。

我不知道是否存在现成的程序,但我在这里找到了一个示例 C 程序

我们如何在属于多播组的接口之间传输数据包?

只需将一些数据包(例如 UDP 数据包)发送到多播地址。发送者甚至不需要监听那个多播地址(它不需要是多播地址组的一部分)。

上面链接中的示例程序似乎也能够发送消息......