106-多播地址

1. 多播地址

多播地址,类似“QQ群号”,它是 D 类 IP 地址(224.0.0.0~239.255.255.255)。

D 类 IP 地址的首 4 位总是 2 进制 1110 开头,因此,可用的范围就只剩下后 28 位。这 28 位称为 group id——多播组 ID,完整的 32 位称为 group address——组地址

2. 多播地址转换成 mac 地址

2.1 思考

在单播中,我们知道可以使用 arp 协议将查找 ip 地址(A、B、C类 ip 地址)对应的接口 mac 地址(物理网卡地址)。只有目标 mac 地址与自己匹配的单播帧,主机才会接收。

在广播中,因为数据帧要发给链路中的所有主机,约定目标 mac 地址为 ff:ff:ff:ff:ff:ff,链路上的所有主机,都应无条件的接收该广播帧。

那么问题来了,多播介于单播和广播之间,目标 mac 地址该如何约定?看起来似乎是一个挺困难的问题。在这里,你应该稍微停下几分钟的时间思考一下,交给你来办,要怎么做呢?

我们借鉴 QQ 群的思路,它本身就是一种多播手段,只有加入 QQ 群的同学才会收到群消息,没加入 QQ 群的,是收不到消息的。如果某个网卡想接收某个组的消息,也应该加入该组。下面我们加入 230.2.2.2 这个组为例:

网卡显然是不认 IP 地址的,只认 mac 地址。RFC1112 制定了一套规则,将多播 IP 地址按照固定算法计算出一个 mac 地址(这是算出来的,实际上并没有任何网卡的 mac 地址能匹配上)

比如说,多播地址 230.2.2.2,通过固定算法计算出的 mac 地址为 01:00:5e:02:02:02,这样一来,如果网卡已经加入了 230.2.2.2 这个组,一旦遇到到目标 mac 地址为 01:00:5e:02:02:02 的帧后,就直接接收。如果没有加入该组,遇到该帧,直接丢弃。

2.2 多播地址转 mac 地址的算法

计算公式:

// 括号中的计算含义表示取 ip 地址的低 23 位。 macaddr = 01:00:5e:00:00:00 + (ipaddr & 00.7f.ff.ff)
  • 例 1:

多播 ip 地址为 224.128.64.32,先转换为 16 进制,为 e0.80.40.20,然后取低 23 位:

e0.80.40.20 & 00.7f.ff.ff = 00.00.40.20

所以有:

macaddr = 01:00:5e:00:00:00 + 00.00.40.20 = 01:00:5e:00:40:20

  • 例 2:

多播 ip 地址为 224.0.64.32,经过上面的公式计算后,得到的 mac 地址为 01:00:5e:00:40:20,结果和例 1 中的一样。

上面的例子可能会引起一个问题,主机只想接收 224.0.64.32 这个组的消息,但是网卡却收了 224.80.64.32 的帧,怎么办?

对于组播 mac 地址来说,有些网卡使用 hash 算法,计算出 hash 码,如果 hash 码相同,则认为匹配上了。即使不同的 mac 地址,也可能计算出相同的 hash 码。这种问题被称为不完备过滤(imperfect filtering)。还有一些网卡,根本不支持多播过滤,只要有多播帧来了,统统接收,这被称为 多播混杂模式(multicast promiscuous)

如果网卡能完全匹配组播 mac 地址(即 mac 地址和 hash 码是一一对应的关系),则称为完备过滤(perfect filtering)

上面的例子中我们知道,即使网卡实现了完备过滤,仍然需要在 ip 层加入过滤,看是否真的加入了 224.80.64.32 这个组,如果没有,仍然会丢弃该数据报,我们将此称为完备过滤(perfect filtering)

尽管多播 ip 地址与 mac 地址之间的映射存在着这种不足,但是多播仍然比广播好。

  • 例 3:

最后,再来看一个现实中的例子:


这里写图片描述
图1 抓取的多播数据包,观察其目标 mac 地址

3. 特殊的多播 ip 地址

224.0.0.0 ~ 224.0.0.255 之间的地址,称为链路局部的(link local)多播地址。多播路由器从不转发以这些地址为目的地址的数据报。

这些地址中,还有一些是有特殊用途的。例如:

  • 224.0.0.0 基地址(保留)
  • 224.0.0.1 本子网内的所有主机(all-hosts)组。子网上所有具有多播能力的设备(主机、路由器、打印机等)必须在所有具备多播能力的接口上加入该组。
  • 224.0.0.2 本子网内的所有路由器(all-routers)组。
  • 224.0.0.3 未指派
  • ……

  • 224.0.1.0 ~ 238.255.255.255 是全球范围都可使用的多播地址
  • 239.0.0.0 ~ 239.255.255.255 限制在一个组织的范围

4. 总结

  • 掌握多播地址转换为 mac 地址的方法
  • 不完备过滤与完备过滤的含义
说明:本文转自--Allen--,用于学习交流分享,仅代表原文作者观点。如有侵权,请联系我们删除~