IGMPv2
igmp版本2对版本1所做的改进主要有:(1)共享网段上组播路由器的选举机制共享网段表示一个网段上有多个组播路由器的情况。在这种情况下,由于此网段上运行igmp的路由器都能从主机那里收到成员资格报告消息,因此,只需要一个路由器发送成员资格查询消息,这就需要一个路由器选举机制来确定一个路由器作为查询器。其选举过程如下:(1) 所有IGMPv2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为:224.0.0.1)
(2) 本地网段中的其它IGMPv2路由器在收到该报文后,将报文的源IP 地址与自己的接口地址作比较。通过比较,IP 地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);(3) 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器OtherQuerier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。在igmp版本1中,查询器的选择由组播路由协议决定;igmp版本2对此做了改进,规定同一网段上有多个组播路由器时,具有最小ip地址的组播路由器被选举出来充当查询器。(2)igmp版本2增加了离开组机制在igmp版本1中,主机悄然离开组播组,不会给任何组播路由器发出任何通知。造成组播路由器只能依靠组播组响应超时来确定组播成员的离开。而在版本2中,当一个主机决定离开时,如果它是对一条成员资格查询消息作出响应的主机,那么它就会发送一条离开组的消息。在IGMPv2 中,当一个主机离开某组播组时:(1) 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;(2) 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);(3) 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;(4) 如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。(3)igmp版本2增加了对特定组的查询在igmp版本1中,组播路由器的一次查询,是针对该网段下的所有组播组。这种查询称为普遍组查询。在igmp版本2中,在普遍组查询之外增加了特定组的查询,这种查询报文的目的ip地址为该组播组的ip地址,报文中的组地址域部分也为该组播组的ip地址。这样就避免了属于其它组播组成员的主机发送响应报文。(4)igmp版本2增加了最大响应时间字段igmp版本2增加最大响应时间字段,以动态地调整主机对组查询报文的响应时间。
IGMPv3
1)主机控制能力的增强IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G 的同时,能够明确要求接收或拒绝来自某特定组播源S 的组播信息。当主机加入组播组时:若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。2)查询和报告报文功能的增强(1) 携带源地址的查询报文IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:z 普遍组查询报文中,既不携带组地址,也不携带源地址;z 特定组查询报文中,携带组地址,但不携带源地址;z 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。(2) 包含多组记录的报告报文IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。z TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。实现步骤如下:1、当主机某个进程加入一个组播组时,主机发送一个IGMP 报告。若一个主机多个进程同时加入同一组,则发送一个IGMP 报告。2、进程离开一个多播组时,主机不发送IGMP 报告,即便是组中最后一个进程离开多播组。当主机确定已不再有组成员后,在随后收到的IGMP 查询中就不应答报文。3、多播路由器定时发送IGMP 查询是否还有其他主机包含有属于多播组的进程。多播路由器必须向每个接口发送IGMP 查询。4、主机通过发送IGMP 报告来响应一个IGMP 查询,对每个至少还包含一个进程的组均要发回IGMP 报告。使用上述查询和报告报文,多播路由器对每个接口保持一张映射表,表中记录了接口上包含的一个或多个主机多播组。当路由器收到要转发的多播数据报时,只需将该数据报转发到该接口上。