IP组播基础及工作原理——2

IGMP3各个版本及各自工作原理

IGMP(因特网组管理协议是TCP/IP协议族中负责IP组播成员管理的一个子协议,用来在IP主机和与其直接相邻的组播路由器之间(不是应用于多个组播路由器之间)建立、维护组播组成员关系。IGMP消息封装在IP报文中,其IP的协议号为2。

到目前为止,IGMP有3个版本:IGMPv1(由RFC1112定义)、IGMPv2(由RFC2236定义)和IGMPv3(由RFC3376定义)。IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。

IGMP的3个版本在演进过程中对协议报文的处理是向前兼容的,因此,尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的成员报告。所有3个版本的IGMP都支持ASM模型,IGMPv3可以直接应用于SSM模型。而IGMPv1和IGMPv2需要SSM-Mapping技术的支持。

一、IGMPv1工作原理

IGMPv1是最初的版本,主要基于查询和响应机制来完成对组播成员的管理。IGMPv1主机可以通过发送加入消息加入直接相连的组播路由器上特定的组播组,但离开时不会发送离开消息(Leave messages)。IGMPv1组播路由器使用基于超时的机制去发现其成员不关注的组。

IGMPv1报文有两种类型。

(1)普通组查询报文(GeneralQuery):是查询器主动向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。

(2)成员报告报文(Report):是主机为了响应普遍查询报文而被动向组播路由器发送的,或者是主机主动向组播路由器发送的报告消息,用于应答普遍查询报文加入某个组播组,或者主动申请加入某个组播组。

IGMPv1协议主要基于查询/响应机制完成组播组管理。当一个网段内有多个组播路由器时,只需要其中一台发送查询报文就足够了,此时需要选举出一个IGMP查询器。在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。

1、普遍组查询和响应机制


如上图(左图显示的是普遍查询报文的传递过程,右图显示的是成员报告报文的传递过程),组播网络中RouterA和RouterB连接主机网段,RouterA为查询器(由PIM路由器选举决定)。在主机网段上有HostA、HostB、HostC三个接收者。现假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发送组播组G2的数据(均需要事先要经过相应配置)。普遍组查询和响应过程如下:

(1)IGMP查询器(RouterA)以目的地址224.0.0.1(这是一个永久组播地址,代表了同一网段内所有主机和路由器,相当于广播地址)向该网段中所有主机和路由器发送普遍组查询报文,以了解该网段中有哪些组播成员存在。普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省60s发送一次。

(2)网段内所有主机和路由器都会接收到该查询报文,但只有已配置了对应组播组的成员才做出响应。为了避免多个成员主机同时发送响应的报告报文,在IGMP中规定,每个组播组会要求组播成员在发送报告报文前启动一个随机定时器(为0~10s),只有定时器超时后才会发送报告报文。因为HostA和HostB是组播组G1成员,所以均会在本地启动定时器Timer-G1;HostC是组播组G2的成员,同样会在本地启动定时器Timer-G2。

(3)当同一组播组中的第一个成员启动的定时器超时后,会以224.0.0.1为目的地址发送针对该组播组的报告报文,在该网段中所有主机和组播路由器(包括IGMP查询器)上都可以接收到该报文,但只有查询器才会做出相应的响应。现假设HostA上的Timer-G1首先超时,它会向该网段发送目的地址也为224.0.0.1的报告报文,此时想加入组G1的HostB也可以侦听到HostA发送的报告报文,则停止自己的定时器Timer-G1,不再发送针对G1的报告报文,这样做的目的可以减少网段上的流量。

同样,HostC的Timer-G2超时后也会向该网段发送报告报文,目的地址也是224.0.0.1。

(4)路由器接收到报告报文后,了解到本网段内存在组播组G1和G2的成员(但不需要了解具体所有成员,只需要知道哪些组播组中有成员),然后由路由器上运行的PIM协议生成对应的两个组播转发表项——(*,G1)和(*,G2),“*”代表任意组播源。这样,网络中一旦有组播组G1和G2的数据到达组播路由器,则将向该网段的对应组播组中的所有成员主机转发。

2、新组成员加入

注意,这里所说的是有成员要加入新的组播组,而不是现有组播组中有新成员加入


如上图,假设在网段上新接入一个主机HostD,想加入组播组G3(事先要通过配置),这是一个在PIM路由器还没建立的新的组播组。此时,该成员主机不会等待查询器的普遍组查询报文的到来,立即主动发送针对G3的报告报文(目的地址也为224.0.0.1)。查询器在收到报告报文后,了解到本网段内出现了新的组播组G3的成员,会由上层PIM协议生成新的组播转发表项——(*,G3)。这样,当网络中一旦有G3的数据到达该PIM路由器后将向该网段的对应组播组中的所有成员主机转发。

3、组成员离开

IGMPv1没有专门定义离开组的报文。当主机离开组播组时不会再对后续的普遍组查询报文做出回应,纯粹通过普遍组查询报文的最大响应定时器来确定某组播组中是否还有组播成员。假设上图中的HostC退出组播组G2,当收到普遍组查询报文时,HostC不再发送针对G2的报告报文进行响应。此时,由于网段上不存在组G2的其他成员,查询器永远不会收到G2的报告报文,会在一定时间(130s)后删除G2所对应的组播转发项。但是如果HostA退出组播组G1,则路由器不会感知到它的离开,因为G1中还有成员HostB,它会进行响应的。

二、IGMPv2的改进

与IGMPv1相比,IGMPv2增加了独立的查询器选举机制(IGMPv1中的查询器是组播路由协议选举指定路由器(DR)当担查询器的)和离开组机制,包含了离开信息,允许迅速向组播路由协议(如PIM)报告组成员终止情况,这对高带宽组播或易变型组播组成员而言是非常重要的。

IGMPv2新增的查询器选举机制和成员离开组机制:

1、查询器选举

IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器,当然这是由各个运行IGMP协议的路由器之间自动选举的,但可以通过IP地址设置间接指定查询器。下图中为两台IGMP路由器IGMP查询器的选举机制(左图为查询器选举初始状态下的普遍查询报文传递情况,右图为查询选举后的普遍查询报文传递情况)


(1)所有IGMPv2路由器在初始时都认为自己是查询器,向本地网段(本示例为10.10.1.0/24)内的所有主机和路由器发送普遍组查询报文。

(2)其他路由器在收到某路由器发来的普遍查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的路由器将成为查询器,其他路由器成为非查询器(Non-Querier)。本示例中,RouterA的接口地址小于RouterB,所以RouterA最终当选为查询器。

所有非查询器上都会启动一个定时器,即“其他查询器存在时间定时器”(Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。这就相当于像RIP、OSPF这些动态路由协议中用来决定邻居路由器是否有效的Hello定时器。

2、离开组机制


如上图,如果两路由器都运行了IGMPv2协议,现主机HostC想离开组播组G2,将会发生以下流程。

(1)在HostC离开组时向本地网段内所有组播路由器(目的地址为224.0.0.2,这是一个代表本网段内所有组播路由器的永久组播地址)发送一个离开组播组G2的报文。

(2)当查询器收到离开报文后,会发送针对组播组G2的特定组查询报文(注意这里不是“普遍组查询报文”),以查询本网段内是否还有其他组播组G2的成员。发送间隔和发送次数可以配置。缺省每隔1s发送一次,一共发送两次。同时启动组成员关系定时器Timer-Membership=发送间隔 X 发送次数。

(3)如果本网段内不存在其他组播组G2的成员,则路由器不会收到针对组播组G2的报告报文,这时会在Timer-Membership定时器超时后,删除(*,G2)表项。这样,粗播组G2的数据再到达路由器时,将不会再向该网段转发。

但在Timer-Membership定时器超时前有其他G2组播组成员以报告报文进行响应特定组查询报文,则表明该网段内还有组播组G2的其他成员,路由器继续维护该组成员关系。

三、IGMPv3的改进

IGMPv3在兼容和继承IGMPv1和IGMPv2的基础上进一步增强了主机的控制能力,支持指定组播源/组播组功能,即主机在加入某组播组G的同时能够明确地要求接收货不接收某特定组播源S发出的组播信息。这主要是为了配合SSM模型发展起来的,提供了在报文中携带组播源信息的能力,使组播成员能加入指定源的组播组。

1、IGMPv3报文

IGMPv3报文也包含两大类:查询报文和报告报文。相较IGMPv2,其变化如下。

(1)查询报文中除了普遍组查询和特定组查询,新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定组播源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。

(2)报告报文不仅通知路由器要加入某组播组,并且可以指定只接收哪些组播源发往改组的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单地表示为(G,INCLUDE,(S1,S2……)),表示只接收来笼子指定组播源S1、S2……发往组G的数据;或(G,ECLUDE,(S1、S2……)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据,即S1、S2……在接收范围之外。

(3)当组播组与组播源列表的对应关系发生了变化,在组播成员发给查询器的IGMPv3报告报文的组记录(Group Record)字段中做出相应变化。组记录有6种类型:


在IGMPv3中一个成员报告报文可以携带对个组播组信息(之前的IGMP版本一个成员报告只能携带一个组播组),所以在IGMPv3组播中的报文数量会大大减少。

IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。例如组225.1.1.1的成员想离开这个组,则会发送(225.1.1.1,TO_IN,(0))的报告报文,通过清空里面的指定组播源来预示要离开对应的组播组。

2、IGMPv3工作机制

在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力,包括特定源组加入和特定源组查询两方面。

(1)特定源组加入

IGMPv3的成员报告报文的目的地址为224.0.0.22(代表同一网段所有使能IGMPv3的路由器,也是一个永久组播地址)。通过在报告报文中 携带组记录,主机在加入组播组的同时能够明确要求接收,或不接收特定组播源发出的组播数据。如下图所示,网络中存在S1和S2两个组播源,均向组播组G发送组播数据,但Host仅希望接收从组播源S1发往组播组G的信息。


如果主机和路由器之间运行的是IGMPv1或IGMPv2,Host加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。但如果运行的是IGMPv3,Host可以选择仅接收S1组播数据。具体有以下两种方法:

①Host发送IGMPv3报告(G,IS_IN,(S1)),明确指定仅接收组播源S1向组播组G发送的数据。这种方法最彻底,不受后面新增组播源的影响,均只接收来自S1的数据。

②Host发送IGMPv3报告(G,IS_EX,(S2)),明确排除不接收指定源S2向组播组G发送的数据,这样一来就间接的预示着仅接收来自S1的组播数据。这种方法不彻底,因为如果网络中有新增的组播要向组播组G发送数据时仍不能被排除。

(2)特定源组查询

当查询器接收到改变组播组与组播源列表的对应关系的报告时(如表12-3的后4种报告报文),会向组播成员发送特定源组查询报文。如果组播成员希望接收其中任意一个源的组播数据,将反馈报告报文。路由器根据反馈的组成员报告更新该组对应的源列表。

四、IGMP SSM Mapping

SSM要求路由器能了解成员主机加入组播组时所指定的组播源。如果成员主机上运行IGMPv3,可以在IGMPv3报告报文中直接指定组播源地址。但是某些情况下,用户主机只能运行IGMPv1或IGMPv2,为了使其也能够使用SSM服务,路由器上需要提供IGMP SSM Mapping功能。但是IGMP SSM Mapping不处理IGMPv3的报告报文。

SSM Mapping的机制是:通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*,G)信息转化为对应的(S,G)信息,以提供SSM组播服务。缺省情况下,SSM组播组的组播IP地址范围为232.0.0.0~232.255.255.255。

配置了SSM Mapping规则后,当路由器收到来自成员主机的IGMPv1或IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理:

(1)如果G在ASM(Any-SourceMulticast,任意源组播)范围内,则只提供ASM服务。

(2)如果G在SSM组地址范围内,而路由器上又没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。

(3)如果G在SSM组地址范围内,路由器上有G对应的SSMMapping规则,则依据规则将报告报文中所包含的(*,G)信息映射为(S,G)信息,提供SSM服务。


如上图,在SSM网络中HostA运行IGMPv3、HostB运行IGMPv2、HostC运行IGMPv1,且HostB和HostC无法升级到IGMPv3.如果要为该网段中的所有主机提供SSM服务,需要在Router上使用IGMP SSM Mapping。

假如在Router上配置以下4个组播组(均为SSM组播IP地址)和组播源的映射关系:

●232.0.0.0/8——>10.10.1.1

●232.1.0.0/16——>10.10.2.2

●232.1.0.0/16——>10.10.3.3

●232.1.1.0/24——>10.10.4.4

经过映射后,Router收到HostB和HostC的成员报告报文时,首先判断报文携带的组播组IP地址是否在SSM范围内,结果发现是在SSM范围内,然后根据配置的映射规则生成如表12-4所示的组播表项。如果一个组地址映射了多个源,则生成多个(S,G)表项。在映射过程中,一个组播组地址只要能在规则中匹配到一个组播源地址,就会生成一条相应的表项。如HostB的报告报文中携带的组播组IP地址为232.1.2.2,从前面的组播组和组播源映射中可以看出,这样一个组播组IP地址可以分别与10.10.1.1、10.10.2.2和10.10.3.3匹配,因为IP地址232.1.2.2可以是232.0.0.0/8中的一个地址,也可以是232.1.0.0/16中的一个地址(它又与10.10.2.2和10.10.3.3这两个组播源进行了映射),但不可能是232.1.1.0/24中的一个IP地址(因为第三个八位不可能一样),所以组播组地址232.1.2.2最终有3条表项。同理,组播组地址232.1.1.1最终有4条表项。


五、IGMP典型应用

IGMP运行在成员主机和与其直连的组播路由器上,负责组播组成员关系的管理和维护。同时,为了将组播源的数据顺利转发到接收者,组播路由器之间需要运行组播路由协议PIM来建立转发路径。下图为IGMP的典型应用组网图。



  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值