1

请原谅我在网络方面的有限知识。

我正在尝试将两个小程序设置为客户端和服务器,它们加入特定的多播组。服务器向组发送一些任意数据,客户端在侦听组时接收数据。

UDP这对于我已经完成的程序当然是可能的。但是我需要使用 MAC 地址而不是IPs。我对此有几个问题:

  1. 是否可以为我的多播应用程序修复一系列 MAC 地址?据我了解,MAC 地址中第一个八位字节的最低有效位表示它是否是多播的。所以多播 MAC 应该是这样的01:*:*:*:*:*。所以我想,应该有一些方法可以使用广泛的 MAC 地址(除了那些保留的)。

  2. 很多地方都写成All multicast MAC addresses begin with: 0100.5e。它总是真实的吗?AFAIK 这个前缀是固定在 MAC 地址中的,它为要在此处映射的其余 IP 地址位留出空间。但是,如果我的应用程序不关心 IP 地址并根据 MA​​C 地址侦听多播组(如果可能的话)怎么办?我不能保留第一个八位字节01并为我的多播寻址使用广泛的范围吗?

  3. 如何仅基于 MAC 地址而不考虑 IP 将数据包发送到多播组并侦听多播组?即多播组地址是根据MAC 定义的。

我希望我的问题是有道理的。

4

1 回答 1

0

如果您不使用 IP(或除此之外的 UDP),那么将 IP 地址映射到 mac 地址的默认方式可能对您没有附加价值。例如,这些映射在:

如果您坚持使用 layer2 和多播,则发送带有第一个八位组集的 LSB 的帧可能就足够了(多播位,参考:http://en.wikipedia.org/wiki/File:MAC-48_Address. svg)。并将您自己的映射放在上面。但是你应该考虑到:

  • 您可能需要强制您的 NIC 传递数据,通常 NIC 会过滤掉他们对硬件感兴趣的帧。这些过滤器通常在加入组时设置,例如在设置 ALLMULTI 标志时设置)。
  • 中间可能有网络设备,一些伪智能交换机可能会拒绝转发数据,除非他们看到 IGMP 加入(ref igmp snooping)。
  • 而且您的代码显然需要处理原始的第 2 层套接字来读取数据。

考虑到仅使用 UDP 的便利性,这可能需要做很多工作。

于 2013-08-05T11:15:59.987 回答