繁体   English   中英

在第2层组播

[英]Multicast over layer 2

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

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

我已经完成的UDP程序当然可以做到这一点。 但是,我需要使用MAC地址而不是IP 我对此有一些疑问:

  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来定义多播组地址。

我希望我的问题有道理。

如果您不使用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的简便性,这可能需要大量工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM