
4、IGMPv3与IGMPv2相比的变化
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
4.1、IGMPv3报文介绍
与IGMPv2相比,IGMPv3报文的变化如下:
IGMPv3报文包含两大类:
查询报文和成员报告报文。
IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。
该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。
IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2...)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2...)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。
当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。
在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。
IGMPv3查询报文的格式如下图1所示,其中各个字段的说明见下表1。
图1 IGMPv3查询报文格式
字段 |
说明 |
Type |
报文类型,取值为0x11。 |
Max Response Code |
最大响应时间。 成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。 |
Checksum |
IGMP报文的校验和。 校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。 |
Group Address |
组播组地址。 在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。 |
Resv |
保留字段。 发送报文时该字段设为0;接收报文时,对该字段不做处理。 |
S |
该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询器选举过程和路由器的主机侧处理过程。 |
QRV |
如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。 |
QQIC |
IGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。 |
Number of Sources |
报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。 |
Source Address |
组播源地址,其数量受到Number of Sources字段值大小的限制。 |
IGMPv3成员报告报文的格式如下图2所示,其中各个字段的说明见下表2。
图2 IGMPv3成员报告报文格式
字段 |
说明 |
Type |
报文类型,取值为0x22。 |
Reserved |
保留字段。 发送报文时该字段设为0;接收报文时,对该字段不做处理。 |
Checksum |
IGMP报文的校验和。 校验和是IGMP报文长度(即IP报文的整个有效负载)的16位检测,表示IGMP信息补码之和的补码。Checksum字段在进行校验计算时设为0。当发送报文时,必须计算校验和并插入到Checksum字段中去。当接收报文时,校验和必须在处理该报文之前进行检验。 |
Number of Group Records |
报文中包含的组记录的数量。 |
Group Record |
组记录。 Group Record字段的格式如下图3所示,解释如下表3所示。 |
图3 Group Record字段格式
字段 |
说明 |
Record Type |
组记录的类型。共分为三大类。 当前状态报告。 用于对查询报文进行响应,通告自己目前的状态,共两种: 1、MODE_IS_INCLUDE,表示接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该报文无效。 2、MODE_IS_EXCLUDE,表示不接收源地址列表包含的源发往该组的组播数据。 过滤模式改变报告。当组和源的关系在INCLUDE和EXCLUDE之间切换时,会通告过滤模式发生变化,共两种: 1、CHANGE_TO_INCLUDE_MODE,表示过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组。 2、CHANGE_TO_EXCLUDE_MODE,表示过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表包含的新组播源发往该组的组播数据。 源列表改变报告。当指定源发生改变时,会通告源列表发生变化,共两种: 1、ALLOW_NEW_SOURCES,表示在现有的基础上,需要接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。 2、BLOCK_OLD_SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。 |
Aux Data Len |
辅助数据长度。 在IGMPv3的报告报文中,不存在辅助数据字段,该字段设为0。 |
Number of Sources |
本记录中包含的源地址数量。 |
Multicast Address |
组播组地址。 |
Sources Address |
组播源地址。 |
Auxiliary Data |
辅助数据。 预留给IGMP后续扩展或后续版本。在IGMPv3的报告报文中,不存在辅助数据。关于该字段的详细说明,请参考RFC 3376。 |
4.2、IGMPv3工作机制
在工作机制上,与IGMPv2相比,IGMPv3增加了主机对组播源的选择能力。
4.2.1 、IGMPv3特定源组加入
IGMPv3的成员报告报文的目的地址为224.0.0.22(表示同一网段所有使能IGMPv3的路由器)。通过在报告报文中携带组记录,主机在加入组播组的同时,能够明确要求接收或不接收特定组播源发出的组播数据。
图4 特定源组的组播数据流路径
如上图4所示,网络中存在S1和S2两个组播源,均向组播组G发送组播数据,Host仅希望接收从组播源S1发往组播组G的信息。
如果Host和组播路由器之间运行的是IGMPv1或IGMPv2,Host加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。
如果采用IGMPv3,成员主机可以选择仅接收S1组播数据。
方法一:Host发送IGMPv3报告(G,INCLUDE,(S1)),仅接收源S1向组播组G发送的数据。
方法二:Host发送IGMPv3报告(G,EXCLUDE,(S2)),不接收指定源S2向组播组G发送的数据,从而仅有来自S1的组播数据才能传递到Host。
4.2.2、IGMPv3特定源组查询
当接收到组成员发送的改变组播组与源列表的对应关系的报告时(比如CHANGE_TO_INCLUDE_MODE、CHANGE_TO_EXCLUDE_MODE),IGMP查询器会发送特定源组查询报文。如果组成员希望接收其中任意一个源的组播数据,将反馈报告报文。IGMP查询器根据反馈的组成员报告更新该组对应的源列表。
5、IGMP SSM Mapping
SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。
如果成员主机上运行IGMPv3,可以在IGMPv3报告报文中直接指定组播源地址。
但是某些情况下,成员主机只能运行IGMPv1或IGMPv2,为了使其也能够使用SSM服务,路由器上需要提供IGMP SSM Mapping功能。
IGMP SSM Mapping的机制是:
通过在路由器上静态配置SSM地址的映射规则,将IGMPv1和IGMPv2报告报文中的(*, G)信息转化为对应的(G, INCLUDE, (S1, S2...))信息,以提供SSM组播服务。
配置了SSM Mapping规则后,当IGMP查询器收到来自成员主机的IGMPv1或IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理。
如果G在ASM(Any-Source Multicast,任意源组播)范围内,则只提供ASM服务。
如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255):
如果路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。
如果路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*, G)信息映射为(G, INCLUDE, (S1, S2...))信息,提供SSM服务。
图1 IGMP SSM Mapping组网图
如上图1所示,SSM网络中HostA运行IGMPv3、HostB运行IGMPv2、HostC运行IGMPv1。HostB和HostC无法升级到IGMPv3,如果要为该网段中的所有主机提供SSM服务,需要在IGMP查询器(Router)上使能IGMP SSM Mapping并配置相应的映射规则。
假如在Router上配置如下映射关系:
映射的组播源地址 |
|
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的成员报告报文时,首先判断报文携带的组地址是否在SSM范围内,发现在SSM范围内,则根据配置的映射规则生成如下所示的组播表项。如果一个组地址映射了多个源,则生成多个(S, G)表项。
生成的组播表项 |
|
232.1.1.1 (来自HostC) |
(10.10.1.1,232.1.1.1) (10.10.2.2,232.1.1.1) (10.10.3.3,232.1.1.1) (10.10.4.4,232.1.1.1) |
232.1.2.2 (来自HostB) |
(10.10.1.1,232.1.2.2) (10.10.2.2,232.1.2.2) (10.10.3.3,232.1.2.2) |
在映射过程中,一个组播组地址只要能在规则中匹配到,都会生成一条相应的表项。因此232.1.1.1有四条表项,232.1.2.2有三条表项。
IGMP SSM Mapping不处理IGMPv3的报告报文。为了保证同一网段运行任意版本IGMP的主机都能得到SSM服务,需要在与成员主机所在网段相连的组播路由器接口上运行IGMPv3。
6、IGMP典型应用举例
IGMP运行在成员主机和与其直接相邻的组播路由器上,负责组播组成员关系的管理和维护。同时,为了将组播源的数据顺利转发到接收者,组播路由器之间需要运行组播路由协议PIM来建立转发路径。
图1 IGMP典型应用组网图
在实际应用中,可能有如下几种方案。
成员主机 |
与成员主机相连的路由器接口 |
网络中的所有路由器 |
|
ASM主机动态接入 |
启用IGMPv1或IGMPv2 |
启用IGMPv1或IGMPv2 |
启用PIM-DM或PIM-SM协议 |
SSM主机动态接入 |
启用IGMPv3 |
启用IGMPv3 |
启用PIM-SM协议 |
SSM Mapping主机动态接入 |
启用IGMPv1或IGMPv2 |
启用IGMPv3,使能IGMP SSM Mapping功能,配置源和组映射关系 |
启用PIM-SM协议 |



本文地址:http://www.023wg.com/Multicast/212.html
版权声明:若无注明,本文皆为“Swiers思唯网络博客”原创,转载请保留文章出处。

