IGMP基本原理
IGMP报文
IGMP报文大致分为三种,如图3-1所示:
IGMP查询报文(IGMP Query):当路由器了解与该接口连接的网段上存在哪些组播组的接收者时,向主机发送的报文称之为IGMP Query报文。只有查询器负责发送IGMP Query报文。IGMP查询报文又细分为:
普遍组查询:不针对指定的组播源和组播组。
特定组查询:针对指定的组播组。
特定源组查询:针对指定的组播源和组播组。
IGMP加入报文(IGMP Report):当主机想要加入组播组时,向上游发送的报文称之为IGMP Report报文。
IGMP离开报文(IGMP Leave):当主机想要离开组播组时,向上游发送的报文称之为IGMP Leave报文。
IGMPv2和IGMPv3支持IGMP离开报文,IGMPv1不支持。
使能IGMP协议的组播设备角色
使能了IGMP协议的组播设备在网段中的角色有两个:
查询器
负责发送查询报文,并接收主机反馈的加入报文和离开报文,以此来了解与该接口连接的网段上有哪些组播组存在接收者(即组成员)。
非查询器
只接收主机反馈的加入报文,了解与该接口连接的网段上有哪些组播组存在接收者,并根据网段中查询器的动作确定当前网段中有哪些组播组成员离开。
通常情况下一个网段只有一个查询器,因此组播设备之间需要用某些方式来选出查询器。查询器选举时采用以下的原则:
组播设备A使能IGMP协议后,在IGMP协议启动阶段会默认自己为当前网段中的查询器,向网段中发送查询报文。如果收到IP地址比自己小的组播设备B发来的查询报文,则A由查询器转为非查询器,并启动其他查询器存在定时器,记录B为当前网段的查询器。
如果组播设备A在非查询器状态时,收到查询器组播设备B发送的查询报文,则更新其他查询器存在定时器。如果此时收到的查询报文不是先前记录的查询器B发来的,而是新的组播设备C发来的,且C的IP地址比B的小,则更新查询器为C,同时更新其他查询器存在定时器。
如果组播设备A在非查询器状态时,其他查询器存在定时器超时,则由非查询器转为查询器状态,承担起查询器的职责。
协议规定IGMPv1不支持查询器选举,IGMPv1查询器由上层协议(如PIM)指定。当前仅支持同网段上同版本的组播设备之间进行查询器选举。为了保证正常工作,需要在同网段所有组播设备上配置相同版本的IGMP。
IGMP协议的实现过程
通过发送查询报文并接收主机反馈的加入报文和离开报文,路由器可以了解与该接口连接的网段上存在哪些组播组的接收者(即组成员)。如果出现组成员,组播路由器应将对应组的组播数据报文转发到这个网段;如果没有组成员则不转发。主机可以自主决定加入或退出某个组播组。
如图3-2所示,使能了IGMP协议的路由器DeviceA会自动变为查询器并定时发出IGMP查询报文,与DeviceA在同一网段的所有主机(HostA、HostB、HostC)都能收到它发出的查询报文。
主机收到查询报文的处理:
如果主机之前已经加入了组G,就会在路由器允许的响应时间内随机发送一个组G的IGMP加入报文。
DeviceA收到组G的IGMP加入报文会记录组G的相关信息,同时对该组启动一个定时器(如果已经启动则刷新定时器),以便长时间没有主机响应时切断该组的组播流量。DeviceA把组G的组播数据转发到HostA和DeviceA相连的接口所在的网段上。
如果主机不是任何组播组成员,主机在收到IGMP查询报文时不作任何响应。
主机加入组播组:
一个新加入组播组G的主机会主动发送一个该组的IGMP加入报文,通知路由器更新组播组信息,后续的加入报文则由路由器的查询报文来驱动。
主机离开组播组:
如果一个主机决定离开某个组播组G,会主动发送组G的IGMP离开报文。路由器收到后会触发一个指定组G的查询,确定该组在当前网段接收者的存在情况。如果在查询结束后仍然没有收到主机针对该组的IGMP加入报文,则删除已记录的组信息,停止转发该组数据到对应接口所在的网段上。
IGMP各版本处理IGMP报文的特点
IGMP版本 |
特点 |
---|---|
IGMPv1 |
|
IGMPv2 |
说明:
IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查询报文。IGMP非查询器不处理IGMPv2离开报文。 |
IGMPv3 |
|
IGMPv2较IGMPv1的优势 |
|
IGMPv3较IGMPv2的优势 |
|
IGMP组兼容
IGMP组兼容模式是指支持高IGMP版本的组播设备可以兼容低版本的主机。例如v2版本的组播设备可以正确处理v1主机的加入,v3版本的组播设备可以正确处理v1和v2版本的主机加入。当组播设备工作在兼容模式时,收到低版本的主机的IGMP加入报文后会自动降低组的兼容版本到该主机对应的版本,并工作在该版本上。
工作在v2版本的组播设备收到v1版本的Report报文时,会自动把该组的兼容模式设定为v1模式。在这种情况下,设备会忽略针对该组的IGMPv2 Leave报文。
工作在v3版本的组播设备收到v2版本的Report报文时,会自动把该组的兼容模式设定为v2模式。在这种情况下,设备会忽略IGMPv3的BLOCK报文和IGMPv3的TO_EX报文的源列表,即抑制了IGMPv3对组播源的选择功能。
工作在v3版本的组播设备收到v1版本的Report报文时,会自动把该组的兼容模式设定为v1模式。在这种情况下,设备会忽略IGMPv2的Leave报文、IGMPv3的BLOCK报文、IGMPv3的TO_IN报文和IGMPv3的TO_EX报文的源列表。
通过手工配置把组播设备从低版本升到高版本时,如果有组存在,则这些组继续工作在低版本的兼容模式,直到低版本的主机退出该组播组。
IGMP支持Router-Alert
通常情况下,只有目的地址属于本设备的接口地址时,IGMP报文才会上送给路由协议层处理。Router-Alert是一种标识协议报文的特殊机制。如果一个报文中带有Router-alert选项,则表示该报文需要被上送到路由协议层去处理。在实际使用中,有些协议报文的目的地址是组播地址或其他特殊地址,如果报文中没有带有Router-Alert选项,可能不会被上送。
IGMP报文的目的地址一般为组地址而非组播设备的接口地址,这样就导致报文可能不会被上送到路由协议层处理,Route-Alert选项可以解决此类问题。
当组播设备收到IGMP报文时,如果没有配置Router-Alert选项,无论IGMP报文有没有Route-Alert选项,都会上送到路由协议层去处理。如果配置了Router-Alert选项,则只有带有Route-Alert选项的IGMP报文才会被上送到路由协议层处理。