组播实验-IGMP、IGMP Snooping及PIM-DM协议
设备连接方式如图所示,4台路由器运行OSPF,均创建Loopback0,IP地址为10.0.x.x/32,x为设备编号。
4台路由器构成一个组播网络,R1作为第一跳路由器连接组播源239.0.0.12,R4作为最后一跳路由器连接组播组239.0.0.12的接收者,为了能够让组播源的流量顺利被R4上的组播组成员接收,在每台路由器上均部署PIM-DM,并在R4的GE0/0/1接口上激活IGMPv2。
同时为了优化交换机S2上的组播流量转发行为,在S2上部署IGMP Snooping并手动指定其路由器接口、成员接口。
参考链接:http://e.huawei.com
实验任务:
①设备基础IP地址配置。
②配置R1、R2、R3、R4之间的OSPF,在互联接口、LoopbackO接口上激活OSPF。开启路由器的组播路由功能,部署PIM-DM,在相应接口上开启PIM-DM
③在R1上模拟组播源发送组播数据,观察各个路由器的PIM路由表。
④修改R3的GE0/0/1接口OSPF Cost值,影响断言机制选举结果,之后再次查看R2、R3的PIM路由表。
⑤在S2上配置IGMP Snooping,手动配置路由器端口、成员端口。
任务步骤:
①互联接口、环回口IP地址配置
# 设备命名
AR1:
<Huawei>system-view
[Huawei]sysname AR1
R2、R3相同操作,不再重复。
# 配置R1 GE0/0/0接口、GE0/0/1接口、LoopBack0接口IP地址
[AR1]interface GigabitEthernet 0/0/0
[AR1-GigabitEthernet0/0/0]ip address 10.0.12.1 24
[AR1-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR1-GigabitEthernet0/0/1]ip address 10.0.13.1 24
[AR1-GigabitEthernet0/0/1]interface LoopBack 0
[AR1-LoopBack0]ip ad 10.0.1.1 32
# 配置R2 GE0/0/0接口、GE0/0/1接口、LoopBack0接口IP地址
[AR2]interface GigabitEthernet 0/0/0
[AR2-GigabitEthernet0/0/0]ip address 10.0.12.2 24
[AR2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR2-GigabitEthernet0/0/1]ip address 10.0.234.2 24
[AR2-GigabitEthernet0/0/1]interface LoopBack 0
[AR2-LoopBack0]ip address 10.0.2.2 32
# 配置R3 GE0/0/1接口、GE0/0/2接口、LoopBack0接口IP地址
[AR3]interface GigabitEthernet 0/0/1
[AR3-GigabitEthernet0/0/1]ip address 10.0.13.3 24
[AR3-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[AR3-GigabitEthernet0/0/2]ip address 10.0.234.3 24
[AR3-GigabitEthernet0/0/2]interface LoopBack 0
[AR3-LoopBack0]ip address 10.0.3.3 32
# 配置R4 GE0/0/0接口、GE0/0/1接口、LoopBack0接口IP地址
[AR4]interface GigabitEthernet 0/0/0
[AR4-GigabitEthernet0/0/0]ip address 10.0.234.4 24
[AR4-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR4-GigabitEthernet0/0/1]ip address 192.168.1.1 24
[AR4-GigabitEthernet0/0/1]interface LoopBack 0
[AR4-LoopBack0]ip address 10.0.4.4 32
# 在R1、R4上检查IP地址连通性
②配置OSPF
使用Loopback0接口地址作为Router lD,在互联接口、Loopback0接口上激活OSPF。
# 配置R1
[AR1]ospf router-id 10.0.1.1
[AR1-ospf-1]area 0
[AR1-ospf-1-area-0.0.0.0]network 10.0.1.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 10.0.12.1 0.0.0.0
[AR1-ospf-1-area-0.0.0.0]network 10.0.13.1 0.0.0.0
# 配置R2
[AR2]ospf router-id 10.0.2.2
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 10.0.2.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 10.0.12.2 0.0.0.0
[AR2-ospf-1-area-0.0.0.0]network 10.0.234.2 0.0.0.0
# 配置R3
[AR3]ospf router-id 10.0.3.3
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]network 10.0.3.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 10.0.13.3 0.0.0.0
[AR3-ospf-1-area-0.0.0.0]network 10.0.234.3 0.0.0.0
# 配置R4
[AR4]ospf router-id 10.0.4.4
[AR4-ospf-1]area 0
[AR4-ospf-1-area-0.0.0.0]network 10.0.4.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 10.0.234.4 0.0.0.0
[AR4-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0
# 在R1、R4上检查OSPF邻居状态
路由器之间的OSPF邻居已经全部正常建立。
# 在R4上查看OSPF路由表
R4上已经学习到全网的OSPF路由。
③部署PIM-DM
在所有路由器上开启组播路由功能,在需要运行PIM-DM的接口下开启组播路由协议。
# 开启组播路由功能
[AR1]multicast routing-enable
[AR2]multicast routing-enable
[AR3]multicast routing-enable
[AR4]multicast routing-enable
# 在R1相应接口上开启PIM-DM
[AR1]interface GigabitEthernet 0/0/0
[AR1-GigabitEthernet0/0/0]pim dm
[AR1-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR1-GigabitEthernet0/0/1]pim dm
# 在R2相应接口上开启PIM-DM
[AR2]interface GigabitEthernet 0/0/0
[AR2-GigabitEthernet0/0/0]pim dm
[AR2-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR2-GigabitEthernet0/0/1]pim dm
# 在R3相应接口上开启PIM-DM
[AR3]interface GigabitEthernet 0/0/1
[AR3-GigabitEthernet0/0/1]pim dm
[AR3-GigabitEthernet0/0/1]interface GigabitEthernet 0/0/2
[AR3-GigabitEthernet0/0/2]pim dm
# 在R4相应接口上开启PIM-DM
[AR4]interface GigabitEthernet 0/0/0
[AR4-GigabitEthernet0/0/0]pim dm
[AR4-GigabitEthernet0/0/0]interface GigabitEthernet 0/0/1
[AR4-GigabitEthernet0/0/1]pim dm
# 在R1、R4上检查PIM邻居关系
R1与R2、R1R3、R4与R2及R3之间已经成功形成PIM邻居关系。
# 在R4的GE0/0/1接口上开启IGMP,并配置静态组播组模拟组播接收者
[AR4]interface GigabitEthernet 0/0/1
[AR4-GigabitEthernet0/0/1]igmp enable
[AR4-GigabitEthernet0/0/1]igmp static-group 239.0.0.12
# 在R4上查看IGMP接口信息
默认IGMP版本为V2,R4为IGMP查询者。
④观察PIM路由表
在R1上以Loopback0接口为源地址,向239.0.0.12发送ICMP数据包,模拟组播源,之后在4台路由器上查看PIM路由表。
# R1上模拟组播源,发送组播流量
[AR1]ping -a 10.0.1.1 -c 10 239.0.0.12
使用该命令实际上设备并不会对外发送组播流量,而是会触发PIM-DM的State-Refresh报文。
# PIM-DM State-Refresh报文内容
State-Refresh 报文中会携带组播源地址(10.0.1.1),组播组地址(239.0.0.12),下游设备收到后会创建(S,G)表项,并继续向下游发送State-Refresh报文。
# 在设备上查看State-Refresh报文发送情况
当已发送(sent)个数不为0时,再去查看下游的(S,G)表项,否则将无法看到内容。PIM-SM并无State-Refresh报文,因此无法使用该方式触发生成组播路由表。
# 之后查看4台路由器的PIM路由表
R1上(S,G)表项的入接口为Loopback0,因为组播源为设备直连,所以PRF邻居为NULL。下游接口为GE0/0/1,R1将组播流量转发给R3。
R2上并无下游接口。
R3的下游接口为GE0/0/2。
R2、R3的下游接口与R4的上游接口在同一个网段,此时触发断言机制,R2、R3通过各自的GE0/0/1接口和GE0/0/2接口发送断言报文进行选举,R2、R3到达组播源的单播路由拥有相同的路由优先级、单播路由开销值,但是R3的GE0/0/2接口拥有更大的IP地址(10.0.234.3,大于10.0.234.2),因此R3在断言选举中胜出,继续向R4转发组播流量,而R2不再从自己的GE0/0/1接口转发组播流量,这是R2的PIM路由表中没有下游接口的原因。
R4的上游邻居为R3,自身为最后一跳路由器。
⑤修改IGP cost值,影响断言选举结果
在R3上修改GE0/0/1接口的OSPF cost值,使得R3到达组播源地址的单播路由拥有更大的开销值,从而在断言选举中失败,让R2变为断言选举胜出者。
# 在R2、R3上查看前往组播源地址10.0.1.1的路由开销值
R2、R3前往10.0.1.1的路由开销值都为1。
# 修改R3上 GE0/0/1接口的OSPF cost
[AR3]interface GigabitEthernet 0/0/1
[AR3-GigabitEthernet0/0/1]ospf cost 2
此时R3前往10.0.1.1的路由开销值为2。
# 为了更好地观察现象,修改R2、R3的GE0/0/1接口和GE0/0/2接口Assert状态的超时时间为10s
[AR2]interface GigabitEthernet 0/0/1
[AR2-GigabitEthernet0/0/1]pim holdtime assert 10
[AR3]interface GigabitEthernet 0/0/2
[AR3-GigabitEthernet0/0/2]pim holdtime assert 10
# 在R1上开启debugging pim join-prune receive,观察剪枝过程
<AR1>terminal debugging
<AR1>terminal monitor
<AR1>debugging pim join-prune receive
# 在R1上重新触发组播流量
[AR1]ping -a 10.0.1.1 -c 10 239.0.0.12
# 重新查看R2、R3的PIM路由表
此时R3上没有下游接口,R2为断言选举胜出者。
# 观察R1上的debug输出
Oct 7 2025 11:54:01.389.1-08:00 AR1 PIM/7/JP:(public net): PIM ver 2 JP receiving 10.0.13.3 -> 224.0.0.13 on GigabitEthernet0/0/1 (P013156)
Oct 7 2025 11:54:01.389.2-08:00 AR1 PIM/7/JP:(public net): Upstream 10.0.13.1, Groups 1, Holdtime 180 (P013160)
Oct 7 2025 11:54:01.389.3-08:00 AR1 PIM/7/JP:(public net): Group: 239.0.0.12/32 --- 0 join 1 prune (P013169)
Oct 7 2025 11:54:01.389.4-08:00 AR1 PIM/7/JP:(public net): Prune: 10.0.1.1/32 (P013179)
Oct 7 2025 11:54:02.739.1-08:00 AR1 PIM/7/JP:(public net): PIM ver 2 JP receiving 10.0.12.2 -> 224.0.0.13 on GigabitEthernet0/0/0 (P013091)
Oct 7 2025 11:54:02.739.2-08:00 AR1 PIM/7/JP:(public net): Upstream 10.0.12.1, Groups 1, Holdtime 0 (P013097)
Oct 7 2025 11:54:02.739.3-08:00 AR1 PIM/7/JP:(public net): Group: 239.0.0.12/32 --- 1 join 0 prune (P013107)
Oct 7 2025 11:54:02.739.4-08:00 AR1 PIM/7/JP:(public net): Join: 10.0.1.1/32 (P013117)
在debug 中可以看到来自R3的prune报文,group为239.0.0.12,组播源为10.0.1.1。
⑥配置ooIGMP Snping
为了优化交换机S2对组播流量的转发行为,在S2上开启IGMP Snooping,并手动配置路由器端口、成员端口。
# 在全局、VLAN1中开启IGMP Snooping
[SW2]igmp-snooping enable
[SW2]vlan 1
[SW2-vlan1]igmp-snooping enable
[SW2-vlan1]quit
# 手动配置GE0/0/1为路由器端口
[SW2]interface GigabitEthernet 0/0/1
[SW2-GigabitEthernet0/0/1]igmp-snooping static-router-port vlan 1
# 手动配置GE0/0/10为组播组239.0.0.12的成员端口
[SW2]interface GigabitEthernet 0/0/10
[SW2-GigabitEthernet0/0/10]l2-multicast static-group group-address 239.0.0.12 vlan 1
[SW2-GigabitEthernet0/0/10]quit
# 查看S2的二层组播转发表
GE0/0/1为路由器端口,GE0/0/10为成员端口,注意该命令查看的结果需要存在Up状态的成员接口,需要在GE0/0/10上连接设备,使接口为Up状态。
思考:
PIM的DM模式应用在大规模网络上,有哪些劣势?
PIM-DM只适用于组播接受者较为密集的小型网络中,它采用粗犷的方式将组播流量先扩散到全网,不需要组播流量的分支通过协议报文将自己从SPT上剪除,这在接收者较为分散的大型网络中会导致大量的不必要组播流量、频繁地组播协议报文的交互,对链路带宽、设备资源造成不必要的浪费。
配置参考:
AR1:
#
sysname AR1
#
interface GigabitEthernet0/0/0
ip address 10.0.12.1 255.255.255.0
pim dm
#
interface GigabitEthernet0/0/1
ip address 10.0.13.1 255.255.255.0
pim dm
#
interface LoopBack0
ip address 10.0.1.1 255.255.255.255
#
ospf 1 router-id 10.0.1.1
area 0.0.0.0
network 10.0.1.1 0.0.0.0
network 10.0.12.1 0.0.0.0
network 10.0.13.1 0.0.0.0
#
AR2:
#
sysname AR2
#
interface GigabitEthernet0/0/0
ip address 10.0.12.2 255.255.255.0
pim dm
#
interface GigabitEthernet0/0/1
ip address 10.0.234.2 255.255.255.0
pim holdtime assert 10
pim dm
#
interface LoopBack0
ip address 10.0.2.2 255.255.255.255
#
ospf 1 router-id 10.0.2.2
area 0.0.0.0
network 10.0.2.2 0.0.0.0
network 10.0.12.2 0.0.0.0
network 10.0.234.2 0.0.0.0
#
AR3:
#
sysname AR3
#
interface GigabitEthernet0/0/1
ip address 10.0.13.3 255.255.255.0
pim dm
ospf cost 2
#
interface GigabitEthernet0/0/2
ip address 10.0.234.3 255.255.255.0
pim holdtime assert 10
pim dm
#
interface LoopBack0
ip address 10.0.3.3 255.255.255.255
#
ospf 1 router-id 10.0.3.3
area 0.0.0.0
network 10.0.3.3 0.0.0.0
network 10.0.13.3 0.0.0.0
network 10.0.234.3 0.0.0.0
#
AR4:
#
sysname AR4
#
interface GigabitEthernet0/0/0
ip address 10.0.234.4 255.255.255.0
pim dm
#
interface GigabitEthernet0/0/1
ip address 192.168.1.1 255.255.255.0
pim dm
igmp enable
igmp static-group 239.0.0.12
#
interface LoopBack0
ip address 10.0.4.4 255.255.255.255
#
ospf 1 router-id 10.0.4.4
area 0.0.0.0
network 10.0.4.4 0.0.0.0
network 10.0.234.4 0.0.0.0
network 192.168.1.1 0.0.0.0
#
SW2:
#
sysname SW2
#
igmp-snooping enable
#
vlan 1
igmp-snooping enable
#
interface GigabitEthernet0/0/1
igmp-snooping static-router-port vlan 1
#
interface GigabitEthernet0/0/10
l2-multicast static-group group-address 239.0.0.12 vlan 1
#