拓扑图
配置
使能组播路由
配置OSPF
组播路由器接口配置pim-sm
连接组成员的接口使能igmp
pim路由器上配置静态RP
sysname AR1
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.12.1 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.13.1 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/2
ip address 10.1.100.1 255.255.255.0
pim sm
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
#
sysname AR2
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.12.2 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.150.2 255.255.255.0
pim sm
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
pim sm
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
#
sysname AR3
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.13.3 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.150.3 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/2
ip address 10.1.36.3 255.255.255.0
pim sm
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
#
sysname AR4
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.150.4 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.1.4 255.255.255.0
pim sm
igmp enable
#
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
#
sysname AR5
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.150.5 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.1.5 255.255.255.0
pim sm
igmp enable
#
ospf 1 router-id 5.5.5.5
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
spt-switch-threshold infinity
#
注意配置spt-switch-threshold infinity命令,先不进行SPT切换(重要)
sysname AR6
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
ip address 10.1.36.6 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.1.2.1 255.255.255.0
pim sm
igmp enable
#
ospf 1 router-id 6.6.6.6
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
pim
static-rp 2.2.2.2
spt-switch-threshold infinity
#
PC1加组239.1.1.1
拓扑中需要注意IGMPv2的查询器为AR4
IGMPv2查询器选举规则:
- 接收查询报文的源IP地址和接收接口的IP地址比较,IP地址小的为查询器。
连接组播成员端的DR为AR5
成员端DR负责
- 向RP发送(*,G)Join报文,建立RPT
- 转发组播流量
源端DR负责
- 向RP发送Register注册报文
- 转发组播流量
DR选举规则
- DR-Priority优先级高的优选
- 路由优先级相同,或有Hello报文中不支持写到DR-Priority的路由器,则IP地址大的优选。
验证PIM-SM中DR选举机制
拓扑中AR5为组播成员端的DR(IP地址大)
AR4和AR5交互的报文中携带的信息
DR优先级都为1,IP地址大的为DR
查看RPT树的建立
成员端DR向RP发送(*,G)Join报文,沿途建立RPT树,建立(*,G)表项
RPF检查为到RP的地址
AR4上有(*,G)表项,但没有下游接口
抓包查看,成员端DR向RP发送Join报文
查看SPT树的建立
组播源发送组播数据
源端DR,也就是AR1将组播数据封装到注册报文中,单播发送给RP
RPF检查为到组播源的地址
RP收到注册报文后:
- 进行解封装,向下游接口转发
- 向源端DR发送(S,G)Join报文,建立SPT树,沿途建立(S,G)表项
- 单播发送Register-Stop报文给源端DR,通告DR停止发送注册报文(模拟器中抓包并未看到)
RP到源端DR沿途建立(S,G)表项,AR1中可以看到注册信息
收到组播数据的路由器也会产生(S,G)表项,将(*,G)表项的下游接口信息复制到(S,G)表项中
不在组播转发路径上(但能收到组播数据)的路由器产生(S,G)表项,没有下游接口,如AR4、AR3
组播转发树
由于配置了不进行SPT切换,组播树如下图
将PC2加入组播组239.1.1.1
- 成员端DR(AR6)向RP发送(*,G)Join报文,创建RPT树
- RPF检查地址为RP的IP地址
AR1的(S,G)表项中下游接口并没有G0/0/1
AR3的(S,G)表项下游接口G0/0/1
所以PC2的组播转发路径为AR1->AR2->AR3->AR6
思考:组播转发树是什么样的(由于AR6配置了SPT不切换)
SPT切换
取消AR5、AR6上的SPT不切换配置
pim
undo spt-switch-threshold infinity
#
- 组成员端DR路由器收到组播流量到一定阈值后,进行SPT切换
- 默认情况下,华为的SPT切换的流量阈值为0,所以当组播流量下来时,会发生SPT切换
SPT切换过程
当组成员端DR检测到组播报文的转发速率超过阈值:
- 组成员端DR向源端DR逐跳发送(S,G)Join报文,创建SPT,沿途生成(S,G)表项(包含下游接口)
- SPT建立后,组成员端DR向RP发送剪枝报文,修剪(S,G)表项的下游接口
- 如果组播流量不经过RP,则RP向源端DR逐跳发送剪枝报文,修剪(S,G)表项的下游接口。
想组播源端DR发送Join报文
SPT切换后,流量不经过RP,RP向源端DR发送剪枝
可以看到RP上的(S,G)表项下游接口为空,被修剪
AR1上的下游接口为连接AR3的接口
AR3上(S,G)表项出现下游接口
切换后的SPT