【问题标题】:Multicast over layer 2第 2 层上的组播
【发布时间】:2013-03-25 13:08:00
【问题描述】:

请原谅我对网络的了解有限。

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

这当然可以通过我已经完成的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 定义的。

我希望我的问题是有意义的。

【问题讨论】:

    标签: networking network-programming ip multicast ethernet


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多