所谓二层组播,即数据帧的转发是面向二层的,根据组播MAC地址来决定数据帧的转发方向,而三层组播,即所谓的IP组播,则根据三层组播地址,即组播IP地址来进行数据帧的转发。
二层组播相关协议包括IGMP 和GMRP协议。让我们从分析组播MAC地址开始,逐步而深入的了解二层组播。
组播MAC地址
所谓组播MAC地址,是一类逻辑的MAC地址,该MAC地址代表一个组播组,所有属于该组的成员都接收以该组对应的组播MAC地址为目的地址的数据帧。
注意的是,组播MAC地址是一个逻辑的MAC地址,也就是说,在网络上,没有一个设备的MAC地址是一个组播MAC地址。组播MAC地址跟单播MAC地址(物理MAC地址)的区别是,组播MAC地址六个字节中,最高字节(第六字节)的最低位为1,而单播MAC地址则为0,如下图所示:
为了更进一步了解组播的概念,我们先从MAC层的数据帧接收过程说起。
MAC层数据帧的接收
在网卡的内部保留一张接收地址列表(可以理解为一个可读写的随机存储器),其中至少有两个MAC地址,即网卡的物理MAC地址和全1的广播MAC地址。每当计算机想接收一个组播数据,也就是说要加入一个组播组,那么上层软件会给网络层一个通知,网络层做完自己的处理后,也会发一个通知给数据链路层,于是,数据链路层根据网络层想加入的组播组的组地址(一般是一个组播的IP地址),根据一定的规则映射为一个组播的MAC地址,然后把该MAC地址加入接收地址列表。
每当数据链路层接收到一个数据帧的时候,就提取该数据帧的帧头,找出目的MAC地址,跟接收地址列表中的地址项目比较,如果在列表中遇到一个地址,跟该数据帧的目的MAC地址是相同的,就停止比较,接收该数据帧,并把该数据帧放到上层协议对应