全部博文(413)
分类: LINUX
2012-01-09 13:14:39
IGMP是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP协议族中负责IP成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
的版本到目前为止,IGMP有三个版本:
l IGMPv1(由RFC 1112定义)
l IGMPv2(由RFC 2236定义)
l IGMPv3(由RFC 3376定义)
所有版本的IGMP都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1和IGMPv2则需要在IGMP SSM Mapping技术的支持下才能应用于SSM模型。
IGMPv1工作机制IGMPv1主要基于查询和响应机制来完成对组播组成员的管理。
当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP成员关系报告报文(Membership Report Message),因此只需要其中一台路由器发送IGMP查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP查询器。
对于IGMPv1来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP查询器。
查询响应示意图
如图1所示,假设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路由器在一段时间之后便删除该组播组所对应的组播转发项。
IGMPv2的改进与IGMPv1相比,IGMPv2增加了查询器选举机制和离开组机制。
1. 查询器选举机制在IGMPv1中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。
在IGMPv2中,增加了独立的查询器选举机制,其选举过程如下:
(1) 所有IGMPv2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP普遍组查询
(General Query)报文(目的地址为224.0.0.1);
(2) 本地网段中的其它IGMPv2路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,
IP地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);
(3) 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器Other Querier Present Timer)。在该
定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,
并发起新的查询器选举过程。
在IGMPv1中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。
而在IGMPv2中,当一个主机离开某组播组时:
(1) 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;
(2) 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文
(目的地址字段和组地址字段均填充为所要查询的组播组地址);
(3) 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间
(Max Response Time)内发送成员关系报告报文;
(4) 如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的
成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
IGMPv3在兼容和继承IGMPv1和IGMPv2的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
1. 主机控制能力的增强IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE, 也称为SFM-Source Filter Multicast),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。当主机加入组播组时:
l 若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为
INCLUDE Sources(S1,S2,……);
l 若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为
EXCLUDE Sources(S1,S2,……)。
如图2所示,网络中存在Source 1(S1)和Source 2(S2)两个组播源,均向组播组G发送组播报文。Host B仅对从Source 1发往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了。
2. 查询和报告报文功能的增强(1) 携带源地址的查询报文
IGMPv3不仅支持IGMPv1的普遍组查询和IGMPv2的特定组查询,而且还增加了对特定源组查询的支持:
l 普遍组查询报文中,既不携带组地址,也不携带源地址;
l 特定组查询报文中,携带组地址,但不携带源地址;
l 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
(2) 包含多组记录的报告报文
IGMPv3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
l IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的
组播数据。
l IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源
发往该组播组的组播数据。
l TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE转变为INCLUDE。
l TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE转变为EXCLUDE。
l ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向
现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
l BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,
则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。
IGMP SSM Mapping通过在路由器上配置SSM静态映射规则,从而为运行IGMPv1或IGMPv2的接收者主机提供对SSM模型的支持。
SSM模型要求在接收者主机所在的网段,路由器能够了解主机加入组播组时所指定的组播源。如果接收者主机上运行的是IGMPv3,则可以在IGMPv3的报告报文中直接指定组播源的地址;如果某些接收者主机只能运行IGMPv1或IGMPv2,则在IGMPv1或IGMPv2的报告报文中无法指定组播源的地址。这种情况下需要通过在路由器上配置IGMP SSM Mapping功能,将IGMPv1或IGMPv2报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2...))信息。
组网图
在如图3所示的SSM网络中,Host A、Host B和Host C上分别运行IGMPv1、IGMPv2和IGMPv3。在不允许将Host A和Host B升级为IGMPv3的情况下,若要为Host A和Host B也提供SSM组播服务,则需在Router A上使能IGMP SSM Mapping并配置相应的映射规则。
配置完成后,当Router A收到来自主机的IGMPv1或IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理:
(1) 如果G不在SSM组地址范围内,则提供ASM组播服务。
(2) 如果G在SSM组地址范围内:
l 若Router A上没有G对应的IGMP SSM Mapping规则,则无法提供SSM组播服务,丢弃该报文;
l 若Router A上有G对应的IGMP SSM Mapping规则,则依据规则将报告报文中所包含的(*,G)信息映射为
(G,INCLUDE,(S1,S2...))信息,可以提供SSM组播服务。
注: IGMP SSM Mapping不对IGMPv3的报告报文进行处理。
在一些简单的树型网络拓扑中,边缘设备上并不需要运行复杂的组播路由协议(如PIM),可以通过在这些设备上配置IGMP Proxying(IGMP代理)功能,使其代理下游主机来发送IGMP报文及维护组成员关系,并基于该关系进行组播转发。在上游设备看来,配置了IGMP Proxying功能的设备(称为IGMP代理设备)不再是一个PIM邻居,而只是一台主机。
组网图
如图4所示,IGMP Proxying中定义了以下两种接口类型:
l 上行接口:又称代理接口,指IGMP代理设备上运行IGMP Proxying功能的接口,即朝向组播分发树树根方向的接口。由于该接口执行IGMP协议的主机行为,因此也称为主机接口(Host Interface)。
l 下行接口:指IGMP代理设备上除上行接口外其它运行IGMP协议的接口,即背向组播分发树树根方向的接口。由于该接口执行IGMP协议的路由器行为,因此也称为路由器接口(Router Interface)。
IGMP代理设备上维护着一个组成员关系数据库(Membership Database),将所有下行接口维护的组成员关系记录都存到这个数据库中。组成员关系记录的结构如下:(Multicast-address,Filter-mode,Source-list),每条记录都是各下行接口上具有相同组地址的成员关系记录的合集。
上行接口正是依据这个数据库来执行主机行为——当收到查询报文时根据当前数据库状态响应报告报文,或者当数据库变化时主动发送报告或离开报文;而下行接口则执行路由器行为——参与查询器的选举、发送查询报文并根据报告报文维护组成员关系等。
IGMP依据接口来维护组成员关系,VPN实例的IGMP根据接口所属的实例来处理协议报文的收发。当路由器收到IGMP报文时,需要区分该报文所属的实例,并在该实例范围内对其进行处理。当某VPN实例的IGMP需要和其它组播协议交互信息时,只会通知本VPN实例内的其它组播协议。