假设2个组播IP地址IP1和IP2由于冲突,其mac地址相同
假设主机的 NIC 加入了多播流 IP1,而原始主机子网上的另一台主机加入了多播流 IP2
现在我们如何确保原始主机的 NIC 只从 IP1 而不是 IP2 获取数据包
假设2个组播IP地址IP1和IP2由于冲突,其mac地址相同
假设主机的 NIC 加入了多播流 IP1,而原始主机子网上的另一台主机加入了多播流 IP2
现在我们如何确保原始主机的 NIC 只从 IP1 而不是 IP2 获取数据包
组播实际上是在同一个 LAN 上的任何地方发送的。只有订阅了多播组的主机才会监听该组的多播数据包。
多播有自己的一组目的地址。对于IPv4,多播MAC地址的范围是01:00:5e:00:00:00到01:00:5e:7f:ff:ff。IPv4组播组地址有28位,而MAC组播地址只有23位。这意味着每个多播 MAC 地址代表 32 个不同的 IPv4 多播地址(28 - 23 = 5和2^5 = 32)。差异在第 3 层处理。
(IPv6 的多播地址范围比 IPv4 大得多,120 位 vs. 28 位,其 MAC 多播地址范围为33:33:00:00:00:00to 33:33:ff:ff:ff:ff,比 IPv4 MAC 多播地址范围大,但又存在重叠,IPv6 多播有标志和范围,它比 IPv4 多播复杂得多。)
在第 2 层,将第 3 层组播地址转换为目标 MAC 地址的 MAC 组播地址。订阅多播组的主机也将使用多播 IP 地址的多播 MAC 地址侦听流量,并将该流量向上传递到第 3 层以确定第 2 层多播地址是否确实用于第 3 层该主机订阅的多播组。
Host1 和 host2 可能会同时获得两个流 - NIC/OS 的工作是进行最终过滤。
此外,您甚至不需要多播 MAC 冲突来获得额外流量——因为交换机使用这些地址的哈希值(许多流行的地址非常有限——例如,我使用的是 D-Link 设备,它们显然只使用 4 位,每 32 位接收到多播组!)实际流量可能比预期大得多。
虽然我的操作系统接收 450 Mb/s 的多播流,但原始端口统计数据显示实际流量为 700 Mb/s。在 NIC 上翻转“allmulticast”标志后,我可以很容易地看到所有带有 tcpdump 的额外组。不,它与重复的多播 IP 组(具有不同端口)无关,仅与非冲突多播 MAC 地址的哈希冲突有关。