IGMP(Internet Group Management Protocol)互联网组管理协议是TCP/IP 协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
到目前为止,IGMP 有三个版本:
所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3 可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1 和IGMPv2 则需要在IGMP SSM Mapping 技术的支持下才能应用于SSM 模型。
IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关系报告报文(Membership Report Message)。
因此,只需其中一台路由器发送IGMP 查询报文(Query Message)就足够了。这时就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。
对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。
IGMP 查询相应示意图
如上图所示,假设Host B与Host C想要收到发往组播组G1 的组播数据,而Host A想要收到发往组播组G2 的组播数据,那么主机加入组播组以及IGMP查询器(Router B)维护组播组成员关系的基本过程如下:
1)主机将主动发送IGMP 成员关系报告报文到其要加入的组播组,以声明加入,而不必等待IGMP查询器发来的IGMP 查询报文;
2)IGMP 查询器周期性地以组播方式,向本地网段内的所有主机与路由器发送IGMP 查询报文(目的地址为224.0.0.1);
3)在收到该查询报文后,关注G1 的Host B 与Host C 其中之一(这取决于谁的延迟定时器先超时),譬如Host B 会首先以组播方式向G1 发送IGMP 成员关系报告报文,以宣告其属于G1。由于本地网段中的所有主机和路由器都能收到Host B 发往G1 的报告报文,因此当Host C 收到该报告报文后,将不再发送同样针对G1的报告报文,因为IGMP 路由器(Router A和Router B)已知道本地网段中有对G1 感兴趣的主机了。这个机制称为主机上的IGMP 成员关系报告抑制机制,该机制有助于减少本地网段的信息流量;
4)与此同时,由于Host A 关注的是G2,所以它仍将以组播方式向G2 发送报告报文,以宣告其属于G2;
5)经过以上的查询和响应过程,IGMP 路由器了解到本地网段中有G1 和G2 的成员,于是由组播路由协议(如PIM)生成(*,G1)和(*,G2)组播转发项作为组播数据的转发依据,其中的“*”代表任意组播源;
6)当由组播源发往G1 或G2 的组播数据经过组播路由到达IGMP 路由器时,由于IGMP 路由器上存在(*,G1)和(*,G2)组播转发项,于是将该组播数据转发到本地网段,接收者主机便能收到该组播数据了。IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP 路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。
与IGMPv1 相比,IGMPv2 增加了查询器选举机制和离开组机制。
在IGMPv1 中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。
在IGMPv2 中,增加了独立的查询器选举机制,其选举过程如下:
在IGMPv1 中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。
而在IGMPv2 中,当一个主机离开某组播组时:
IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:
指定源组的组播流路经
如上图所示,网络中存在Source 1(S1)和Source 2(S2)两个组播源,均向组播组G发送组播报文。Host B仅对从Source1 发往G的信息感兴趣,而对来自Source 2 的信息没有兴趣。
如果主机与路由器之间运行的是IGMPv1 或IGMPv2,Host B 加入组播组G 时无法对组播源进行选择,因此无论Host B 是否需要,来自Source 1 和Source 2 的组播信息都将传递给Host B。
当主机与路由器之间运行了IGMPv3 之后,Host B 就可以要求只接收来自Source 1、发往G 的组播信息(S1,G),或要求拒绝来自Source 2、发往G 的组播信息(S2,G),这样就只有来自Source 1 的组播信息才能传递给Host B 了。
a. 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
b. 包含多组记录的报告报文
IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
根据接收者对组播源处理方式的不同,组播模型分为以下三类:
在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。
在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。
该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。
在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。
因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。
在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。
SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。
为了让组播源和组播组成员进行通信,需要提供网络层组播地址,即IP 组播地址。同时必须存在一种技术将IP 组播地址映射为链路层的组播MAC 地址。
IANA(Internet Assigned Numbers Authority,互联网编号分配委员会)将D类地址空间分配给IPv4组播使用,范围从224.0.0.0到239.255.255.255,具体分类及其含义如下表所示。
IPv4 组播地址的范围及含义
说明:
IPv4 组播地址与MAC 地址的映射关系
于是,就有32 个IPv4 组播地址映射到了同一个IPv4 组播MAC 地址上,因此在二层处理过程中,设备可能要接收一些本IPv4 组播组以外的组播数据,而这些多余的组播数据就需要设备的上层进行过滤了。
通常,我们把工作在网络层的IP 组播称为“三层组播”,相应的组播协议称为“三层组播协议”,包括IGMP、PIM、MSDP、MBGP等;把工作在数据链路层的IP 组播称为“二层组播”,相应的组播协议称为“二层组播协议”,包括IGMP Snooping、组播VLAN 等。
三层组播协议包括组播组管理协议和组播路由协议两种类型,它们在网络中的应用位置如下图。
三层组播协议的应用位置
a. 组播组管理协议
在主机和与其直接相连的三层组播设备之间通常采用组播组的管理协议IGMP,该协议规定了主机与三层组播设备之间建立和维护组播组成员关系的机制。
b. 组播路由协议
组播路由协议运行在三层组播设备之间,用于建立和维护组播路由,并正确、高效地转发组播数据包。
组播路由建立了从一个数据源端到多个接收端的无环(loop-free)数据传输路径,即组播分发树。
对于ASM 模型,可以将组播路由分为域内和域间两大类:
对于SSM 模型,没有域内和域间的划分。由于接收者预先知道组播源的具体位置,因此只需要借助PIM-SM 构建的通道即可实现组播信息的传输。
二层组播协议包括IGMP Snooping和组播VLAN等,它们在网络中的应用位置如下图。
二层组播协议的应用位置
a. IGMP Snooping
IGMP Snooping(Internet Group Management Protocol Snooping,互联网组管理协议窥探)是运行在二层设备上的组播约束机制,通过窥探和分析主机与三层组播设备之间交互的IGMP 报文来管理和控制组播组,从而可以有效抑制组播数据在二层网络中的扩散。
b. 组播VLAN
在传统的组播点播方式下,当连接在二层设备上、属于不同VLAN 的用户分别进行组播点播时,三层组播设备需要向该二层设备的每个VLAN 分别发送一份组播数据;而当二层设备运行了组播VLAN。