第2层上的组播

时间:2013-03-25 13:08:00

标签: networking network-programming ip multicast ethernet

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

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

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

  1. 是否可以为我的多播应用程序修复一系列MAC地址?据我所知,MAC地址中第一个八位字节的最低有效位表示它是否是多播。因此,组播MAC应该看起来像01:*:*:*:*:*。所以我想,应该有一些方法可以使用各种MAC地址(保留的除外)。

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

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

  4. 我希望我的问题有道理。

1 个答案:

答案 0 :(得分:0)

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

中指定

如果你坚持使用layer2和多播,它可能足以发送具有第一个八位字节集的LSB的帧(多播位,ref:http://en.wikipedia.org/wiki/File:MAC-48_Address.svg)。并将您自己的映射置于其上。但你应该考虑到:

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

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