目录
原理概述
PIM-SM 是一种基于Group-Shared Tree 的组播路由协议,与 PIM-DM 不同,它适合于组播组成员分布广泛而稀疏的大型网络。 Group-Shared Tree 分为两种:一种被称为Steiner Tree ,另一种被称为 Rendezvous Point Tree (简称 RPT ), PIM-SM 采用的组播树是 RPT。
RPT 是一棵以汇聚点 RP ( Rendezvous Point )路由器为根,以直连有组成员的路由器为叶子的组播树。 RP 是一个组播供求信息的汇聚中心,它需要处理组播源端 DR ( Designated Router )发送的组播注册消息及用户端 DR 发送的组播加入消息。
RP 是 PIM-SM 网络中的一台至关重要的路由器,网络中的所有 PIM 路由器都必须知道谁是 RP 。当网络中出现活跃的组播源(组播源向某组播组发送第一个组播数据)时,组播源端 DR 会将此组播数据封装在注册消息中并以单播形式发往 RP , RP 收到此消息后会立即创建相应的( S , G )组播路由表项。当网络中出现活跃的组播用户(用户主机通过 IGMP 加入某组播组 G )时,用户端 DR 会向 RP 发送加入组播组 G 的消息,在该消息去往 RP 的路径上的每台路由器都创建(*, G )表项,由此便生成了一棵以 RP 为根的 RPT 。当网络中有活跃的组播用户时,组播报文先被封装在单播报文中从组播源发往 RP ,然后 RP 再将组播报文沿 RPT 转发给组播用户。若网络中没有活跃的组播用户时,组播数据到达 RP 后就停止了,不会再向下转发。
显然, RPT 并非是一棵 SPT ( Shortest Path Tree ),经由 RP 的转发路径可能不是从组播源到组播用户之间的最短路径。为了提高组播转发效率, PIM-SM 在实际部署时,通常都会允许从 RPT 切换到 SPT 。
PIM 路由器会通过 PIM-Hello 消息来发现 PIM 邻居、协调各项协议参数、维护邻居关系。 PIM-Hello 消息的目的 IP 地址是组播地址:224.0.0.13(表示同一网段中的所有 PIM 路由器),源地址为发送接口的 IP 地址, TTL 值为1。另外, PIM-Hello 的一个重要作用就是用来选举 DR 。在 PIM-SM 中, DR 分为两种:组播源网段中的 DR 称为组播源端 DR ,它负责向 RP 发送组播注册消息;组成员网段中的 DR 称为用户端 DR ,它负责向 RP 发送组播加入消息。
实验目的
理解PIM-SM的应用场景
掌握PIM-SM的基本配置
理解PIM-SM中RPT到SPT的切换
理解组播源端DR和用户端DR的作用
实验内容
实验拓扑如下图所示。本实验模拟了一个公司网络场景,包含了6台路由器,3台交换机、一台组播服务器Source-1和两台终端电脑。所有路由器都运行OSPF,并且都位于区域0。管理员需要在网络中部署PIM-SM,从而实现以组播的方式向员工播放培训视频。
实验拓扑
1.基本配置
根据拓扑图进行相应的基本配置,并使用ping命令检测R1与R2之间的连通性。
其余直连网段的连通性测试过程在此省略。
配置组播服务器Source-1的组播IP地址为224.1.1.1,组播MAC地址为01-00-5E-01-01-01,如图所示
配置Source-1
2.配置IGP
在每台路由器上配置OSPF协议。
[r1]ospf 1
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 10.0.1.0 0.0.0.255
[r1-ospf-1-area-0.0.0.0]network 50.0.14.0 0.0.0.255
[r1-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255[r2]ospf 1
[r2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]network 10.0.1.0 0.0.0.255
[r2-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255[r3]ospf 1
[r3-ospf-1]area 0
[r3-ospf-1-area-0.0.0.0]network 10.0.3.3 0.0.0.0
[r3-ospf-1-area-0.0.0.0]network 10.0.1.0 0.0.0.255
[r3-ospf-1-area-0.0.0.0]network 20.0.35.0 0.0.0.255
[r3-ospf-1-area-0.0.0.0]network 30.0.36.0 0.0.0.255
[r3-ospf-1-area-0.0.0.0]network 40.0.34.0 0.0.0.255[r4]ospf 1
[r4-ospf-1]area 0
[r4-ospf-1-area-0.0.0.0]network 40.0.34.0 0.0.0.255
[r4-ospf-1-area-0.0.0.0]network 40.0.2.0 0.0.0.255
[r4-ospf-1-area-0.0.0.0]network 50.0.14.0 0.0.0.255[r5]ospf 1
[r5-ospf-1]area 0
[r5-ospf-1-area-0.0.0.0]network 20.0.35.0 0.0.0.255
[r5-ospf-1-area-0.0.0.0]network 30.0.2.0 0.0.0.255[R6]ospf 1
[R6-ospf-1]area 0
[R6-ospf-1-area-0.0.0.0]network 30.0.2.0 0.0.0.255
[R6-ospf-1-area-0.0.0.0]network 30.0.36.0 0.0.0.255
配置完成后,查看R1的路由表。
可以看到,R1已经获得了所有网段的路由信息。至此,网络已经通过了OSPF实现了互通。
3.配置PIM-SM
在所有路由器上开启组播功能,并在每台路由器的每个接口下配置命令pim sm,除此之外,还需要在R5和R6的G0/0/0接口以及R4的G0/0/1接口下使能IGMP。
[r1]multicast routing-enable
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]pim sm
[r1-GigabitEthernet0/0/0]int g0/0/1
[r1-GigabitEthernet0/0/1]pim sm
[r1-GigabitEthernet0/0/1]int g0/0/2
[r1-GigabitEthernet0/0/2]pim sm[r2]multicast routing-enable
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]pim sm
[r2-GigabitEthernet0/0/0]int g0/0/1
[r2-GigabitEthernet0/0/1]pim sm[r3]multicast routing-enable
[r3]int g0/0/0
[r3-GigabitEthernet0/0/0]pim sm
[r3-GigabitEthernet0/0/0]int g0/0/1
[r3-GigabitEthernet0/0/1]pim sm
[r3-GigabitEthernet0/0/1]int g0/0/2
[r3-GigabitEthernet0/0/2]pim sm
[r3-GigabitEthernet0/0/2]int g4/0/0
[r3-GigabitEthernet4/0/0]pim sm[r4]multicast routing-enable
[r4]int g0/0/0
[r4-GigabitEthernet0/0/0]pim sm
[r4-GigabitEthernet0/0/0]int g0/0/1
[r4-GigabitEthernet0/0/1]pim sm
[r4-GigabitEthernet0/0/1]igmp enable
[r4-GigabitEthernet0/0/1]int g0/0/2
[r4-GigabitEthernet0/0/2]pim sm[r5]multicast routing-enable
[r5]int g0/0/0
[r5-GigabitEthernet0/0/0]pim sm
[r5-GigabitEthernet0/0/0]igmp enable
[r5-GigabitEthernet0/0/0]int g0/0/1
[r5-GigabitEthernet0/0/1]pim sm[R6]multicast routing-enable
[R6]int g0/0/0
[R6-GigabitEthernet0/0/0]pim sm
[R6-GigabitEthernet0/0/0]igmp enable
[R6-GigabitEthernet0/0/0]int g0/0/2
[R6-GigabitEthernet0/0/2]pim sm
选择R3为RP节点,并在每台路由器上手工配置R3为静态RP。
[r1]pim
[r1-pim]static-rp 10.0.3.3[r2]pim
[r2-pim]static-rp 10.0.3.3[r3]pim
[r3-pim]static-rp 10.0.3.3[r4]pim
[r4-pim]static-rp 10.0.3.3[r5]pim
[r5-pim]static-rp 10.0.3.3[R6]pim
[R6-pim]static-rp 10.0.3.3
配置完成后,查看R3的PIM邻居信息。
可以看到,R3与所有相邻的路由器都已成功建立了PIM邻居关系。
4.用户端DR与组播源端DR
本网络中,PC-2,R5、R6处于同一网段。如果PC-2希望加入组播组,则PIM-SM需要在R5和R6之间选举出一台用户端DR来发送组播加入消息,从而避免RP接收到重复的加入消息。选举DR时,首先比较DR优先级(缺省情况下优先级的值为1),若优先级一样则比较接口IP地址的大小,IP地址较大者将成为DR。
在R5、R6上查看DR信息。
可以看到,R6(30.0.2.254)现在是PC-2所在网段的DR。在PC-2上使用IGMP加入组播组224.1.1.1,在R3的G0/0/1和G0/0/2接口查看报文情况。如下图所示,可以看到,R3仅仅从G0/0/2接口收到了来自DR路由器R6的组播加入消息,而G0/0/1接口没有收到任何组播加入消息。
R3的G0/0/2接口报文情况
在R3上查看PIM路由表
可以看到,R3在收到加入消息后,其组播路由表中生成了(*,G)的组播路由条目,下游接口为G0/0/2,形成了从RP(R3)到R6的一棵RPT。
另一方面,组播源Source-1,R1,R2处于同一网段,PIM-SM需要在R1和R2之间选举出组播源端DR来向RP发送注册消息。在R1,R2上查看DR信息。
可以看到,IP地址较大的R2(172.16.1.20)目前是组播源端DR。接下来,我们可以通过修改优先级的方法来强制让R1成为组播源端DR。
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]pim hello-option dr-priority 2
配置完成后,在R1上查看DR信息。
可以看到,R1现在已经成为了组播源端DR。在Source-1上使用组播地址224.1.1.1发送组播报文,在RP路由器R3的G4/0/0接口查看接收到的注册消息,如下图所示。
蓝色的报文是Source-1发送的组播报文
DR路由器R1向RP路由器R3发送的组播注册消息
5.从RPT切换到SPT
对本网络而言,从RPT到SPT的切换过程可简单示意如下:最后一跳组播路由器R4收到来自上游路由器R3转发的组播数据包后,会查看自己的单播路由表,发现去往组播源172.16.1.1的最短路径的下一跳不是上游路由器R3,而是路由器R1,因此,R4会发起由RPT到SPT的切换。
在PC-1上使用IGMP加入组播组224.1.1.1,在R4上查看组播路由表。
可以看到,R4上生成了(*,224.1.1.1)的组播路由,上游接口是连接到RP路由器的G0/0/0接口。
在组播源发送组播地址为224.1.1.1的组播报文,当PC-1接收到组播报文后,在R4上查看组播路由表。
可以看到,R4在接收到组播数据后生成了(172.16.1.1,224.1.1.1)的组播路由,且上游接口切换到了 GE 0/0/2。切换过程中,R4会向R1发送组播加入消息,要求从R1接收组播数据,同时R4也会向R3发送剪枝消息,使R3停止向自己转发组播数据。
缺省情况下, PIM-SM 路由器会在收到第一个组播数据包后立即进行从 RPT 到 SPT 的切换。如果不希望发生切换,则可使用配置命令来禁止切换。另外,也可以设定切换阈值,实现有条件的切换。在用户端 DR 上配置了切换阈值后,只有当组播报文的速率超过阈值时,用户端 DR 才会发起切换。下面给出禁止切换的示例。
[r4]pim
[r4-pim]spt-switch-threshold infinity
<r4>display pim routing-tableVPN-Instance: public net
Total 1 (*, G) entry; 1 (S, G) entry
(*, 224.1.1.1)
RP: 10.0.3.3
Protocol: pim-sm, Flag: WC
UpTime: 00:10:43
Upstream interface: GigabitEthernet0/0/0
Upstream neighbor: 40.0.34.3
RPF prime neighbor: 40.0.34.3
Downstream interface(s) information:
Total number of downstreams: 1
1: GigabitEthernet0/0/1
Protocol: igmp, UpTime: 00:10:43, Expires: -
(172.16.1.1, 224.1.1.1)
RP: 10.0.3.3
Protocol: pim-sm, Flag: ACT
UpTime: 00:05:35
Upstream interface: GigabitEthernet0/0/0
Upstream neighbor: 40.0.34.3
RPF prime neighbor: 40.0.34.3Downstream interface(s) information:
Total number of downstreams: 1
1: GigabitEthernet0/0/1
Protocol: pim-sm, UpTime: 00:05:35, Expires: -
可以看到,当配置禁止切换后,R4生成的(172.16.1.1,224.1.1.1)的组播路由的上游接口没有发生切换。
6.配置PIM-Silent接口
通常情况下,路由器直连用户主机的接口上是需要配置PIM的,但是这样的配置同时也存在着安全隐患:当恶意主机发送大量PIM-Hello报文时,有可能导致路由器瘫痪。为了避免上述情况的发生,可以在路由器直连用户主机的接口上配置PIM Slient,禁止该接口和转发任何PIM协议报文,同时,此接口上的组播转发功能及IGMP功能都不受影响。
配置R4的G0/0/1接口为PIM-Slient接口。
[r4]int g0/0/1
[r4-GigabitEthernet0/0/1]pim silent
配置完成后,查看R4的PIM接口详细信息,并在R4的G0/0/1接口查看数据包的发送
R4的G0/0/1接口的报文情况
可以看到,R4的G0/0/1接口的Slient功能已经使能,此接口不再发送PIM-Hello报文。