IGMP概述
多播路由器和实现多播的主机必须使用因特网组管理协议(Internet group management protocol,IGMP)进行多播组成员信息的通信。
-
IGMPv1,它定义了基本多播组成员查询和报告过程。
-
IGMPv2,它在IGMPv1的基础上添加了组成员快速离开的机制。
-
IGMPv3,它增加的主要功能是成员可以指定接收或指定不接收某些多播源的分组。
IGMPv1
工作原理
-
路由器定期向网络内广播成员关系查询报文,查询网络内是否有多播组成员;
-
如果主机想加入某个多播组,就向路由器发送成员关系报告报文;
-
主机如果想离开某个多播组,就对路由器的查询报文保持沉默,经过一段时间后,路由器便知道网络内没有多播组成员了。
IGMPv1 查询—响应过程
-
查询路由器RA周期性(默认是60s)地向本地网络上的所有路由器(使用多播地址224.0.0.1)发送多播组成员关系查询报文。所有开启多播功能的主机都必须侦听成员关系查询报文。
-
主机接收到成员关系查询报文后,希望加入某个多播组的主机就响应该查询报文。发送一个成员关系报告报文到本地网络上,在IGMP报文的组地址字段中设置想要加入的多播组的地址。例如,主机B想加入多播组224.1.1.1,则它发送成员关系报告报文进行响应,组地址字段的值等于224.1.1.1。
-
由于主机A侦听到了来自主机B的关于多播组224.1.1.1的成员关系报告报文,所以按照协议的约定,主机A抑制加入到多播组224.1.1.1的成员关系报告报文的发送。
因为多播路由器只关心该网络上是否还至少有一个主机属于某个特定组的成员,并不关心某个特定组有几个成员,所以可以利用报告响应抑制功能来减少网络中的重复信息传递。
-
主机C想加入多播组224.2.2.2,所以它发送关于224.2.2.2的IGMP成员关系报告报文,来响应路由器的成员关系查询报文。
-
路由器RA接收到来自主机的成员关系报告报文后,就知道了在该本地网络上有主机想加入多播组224.1.1.1和224.2.2.2(多播组地址从成员关系报告报文中可以获得)。接下来,路由器就会根据这些信息,在多播组地址表中建立或者维护更新关于这些多播组的表项。同时,路由器B也知道了关于本网络上的活动多播组的所有信息,也可以建立或者维护更新自己的多播组地址表。
主机对成员关系查询报文的处理流程
-
主机接收到IGMP成员关系查询报文后,对加入的每个多播组启动一个倒计时器。
-
当计时器的值为0时,主机发送IGMP成员关系报告报文,通知路由器网络内仍有处于活动状态的某个多播分组的接受者。
-
当计时器达到0之前,若主机接收到来自其他主机发送的同样的组成员关系报告报文,那么它就取消对多播组的计时。这样就避免了发送同一个成员关系报告报文给路由器。通过报告抑制机制,有助于将网络中IGMP报文数量减少到最小。
IGMP报文的发送和处理过程
组表
字段 | 含义 |
---|---|
状态 | FREE:组中没有进程。DELYING:计时器时间倒计时,必须为这个表项发送成员关系报告报文。IDLE:没有关于这个表项的计时器在运行。 |
接口号 | 定义发送和接收多播分组所要经过的接口。 |
组地址 | 定义多播组地址 |
引用计数 | 保存主机中加入到某个多播组的进程数目。每当一个进程加入到这个多播组,引用计数值就加1;每当一个进程退出这个多播组时,引数值就减1。如果引用计数值为0,这个表项就会从组表中删除,而状态就变为FREE。 |
组加入模块流程图:
组离开模块流程图:
输入模块流程图:
输出模块流程图:
IGMPv3
可以使计算机指定它从特定多播组中的哪一个源节点接收数据,使用了多播组地址和多播源地址同时来标识一个多播会话,这就是源特定多播( Source Specific Multicast,SSM)。
报文格式
两种类型:
(1)类型字段:0x11,成员关系查询报文,由路由器发送给多播组成员的查询报文。
-
一般查询,路由器利用这类查询来收集其接口所连接的网络上的所有接受者信息。
-
特定组查询,用来查询某一特定多播组在其接口所连网络上的接受者的情况。
-
特定组和源的查询,用来查询是否有主机要接收某一特定组中某些特定多播源发送来的多播数据。
(2)字段类型:0x22,成员关系报告报文,由主机生成并发送该报文,用来报告主机上的应用进程目前正在使用哪些多播组。
主要改进
-
支持源特定多播SSM。主机可以向路由器通告自己期望接收,或者不想接收的源地址。
-
向后兼容IGMPv1和IGMPv2。
-
主机可以定义想要接收的多播源地址。
-
非查询路由器可以与查询路由器保持参数值同步。
-
最大响应时间从25.5s增加到53min,适合较大网络。
-
辅助数据字段为将来的应用预留了空间。
-
成员关系报告报文发送给目的地址224.0.0.22,可以帮助二层交换机更有效地实现IGMP监听功能。
-
报告报文中可以包含多个组记录,可以有效地减少网络通信量。
-
在IGMPv3中,取消了前面版本中的响应和抑制功能,路由器可以知道多播组中有几个组员,记录每个接口上每一个主机的组成员关系状态;简化了一些设备的设计和实现;一个成员关系报告报文可以包含多个多播组记录。
-
在查询报文中,增加了S标志位,可以提高系统的健壮性。
IGMP为什么要采用报告抑制功能?另外,请说明IGMPv2的组成员离开多播组的过程。
因为IGMPv1和IGMPv2协议多播路由器只关心该网络上是否还至少有一个主机属于某个特定组的成员,并不关心某个特定组有几个成员,所以可以利用报告响应抑制功能来减少网络中的重复信息传递。IGMPv3取消了报告抑制功能。
要离开的主机发送一个离开组报文给网络上所有路由器;查询路由器接收到离开组报文后立即发送一个特定多播组查询报文到网络中,如果网络中还有很多多播组成员,会在允许的延迟时间内发回一个响应报文,如果网络上已经没有该多播组网络成员,则不会有主机响应,路由器便停止转发该多播组数据。