【问题标题】:I don't understand the paragraph about multicast我不明白关于多播的段落
【发布时间】:2013-04-24 14:21:51
【问题描述】:

这一段如果来自UNP, 第 21.3 章第 555 页

  1. 运行应用程序的主机已加入某个多播组,其 相应的以太网地址恰好是接口的一个 当它被编程为接收 01:00:5e:00:01:01 时接收(例如, 接口卡执行不完善的过滤)。此帧将被丢弃 通过数据链路层或 IP 层。

我只是不知道作者在谈论哪种特殊情况。你能帮我解释清楚吗?

【问题讨论】:

    标签: sockets unix networking


    【解决方案1】:

    在 IPV4 中。多播地址(旧的 D 类)由 4 位固定组成,用于将其标识为多播(1110),其余 28 位用于标识组。

    由于 MAC 地址中只有 23 位可用(高 25 位是固定的),当您将多播地址的低 23 位映射到 mac 的低 23 位时,您会丢失 5 位寻址信息。所以多个组播地址都具有相同的MAC地址。

    例如

    237.138.0.1
    238.138.0.1
    239.138.0.1
    

    全部映射到 MAC 地址:01:00:5e:0a:00:01(还有更多,这只是一个子集来说明)

    因此,如果您加入组 237.138.0.1,您的以太网卡将开始向该 MAC 的堆栈发送帧。由于它是不完美的匹配(因为我们丢弃了这 5 位),以太网卡也会将 238.138.0.1 和 239.138.0.1 发送到堆栈中。但是由于您对这些帧不感兴趣,当它们可以完全匹配时,它们将在第 2 层(数据链路)或第 3 层(网络)被丢弃。

    所以特殊情况是,如果您有多个多播流占用相同的低 23 位地址空间,则网段上的所有主机都将不得不处理堆栈中更高的数据包,从而做更多的工作来判断他们收到的数据包是否是他们感兴趣的数据包)。

    通常您只需要确保在规划多播部署时尽量避免地址重叠。

    【讨论】:

    • 谢谢!也就是说,如果我需要多个不同的组播地址,我应该更改组 id(低 23 位),而不是高 5 位(可以认为是组播网络 id)。总之,没有上层协议做完美过滤,组播网络是无法共存的,对吧?
    • 如果您需要多个地址并且只是在本地使用它们,您应该使用 239.0.0.0/8 中的地址(因为这是管理范围,要在您的组织内使用)。但是 224.0.0.0 和 239.255.255.255 之间的任何地址都是多播的。但是是的,您只需要确保低 23 位是不同的。 239.239.1.1 , 239.239.1.2, 239.239.1.3 都可以工作并且不重叠,等等......
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 2017-06-14
    • 2014-04-02
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多