感知组播组成员
组播通信中,组播网络需要将组播数据发送给特定的组播组成员,因此组播网络需要知道组成员的位置与组成员所加的组播组。
组播网络感知组播组成员的方法有手工静态配置和动态感知。
手工静态配置
在组播路由器上静态指定连接组播组成员的接口,静态配置组成员加组信息。
手工静态方式灵活性差,配置工作量大,但相对比较稳定,对于新上线的组成员能够快速建立组播转发通路。
动态感知
通过IGMP协议通知组播网络,组播网络根据IGMP消息感知组播组成员所在接口,以及组成员加组信息。
动态感知方式较为灵活,且配置简单,现网一般使用动态感知方式。
IGMP概述
IGMP(Internet Group Management Protocol,因特网组管理协议),是TCP/IP协议族中负责IPv4组播成员管理的协议,用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。组成员可以将加组消息发送给组播网络,从而让组播网络感知到组成员的位置和所加组播组。
IGMP通过在组播组成员和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
到目前为止,IGMP有三个版本: IGMPv1 IGMPv2 IGMPv3。
组播路由器与组成员间交互报文后会生成IGMP路由表项与IGMP组表项。
IGMP路由表项与IGMP组表项将帮助设备生成组播路由表项。
IGMP组表项与路由表项
IGMP协议会生成IGMP路由表项与IGMP组表项,组播路由表项需要基于IGMP路由表项与IGMP组表项的信息生成。
IGMP组表项
由用户主机发送的IGMP加入报文触发创建的,用于维护组加入信息并通知组播路由协议(通常所说的为PIM协议)创建相应(*,G)表项。
IGMP路由表项
用来扩展组播路由表项的出接口。
IGMP表项与组播路由表项
在最后一跳组播路由器(组播叶子路由器)上,组播路由表可以基于IGMP路由表项,IGMP组表项与组播协议路由表(PIM路由表)汇总后形成。
IGMP路由表项与IGMP组表项能为组播协议路由表提供组播组地址信息与出接口信息。
IGMPv1概述
IGMPv1主要基于查询和响应机制完成组播组管理。
查询和响应机制由两种报文实现:
普遍组查询报文(General Query):查询器向共享网络上所有主机和路由器发送的查询报文,用于查询哪些组播组存在成员。
成员关系报告报文(Report):主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
由于IGMP报文是组播报文,因此一个多路访问网络里只需要一个组播路由器发送查询报文即可,该组播路由器被称为IGMP查询器(Querier)。
IGMPv1报文格式
IGMPv1普遍组查询报文与成员关系报告报文均为组播报文。
IGMPv1普遍组查询报文与成员关系报告报文格式类似。
IGMPv1组成员加组机制
通过普遍组查询报文与成员关系报告报文,IGMP查询器可以了解到该网段内哪些组播组存在成员。
1 IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;收到该查询报文的组成员启动定时器。普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。组成员1和组成员2是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。
2 第一个定时器超时的组成员发送针对该组的报告报文。
3 IGMP查询器接收到组播组成员1的报告报文后,了解到本网段内存在组播组G1的成员,则由生成IGMP组表项与(*,G1)IGMP路由表项,“*”代表任意组播源。网络中一旦有组播组G1的数据到达路由器,将向该网段转发。
成员关系报告报文抑制机制
普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。组成员1和组成员2是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。
假设组成员1上的Timer-G1首先超时,组成员1向该网段发送目的地址为G1的报告报文。也想加入组G1的组成员2收到此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。
IGMPv1查询器选举机制
普遍组查询是组播报文,因此同一网段内只需要一台查询器即可查询所有组成员的加组信息。
IGMPv1没有基于IGMP的查询器选举机制,所以需要依赖组播路由协议(PIM)进行IGMP查询器选举。
IGMPv1将组播路由协议(PIM)选举出唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。
查询器和非查询器均能收到成员关系报告(目的地址224.0.0.1),因此均能形成IGMP路由表与IGMP组表项。
IGMPv1组成员离组机制
IGMPv1没有专门定义离开组消息,当组播组成员离开组播组时,将不会再对普遍组查询报文做出回应。
当网段内不存在特定组的组成员,特定组的组成员不再发送报告报文,IGMP查询器也就不会收到特定组成员的报告报文,则在一定时间(缺省值为130s)后,删除特定组所对应的组播转发表项。
IGMPv2概述
IGMPv1的缺陷
1 IGMPv1离组使用超时机制,组成员只能静默离组。在未超时的时间内,组播流量依然会被组播路由器转发。
2 IGMPv1查询器选举必须要依赖PIM协议,导致查询器选举不够灵活。
IGMPv2的改进
IGMPv2增加了离开组机制。
IGMPv2增加了查询器选举机制。
IGMPv2能与IGMPv1兼容。
IGMPv2报文格式
为了改善组成员离开机制,IGMPv2新增了两种报文
成员离开报文(Leave):成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。成员离开报文目的地址为224.0.0.2。
特定组查询报文(Group-Specific Query):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。特定组查询报文目的地址为所查询组播组的组地址。
IGMPv2报文
字段说明
Type:报文类型。该字段有四种取值。
1 0x11:表示查询报文。IGMPv2的查询报文包括普遍组查询报文和特定组查询报文两类。
2 0x12:表示IGMPv1成员关系报告报文。
3 0x16:表示IGMPv2成员关系报告报文。
4 0x17:表示成员离开报文。
Max Response Time:表示主机响应查询返回报告的最大时间。
对于普遍组查询,最大响应时间默认为10秒。
对于特定组查询,最大响应时间默认为1秒。
Group Address:组地址。
普遍组查询报文中,组地址设置为0。
特定组查询报文中,组地址为需要查询的组地址。
在成员关系报告或离开组的消息中,组地址为需要报告或离开的组地址。
抓包观察:普通组查询报文
1 IGMP版本为2
2 报文类型为查询报文(0x11)。
3 最大响应时间为10。
4 检验和。
5 检验和状态。
6 组播组地址:0.0.0.0(地址全0表示普通查询报文)
抓包观察:成员关系报文
1 报文类型为IGMPv2的成员关系报文(0x16)。
2 最大响应时间0秒。
3 组播组地址:224.0.1.1
IGMPv2查询器选举机制
IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的路由器成为查询器。
非查询器上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
IGMPv2组成员离开机制
IGMPv2使用成员离开报文与特定组查询报文加速感知IGMPv2组成员离开。
1 组播组成员向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。
2 查询器收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
3 如果该网段内还存在组G1的其他成员,这些成员在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。
4 如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达查询器时,查询器将不会向下游转发。
抓包观察:成员离开报文
1 报文类型:成员离开报文(0x17)
抓包观察:特定组查询报文
1 报文类型为查询报文(0x11)。
2 组播组地址:224.0.1.1(地址不为全0表示为特定组查询报文)
IGMPv3概述
出于安全考虑,组播组成员可以只选择接收从特定组播源发来的组播数据。组成员需要告知组播网络,接收来自哪些特定组播源的组播流量。
IGMPv1与IGMPv2的报文中均无法携带组播源的信息,因此无法配合SSM使用(可使用SSM Mapping功能解决这个问题)。
IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即主机可以对组播源进行选择。
IGMPv3与IGMPv2类似的部分
1 查询器选举机制一致:IP地址小的为查询器。
2 使用普遍组查询报文查询组成员加组信息。
3 使用特定组查询报文查询特定组播的成员存活情况。
IGMPv3与IGMPv2不同的部分
1 IGMPv3查询报文除了包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。
2 IGMPv3成员关系报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。
3 由于同个组播组的不同成员可能希望接收来自不同源的组播,因此IGMPv3无需成员关系报告报文抑制机制。
4 IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
IGMPv3报文
查询报文
IGMPv3的查询报文共有三类
1 普遍组查询报文(General Query)。该报文作用与IGMPv1,IGMPv2中的普遍组查询报文作用一致。
2 特定组查询报文(Group-Specific Query) 。该报文作用与IGMPv2中的特定组查询报文作用一致。
3 特定源组查询报文(Group-and-Source-Specific Query)。该报文用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
查询报文类型 | IGMPv1 | IGMPv2 | IGMPv3 |
普遍组查询报文 | ✔ | ✔ | ✔ |
特定组查询报文 | ✘ | ✔ | ✔ |
特定源组查询报文 | ✘ | ✘ | ✔ |
报文格式
字段说明
Type:报文类型,取值为0x11。
Max Response Code:最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。
Group Address:组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。
Number of Sources:报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。
Source Address:组播源地址,其数量受到Number of Sources字段值大小的限制。
抓包观察:特定源组查询报文
1 IGMP版本3。
2 报文类型为查询报文。
3 最大响应时间为1秒。
4 校验和。
5 校验和状态。
6 组播组地址:224.0.1.1(表示需要查询的组播组地址)。
7 S位:0(所有收到此查询消息的其他路由器启动定时器刷新过程)。
8 查询器的健壮变量为2(表示查询的响应报文应当被发送2次)。
9 查询间隔时间为60秒。
10 组播源地址数量:1
11 组播源地址:192.168.0.1(表示需要查询的组播源地址)。
成员关系报告报文
IGMPv3成员关系报告报文除了通告组成员的加组信息外,还能通告组成员希望接收的组播源信息。
通告组播源的两种模式
INCLUDE:希望接收来自特定组播源的组播流量
EXCLUDE:希望过滤来自特定组播源的组播流量
成员关系报告报文中的组播组信息和组播源信息的关系会记录在组记录(Group Record)字段,发送给IGMP查询器。IGMPv3成员关系报告报文的目的地址为224.0.0.22。
报文格式
在IGMPv3中一个成员关系报告报文可以携带多个组播组信息,而之前的版本(IGMPv1、IGMPv2)一个成员关系报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少。
Group Record格式
成员关系报告报文字段说明
字段 | 长度 | 描述 |
---|---|---|
Type | 8比特 | Type = 0x22成员关系报告 |
Reserved | 8比特 | 保留字段,在发送的时候是以0填充,在接收的时候是不作任何处理的。 |
Checksum | 16比特 | 校验和是对整个IGMP消息以16位为一段进行取反求和。为了计算校验和,校验和字段首先必须被置0。当收到一个数据,在处理之前,必须先对校验和进行验证。 |
Reserved | 16比特 | T保留字段,在发送的时候是以0填充,在接收的时候是不作任何处理的。 |
Number of Group Records (M) | 16比特 | 该字段表示该报告报文中包含有几个组记录。 |
Group Record | 变长 | 一个主机可能需要点播多个组播地址的组播业务,每个记录包含了对应于其中一个组播地址的源地址列表等信息,它受到Number_of_Group_Records的大小的影响。 每一个组记录字段是一整块数据,其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。 |
Record Type | 8比特 | Group Record消息的类型。 当前状态报告:
过滤模式改变报告:
源列表改变报告:
|
Aux Data Len | 8比特 | 辅助数据长度含有在组记录中的辅助数据的实际长度,其单位是32bit字。它有可能是0,这就表示辅助数据不存在。 |
Number of Sources (N) | 16比特 | 源数量(N)字段标明在组记录中存在多少源地址。 |
Multicast Address | 32比特 | 多播地址字段标明该组记录从属的多播IP地址。 |
Source Address [i] | 32比特 | 源地址[i]字段是一个数组,含有n个单播地址。n就是该记录的源数量(N)字段的值。 |
Additional Data | 变长 | 附加数据。如果收到的报告中的IP首部的数据报长度字段标明在最后一个组记录后面有附加的数据存在。IGMPv3的实现必须在计算和验证校验和的时候包含这些附加数据,但是同时必须忽略这些附加数据。当发送一个报告时,一个IGMPv3的实现在最后一个组记录后面不能包含附加数据 |
抓包观察:成员关系报告报文
1 IGMP版本:3
2 报文类型为成员关系报文。
3 保留字段。
4 校验和。
5 校验和状态。
6 保留字段。
7 包含的组记录数量。
8 组记录
9 记录类型:Mode Is Include(表示接收源地址列表中的源地址发往该组播地址的数据)
10 辅助数据长度。
11 本记录中源地址列表中的源地址数量为1。
12 组播组地址:224.0.1.1。
13 组播源地址:192.168.0.1。
IGMPv3组成员加组机制
相比IGMPv2的加组机制,IGMPv3的成员关系报告报文能够携带组播源信息; IGMPv3成员关系报告报文没有成员关系报告报文抑制机制。
IGMPv3组成员离组机制
IGMPv3没有专门的成员离开报文,成员离开需要借助组成员关系报告实现。
IGMP查询器在收到改变源组对应关系的成员关系报告后,会发送特定源组查询报文,确认是否还有组成员存在。
配置举例:PIM-SM(SSM)、IGMPv3协议组播网络
需求:PC1接收组播源1的流量,PC2接收组播源2的流量。
组播源1与组播源2使用相同的组播组地址,不同的组播源地址。
组播源1配置
组播源2配置
路由器R1配置
#
sysname R1
#
board add 0/4 4GET
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 192.168.0.254 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
ip address 10.1.0.1 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/2
ip address 10.1.1.1 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet4/0/0
ip address 192.168.2.254 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 1.1.1.1
silent-interface GigabitEthernet0/0/0
silent-interface GigabitEthernet4/0/0
area 0.0.0.0
#
路由器R2配置
#
sysname R2
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.0.2 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
ip address 10.1.2.2 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
pim sm
ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
#
pim
c-bsr hash-length 32
c-bsr priority 100
c-bsr LoopBack0
c-rp LoopBack0 priority 100
#
路由器R3配置
#
sysname R3
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.0.3 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
ip address 10.1.3.3 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
pim sm
ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
#
pim
c-bsr hash-length 32
c-bsr priority 200
c-bsr LoopBack0
c-rp LoopBack0 priority 200
#
路由器R4配置
#
sysname R4
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.2.4 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
ip address 10.1.3.4 255.255.255.0
pim sm
ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/2
ip address 192.168.1.254 255.255.255.0
igmp enable
igmp version 3 //配置IGMP版本3
ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 4.4.4.4
silent-interface GigabitEthernet0/0/2
area 0.0.0.0
#
交换机SW1不做配置。
PC1配置
PC2配置
测试过程略。
PS:本拓扑存在交换机会无差别泛洪组播流量的问题,因此需要下面介绍的IGMP Snooping技术解决问题。
IGMP各版本间的差异
机制 |
IGMPv1 |
IGMPv2 |
IGMPv3 |
查询器选举 |
依靠其他协议 |
自己选举 |
自己选举 |
成员离开方式 |
静默离开 |
主动离开 |
主动离开 |
特定组查询 |
不支持 |
支持 |
支持 |
指定源、组 |
不支持 |
不支持 |
支持 |
版本兼容性 |
IGMPv1 |
IGMPv1、IGMPv2 |
IGMP Snooping
概述
当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的目的MAC地址是组播MAC地址,默认情况下交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。
IGMP Snooping功能可以控制组播流量在以太网的泛洪范围,实现组播数据在数据链路层的转发和控制,避免不同组的组播流量被别组成员接收。
配置IGMP Snooping后,二层组播设备可以侦听和分析组播用户和上游路由器之间的IGMP报文,根据这些信息建立二层组播转发表项,控制组播数据报文转发。这样就防止了组播数据在二层网络中的广播。
二层组播转发表项中存在的两类接口
路由器端口(Router Port)
二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备从此接口接收组播数据报文。
由协议生成的路由器端口叫做动态路由器端口。收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文(三层组播设备的PIM接口向外发送的用于发现并维持邻居关系的报文)的接口都将被视为动态路由器端口。
手工配置的路由器端口叫做静态路由器端口。
成员端口(Member Port)
又称组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备往此接口发送组播数据报文。
由协议生成的成员端口叫做动态成员端口。收到IGMP Report报文的接口,二层组播设备会将其标识为动态成员端口。
手工配置的成员端口叫做静态成员端口。
IGMP Snooping工作原理
形成转发表项
IGMP Snooping设备通过监听IGMP报文,形成二层组播转发表,并决定接口类型。
当IGMP Snooping设备收到成员关系报告报文后,只将成员关系报告报文从路由器接口发送出去,从而避免其余组成员收到成员关系报告报文,不触发成员关系报告报文抑制机制。
路由器端口形成后会启动老化计时器(默认180s),当路由器端口收到新的普遍组查询后刷新该计时器。
成员端口形成后会启动老化计时器(默认180s),当成员端口收到新的成员关系报告报文后刷新该计时器。
维护转发表项
IGMP Snooping设备通过监听IGMP离开报文,IGMP成员关系报告报文决定特定端口是否还需要发送特定组播。
收到IGMP离开报文后,成员端口的老化定时器 = 健壮系数(默认2) x 特定组查询间隔(默认1s)。
IGMP SSM Mapping
概述
现网中存在部分只能运行IGMPv1与IGMPv2的老旧终端,在部署SSM模式的组播时,由于IGMPv1与IGMPv2报文中无法携带组播源信息,因此无法使用SSM模式的组播网络。
IGMP SSM Mapping通过静态的将组播源与组播组进行绑定,使得IGMPv1与IGMPv2的组成员也能接入SSM组播网络。
IGMP SSM Mapping工作原理
在IGMP查询器上静态配置SSM地址的映射规则,将IGMPv1或IGMPv2成员关系报告中的组信息映射为源组信息。
配置了SSM Mapping规则后,当IGMP查询器收到来自成员主机的IGMPv1或IGMPv2报告报文时,首先检查该报文中所携带的组播组地址G,然后根据检查结果的不同分别进行处理。
一 如果G在ASM(Any-Source Multicast)范围内,则只提供ASM服务。
二 如果G在SSM组地址范围内(缺省情况下为232.0.0.0~232.255.255.255):
1 如果路由器上没有G对应的SSM Mapping规则,则无法提供SSM服务,丢弃该报文。
2 如果路由器上有G对应的SSM Mapping规则,则依据规则将报告报文中所包含的(*, G)信息映射为(G, INCLUDE, (S1, S2...))信息,提供SSM服务。
IGMP SSM Mapping不处理IGMPv3的报告报文。为了保证同一网段运行任意版本IGMP的主机都能得到SSM服务,需要在与成员主机所在网段相连的组播路由器接口上运行IGMPv3。
IGMP Proxy(代理)
概述
现网中可能存在一台IGMP查询器需要管理大量组成员的情况,大量成员主机频繁加入/离开组播组时,会产生大量的IGMP成员关系报告/离开报文,从而给IGMP查询器带来较大的处理压力。
通过IGMP Proxy功能可减少IGMP查询器接收IGMP成员关系报告/离开报文的数量,减轻IGMP查询器压力。
IGMP Proxy通常被部署在IGMP查询器和成员主机之间的三层设备上。
IGMP Proxy设备将成员关系报告/离开报文汇聚后统一上送给IGMP查询器。
IGMP Proxy设备也可以代理IGMP查询器向成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。
IGMP Proxy定义了两类接口
主机接口(Host Interface):IGMP Proxy设备上配置IGMP Proxy功能的接口,该接口一般面向IGMP查询器。
路由器接口(Router Interface):IGMP Proxy设备上配置IGMP功能的接口,该接口一般面向组成员。
IGMP Proxy工作机制
成员加组
路由器接口作为IGMP接口,对下呈现为IGMP查询器,发送查询报文,处理成员关系报告报文,形成IGMP表项,并将成员关系报告从主机接口发送给上游的IGMP查询器。
当新用户加入同一个组播组时,IGMP Proxy设备不会再向IGMP查询器反馈成员关系报告报文,因此减少了成员关系报告报文数量。
IGMP代理设备收到某组播组的报告报文后,会在IGMP组表项中查找该组播组:如果没有找到相应的组播组,IGMP代理设备会向接入设备发送针对该组播组的报告报文,并在组播转发表中添加该组播组;如果找到相应的组播组,IGMP代理设备就不需要向接入设备发送报告报文。
成员离组
当组成员离开时,IGMP Proxy通过IGMP离组机制确定是否有特定组播组的组成员,当确定已经没有组成员后才发送离开报文给上游IGMP查询器。
IGMP代理设备收到某组播组G1的离开报文后,会向接收到该离开报文的接口发送一个特定组查询报文,检查该接口下是否还存在组播组G1的其他成员:
一 如果没有其他成员,在组播转发表中将该接口删除,然后判断组播组G1是否还有其他接口。
1 如果没有,IGMP代理设备再会向接入设备发送针对该组播组的离开报文;
2 如果有,IGMP代理设备不向接入设备发送针对该组播组的离开报文;
二 如果有其他成员,IGMP代理设备会继续向该接口转发组播数据。
相关命令
配置IGMP命令
开启接口的IGMP功能
[R1-GigabitEthernet0/0/0]igmp enable
配置IGMP的版本(缺省值IGMPv2)
[R1-GigabitEthernet0/0/0]igmp version 3
配置设备根据源地址对IGMP报告/离开报文进行过滤
[R1]acl 2000
[R1-acl-basic-2000]rule permit source 192.168.0.1 0
[R1-GigabitEthernet0/0/1]igmp ip-source-policy 2000
配置当前接口可以维护IGMP组成员关系的最大个数
[R1-GigabitEthernet0/0/1]igmp limit 50
开启IGMP snopping功能
[R1]igmp-snooping enable
配置接口静态加入组播组
[SW1-GigabitEthernet0/0/1]l2-multicast static-group group-address 224.0.1.1 vlan 1
配置接口下的组播组过滤策略
[SW1-GigabitEthernet0/0/1]igmp-snooping group-policy 2000 vlan 1
在VLAN下开启IGMP代理功能(需要先开启全局和VLAN下的IGMP snopping功能)
[SW1]igmp-snooping enable
[SW1-vlan10]igmp-snooping enable
[SW1-vlan10]igmp-snooping proxy
开启IGMP SSM Mapping功能
[R1-GigabitEthernet0/0/0]igmp ssm-mapping enable
在IGMP视图下配置静态SSM映射关系(例如:组播地址为224.0.1.1/32 特定源地址为10.1.0.1)
[R1-igmp]ssm-mapping 224.0.1.1 32 10.1.0.1
查看IGMP信息命令
查看接口的IGMP配置和运行信息
<R1>display igmp interface
查看加入组播组的成员信息
<R1>display igmp group
查看二层组播转发表
<SW1>display l2-multicast forwarding-table vlan 10
查看IGMP SSM Mapping静态映射关系
<R1>display igmp ssm-mapping interface