原理概述
IGMP ( Internet Group Management Protocol ,因特网组管理协议)是 TCP / IP 协议簇中负责组播成员管理的协议,其作用是在用户主机和与其直连的组播路由器之间建立和维护组播组成员关系。通过在用户主机和与其直连的组播路由器上配置和运行 IGMP ,可以实现主机动态地加入和离开组播组,以及组播路由器对本地网络中组播成员信息的动态管理。 IGMP 有3个版本,分别是IGMPv1、IGMPv2和IGMPv3。
IGMPv1主要基于查询和响应机制来完成组播组的管理。主机通过发送 Report 消息加入到某组播组,主机离开组播组时不发送离开报文,离开后再收到路由器发送的查询消息时不反馈Report 消息,待维护组成员关系的定时器超时后,路由器会自动删除该主机的成员记录。
IGMPV2与IGMPv1基本相似,主要的不同点在于IGMPv2具有某些报文抑制机制,可以减少不必要的 IGMP 重复报文,从而节省网络带宽资源。另外,主机离片组播组时,会主动向路由器发送离开报文。
IGMPv1和IGMPv2报文中都只能携带组播组的信息,不能携带组播源的信息,所以主机只能选择加入某个组,而不能选择组播源,这一问题在IGMPv3中得到了解决。运行 IGMPv 3时,主机不仅能够选择组,还能根据需要选择组播源,主机发送的 IGMPv3报文中可以包含多个组记录,每个组记录中可以包含多个组播源。
实验目的
理解 IGMP 的基本工作原理和应用场景
掌握在 PC 和路由器上配置 IGMP 的方法
了解 IGMP 不同版本的区别
实验内容
本实验模拟了一个简单的公司网络,组播服务器 Source -1存放了一些娱乐视频,组播服务器 Source -2存放了一些学习视顿, PC -1、 PC -2、 PC -3分别代表了公司人事部员工、市场部员工、研发部员工所使用的电脑。人事部员工只想看娱乐视频,且不在意带宽资源问题,所以在 PC -1上配置的是 IGMPv 1;市场部员工希望尽量节约带宽资源,所以需要在 PC -2上配置IGMPv2;研发部员工不允许观看娱乐视频,所以需要在 PC -3上配置IGMPv3。除了终端电脑外, RI 和R2上也需要进行相应的 IGMP 配置。
实验拓扑
1.基本配置
根据实验拓扑,进行相应的基本配置,并使用ping命令检测R1与R2之间的连通性。
其余网段的连通性测试过程在此省略。
配置组播服务器Source-1的组播组IP地址为224.1.1.1,组播组MAC地址为01-00-5E-01-01-01
配置组播服务器Source-2的组播组IP地址为224.1.1.1,组播组MAC地址为01-00-5E-01-01-01
2.配置组播协议
由于公司需要通过组播方式发送视频,所以路由器需要开启组播功能,相应接口下也需要配置组播协议。
[r1]multicast routing-enable
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]pim dm
[r1-GigabitEthernet0/0/0]int g0/0/1
[r1-GigabitEthernet0/0/1]pim dm
[r1-GigabitEthernet0/0/1]q
[r2]multicast routing-enable
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]pim dm
[r2-GigabitEthernet0/0/0]int g0/0/1
[r2-GigabitEthernet0/0/1]pim dm
3.配置IGMPv1
由于公司员工需要在PC上使用IGMP加入相应的组播组,接收并观看组播视频,因此路由器用户侧的接口同样需要开启IGMP功能以处理IGMP消息。由于PC-1使用IGMPv1播放来自Source-1的娱乐视频,所以需要在R1的G0/0/1接口配置IGMP,并修改版本为IGMPv1(注:缺省情况下为IGMPv2)。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]igmp enable
[r1-GigabitEthernet0/0/1]igmp version 1
配置完成后,查看R1上的IGMP接口信息。
[r1]display igmp interface
Interface information of VPN-Instance: public net
GigabitEthernet0/0/1(10.0.1.10):
IGMP is enabled
Current IGMP version is 1IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): -
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 0 s
Value of maximum query response time for IGMP: -
Querier for IGMP: 10.0.1.20
可以看到,R1的接口G0/0/1已经成功开启了IGMP功能,且版本为IGMPv1,查询消息的发送时间间隔为60s。
在R1上打开IGMP的Debug功能。
<r1>debugging igmp report
<r1>debugging igmp event
<r1>terminal monitor
<r1>terminal debugging
配置完成后,在PC-1上配置IGMPv1并加入组播组224.1.1.1。
[r1]
Mar 26 2024 15:45:19.911.2-08:00 r1 IGMP/7/REPORT:(public net): Received v1 report for group 224.1.1.1 on interface GigabitEthernet0/0/1(10.0.1.10) and source address is 10.0.1.1(G081939)
可以看到,在R1上收到了来自PC-1的IGMP Report消息,版本为v1,加入的组播组是224.1.1.1
在R1上查看IGMP组信息。
可以看到,R1上关于224.1.1.1这个组播组已经有了成员10.0.1.1。此时,使用Source-1播放组播视频,在PC-1上运行VLC软件即可观看视频。
在R1上打开IGMP Debug离组消息。
<r1>debugging igmp leave
在 PC -1上的组播配置界面点击"离开",然后查看R1上的 Debug 消息,发现R1没有收到任何离组消息,这是因为运行IGMPv1时,组成员在离组时是不会发送离组消息的。路由器在3倍查询周期(180s)内如果没有收到某个组成员的 Report 消息,则认为该成员已经离组。
<r1>
Mar 26 2024 15:33:34.421.1-08:00 r1 IGMP/7/EVENT:(public net): Group(224.1.1.1)
timeout, deleting record on interface GigabitEthernet0/0/1(10.0.1.10). (G016722)<r1>
Mar 26 2024 15:33:34.421.2-08:00 r1 IGMP/7/EVENT:(public net): Deleting group(22
4.1.1.1) on interface GigabitEthernet0/0/1(10.0.1.10) (G018254)<r1>
Mar 26 2024 15:33:34.421.3-08:00 r1 IGMP/7/EVENT:(public net): Processing Aux Pr
une Alert for (*, 224.1.1.1) on interface GigabitEthernet0/0/1(10.0.1.10) (G0116
4.配置IGMPv2
由于PC-2使用IGMPv2加入组播组,所以需要在R1的G0/0/1和R2的G0/0/1接口配置IGMPv2。R1的G0/0/1接口之前已经配置了IGMPv1,所以只要修改版本号即可。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]igmp version 2
[r2]int g0/0/1
[r2-GigabitEthernet0/0/1]igmp enable
配置完成后,在R1、R2上查看IGMP接口信息。
可以看到,R2的 GE 0/0/1接口运行的是IGMPv2,这是因为在接口下开启 IGMP 功能后,默认运行的是v2版本。
此外,上面的显示信息还表明 IGMP 的查询器( Querier for IGMP )为10.0.1.10。即r1。同一个网段上有多个组播路由器时,每个组播路由器都能从别的组播路由器和主机那里收到成员关系报告消息,但是只需要一台路由器发送成员资格查询消息,所以,这就需要一个路由器选举机制来确定一台路由器作为查询器。在IGMPv1中,查询器的选择由组播路由协议决定;IGMPv2对此进行了简化,规定 IP 地址最小的将成为查询器。在 PC -2的 Ethernet 0/0/1接口查看报文情况
PC-2的Ethernet0/0/1接口的报文情况
IGMP查询报文
可以观察到,IGMP查询报文发送者为R1(10.0.1.10)。
在R1上打开IGMP的debug功能。
<r1>debugging igmp report
<r1>debugging igmp leave
配置完成后,在 PC -2上使用IGMPv2加入组播组224.1.1.1。
< R1 >
Mar 26 2024 16:43:18.911.2-08:00 r1 IGMP/7/REPORT:(public net): Received v2 report for group 224.1.1.1 on interface GigabitEthernet0/0/1(10.0.1.10) and source address is 10.0.1.2(G082908)
可以看到, RI 上收到了来自 PC -2(10.0.1.2)的IGMPv2 Report 报文。在 Source -1选择一个视频流,使用组播地址224.1.1.1进行播放,然后在 PC -2上启动 VLC 即可接收并观看视频。
配置完成
在 PC -2的组播设置界面点击"离开"。
<r1>
Mar 26 2024 16:55:34.421.1-08:00 r1 IGMP/7/LEAVE:( public net ): LEAVE received on interface GigabitEthernet0/0/1(10.0.1.10)has destination address (224.1.1.1), is not equal to all-router-multicast-address (224.0.0.2)(G083097)
<r1>
Mar 26 2024 16:55:34.421.2-08:00 r1 IGMP/7/EVENT:(public net): LEAVE:( public net ): Ignoring LEAVE received for non-member group (224.1.1.1)on interface GigabitEthernet0/0/1(10.0.1.10)(G083161)
<r1>
Mar 26 2024 16:55:34.421.3-08:00 r1 IGMP/7/EVENT:(public net): Sending first last member query for group (224.1.1.1) on interface GigabitEthernet0/0/1(10.0.1.10)(G081113)
可以看到,R1收到了 PC -2发送的离组消息。路由器收到离组消息后,会立即向网络中发送相应的特定组查询消息;如果在查询的最大响应时间(默认为1s)内没有收到关于该组的报告,则会再重复发送一次。如果两次查询后仍没有收到该组的成员报告,则认为该组播组的所有成员都已离开了。
5.配置IGMPv3
由于研发部员工只能观看、学习视频,不允许接收来自 Source -1的娱乐视频,所以 PC -3需要使用IGMPv3来选择组播源,拒绝来自 Source -1的组播流。
在R1和R2的GE0/0/1接口下修改 IGMP 版本为v3。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]igmp version 3
[r2]int g0/0/1
[r2-GigabitEthernet0/0/1]igmp version 3
在 PC-3上配置IGMPv3,配置组播源 IP 起始地址为20.0.1.1,选择 EXCLUDE 模式,如图所示。
在PC-3上配置IGMPv3
配置完成后,在R1和R2的G0/0/1接口查看报文情况,在上图所示的界面点击发送。
R1的G0/0/1接口报文情况
PC-3发送的IGMPv3消息
可以观察到,R1和R2都收到了来自 PC-3发送的IGMPv3消息,模式为 Exclude ,组播地址为224.1.1.1,组播源地址为20.0.1.1,其含义就是拒绝接收来自20.0.1.1发送的组播组地址为224.1.1.1的信息。
6.观察IGMP版本兼容性
IGMP 的兼容性是指较高版本的组播路由器可以兼容较低版本的主机,例如,v2版本的组播路由器可以正确处理v1主机的加入,v3版本的组播路由可以正确处理v1和v2主机的加入。组播路由器收到较低版本主机的 IGMP 加入报文后,会自动降低至并工作在相应的主机版本。
工作在v2或v3的组播路由器收到IGMPv1主机发送的 Report 报文时,会自动把该组的兼容模式降到v1版本。
查看R1的IGMP版本
可以看到,R1上现在运行的是IGMPv3。在PC-1上使用IGMPv1加入组224.1.1.1,在PC-2上使用IGMPv2加入组224.1.1.1,然后在R1上再查看IGMP信息。
<r1>display igmp interface
Interface information of VPN-Instance: public net
GigabitEthernet0/0/1(10.0.1.10):
IGMP is enabled
Current IGMP version is 3
IGMP state: up
IGMP group policy: none
IGMP limit: -
Value of query interval for IGMP (negotiated): 60 s
Value of query interval for IGMP (configured): 60 s
Value of other querier timeout for IGMP: 0 s
Value of maximum query response time for IGMP: 10 s
Querier for IGMP: 10.0.1.10 (this router)
Total 2 IGMP Group reported
<r1>display igmp groupInterface group report information of VPN-Instance: public net
GigabitEthernet0/0/1(10.0.1.10):
Total 1 IGMP Group reported
Group Address Last Reporter Uptime Expires
224.1.1.1 10.0.1.2 00:14:13 00:01:20
可以看到,R1可以接收并处理V2和V3版本的IGMP消息,并使得PC-1和PC-2成功地加入组播组。同样,如果路由器配置IGMPv2,则主机使用IGMPv1和IGMPv2都是可以成功加入组播组的。
现在,把R1的IGMP组播组改为v1。
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]igmp version 1
然后,PC-2使用IGMPv2加入组224.1.1.1后,在R1上查看IGMP信息。
可以看到,R1运行IGMPv1时,PC-2使用IGMPv2是无法加入组播组的,R1上的IGMP Group为空。同样,如果路由器运行的是IGMPv2,则主机使用IGMPv3是无法加入组播组的。
另外,需要注意的是,工作在IGMPv3的组播路由器收到v2版本的report报文时,会自动把该组的兼容模式降到v2。但是,在这种情况下,路由器会忽略IGMPv3的BLOCK报文、IGMPv3的TO-IN报文以及IGMPv3的TO_EX报文的源列表,即抑制了IGMPv3对组播源的选择功能。所以,在本实验中,为了让PC-3能正常使用IGMPv3功能,需要在PC-1和PC-2上都修改使用IGMPv3加入组播组。