PIM SM建立SPT树过程与实验 | 您所在的位置:网站首页 › 组播缺点 › PIM SM建立SPT树过程与实验 |
基本概念:
概述: PIM SM适用于ASM(Any-Source Multicast)和SSM(Source-Specific Multicast)两种模型。使用“拉(Pull)模式”转发组播报文,一般应用于组播组成员规模相对较大、相对稀疏的网络。基于这一种稀疏的网络模型,它的实现方法是: 在网络中维护一台重要的PIM路由器:汇聚点RP(Rendezvous Point)。组播网络上的接收者和组播源彼此并不知道对方是否存在及所在位置,所以引入RP作为网络的核心,网络中所有PIM路由器都知道RP的位置。当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,最后一跳路由器向RP发送Join报文,逐跳创建(*,G)表项,生成一棵以RP为根的RPT。当网络中出现活跃的组播源(信源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息。PIM-SM模型中,包括三个阶段: 接收者所在路由器(DR) 向RP发(*,G) Join 建共享树。头一跳路由器向RP发送组播注册报文,注册组播源。收到数据的最后一跳路由器(DR)向组播源建SPT树。(此过程可选,默认开启〉。SPT和RPT树对比: PIM SM中用到以下2种类型树:SPT 和RPT树。 SPT (Shortest Path Tree)是以组播源为树根,连接组播源和组播接收者的分发树,彼此之间距离短,转发延迟低。RPT (Root-Path Tree)是以RP为树根,连接所有组员的分发树。由于RP位置可能不是最优,所以组播源流出的组播数据经RP转发给接收者时,会因次优路径问题而致转发延迟较大,相比于SPT的每个组播源和组就需要-一个 (S,G)条目,而RPT仅需一条(* ,G) 条目就可转发所有来自不同源的组播流量,内存开销消耗相对减少。(* ,G)中*代表任意源。 准备阶段:邻居发现与DR竞选:
在ASM模型中,DR主要作用如下: 在连接组播源的共享网段,由DR负责向RP发送Register注册报文。与组播源相连的DR称为源端DR。在连接组成员的共享网段,由DR负责向RP发送Join加入报文。与组成员相连的DR称为组成员端DR。如上图,服务器向R1,R2,R3发送组播报文,其中选出的DR来负责转发流量。但是它不会像DM模型一样直接转发扩散,而是先自己保存,等到别人请求的时候再进行发送。DR会发送单播报文到RP上进行注册组播流量新。以后其他设备获取流量的时候就发送join信息到RP上即可(同一网段DR进行join注册),并且在SM模式下是没有嫁接报文的。 阶段一:组播接收者所连路由器向RP建共享树概述: 具体场景: 上图中,当R6收到IGMP加入组229.1.2.3的请求后,R6生成( * , 229.1.2.3)条目,(* ,G) 条目下游接口是收到IGMP成员报告的接口,上游RPF接口是转发(*,229.1.2.3) Join 的接口。R6开始向树根RP建RPT共享树。 R5收到( * ,229.1.2.3) Join 后,创建相应(* ,229.1.2.3) 表项,并添加下游接口G0/0。 R6是最后一跳DR, 其每隔60s向上游发送( * ,229.1.2.3) Join报文,收到Join报文的接口重置接口计时器,超时时间为210s;若收不到Join报文,接口超时后,会从下游接口列表中移除。只要下游接口列表非空,R5 会继续经RPF接口向上游转发(* ,229.1.2.3) Join报文。 R4从下游接口S1/0/1 收到(* .229.1.2.3) Join, 创建条目( * .229.1.2.3), 添加下游接口S1/0/1,经RPF接口继续向,上游转发(*.229.1.2.3) Join 报文。 R3是RP,收到( * ,229.1.2.3) Join报文后,创建( * .229.12.3) 条目,添加下游接口S1/0/0。上游接口是接收组播数据的注册隧道接口( RegisterTunnel)。注册隧道( RegisterTunnel)是接收来自组播源的数据的逻辑接口。 Join转发的路径及在每台路由器上生成的组播转发表最终构成RPT树,只要接收者存在,R6会每60s向上游发送( * ,229.1.2.3) Join, 刷新组播路由表( * ,229.1.2.3)条目,RPT树会一直存在。 注意: 如果在IP地址字段含W位,则代表该地址为RP的IP地址,此报文为(* ,G) Join/Prune 报文;而如果没有置W位,则代表该报文是(S,G) Join/Prune 报文。在PIM SM中,置SWR位的报文是(* ,G) Join/Prune; 置SR或仅置S位的报文是(S,G) Join/Prune报文。 其中,仅置S位的Join/Prune报文是发生SPT切换时向组播源发送的报文;而仅置SR位的Join/Prune报文是向RP发送的报文。 如果最后一跳有多台路由器连接到接收者所在网络,则仅DR路由器负责向RP发送(* ,G) Join。SM路由器向上游转发(* ,G) Join报文的条件: • 收到下游 PIM邻居发来的(* ,G) Join 或收到直连接收者IGMP Join报文。 SM路由器向上游转发(* ,G) Prune 报文发生在如下条件: • 游接口列表为 NULL。接口为空的原因可能是组播接收者离开或从下游邻居收到(* ,G) Prune 报文或下游接口未收到(* ,G) Join而超时。 只要组播接收者存在,最后一跳DR路由器会周期产生(*,G) Join 刷新RPT树。 阶段二:头一跳路由器向RP注册概述: 在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员,因为RP就像是整个网络中的一个信息发布器,所有组播源的信息都只能够从它这里获取。由于在DR和RP间初始没有组播分发树,所以它的实现方式是在头一跳路由器DR和RP间建一个逻辑隧道,路由器在收到组播数据后,直接进入隧道。这个隧道其实是PIM的Register Tunnel,使用PIM注册报文作为外层封装,以单播方式由DR发给RP,RP收到注册报文后,将解封装的组播数据沿共享树(*,G) 条目转发下去。 最初的组播数据可以通过注册隧道发给RP,在RP了解组播源及组的地址后,开始向组播源建SPT树。SPT树建好后,源的组播数据通过SPT树流到RP,RP开始向DR发送注册停止报文。 根据组播接收者是在组播源活跃之前加入网络还是在组播源活跃之后加入网络,下面分两种情况描述上述注册过程: 场景1:源开始活跃时,接收者到RP的共享树已经存在 当组播源10.1.1.100 在以太网段活跃时,数据到达头一跳路由器 R1 (DR), 触发创建(10.1.1.100, 229.1.2.3) 组播条目。收到组播数据的G0/0/0接口为上游接口,下游接口是转发组播数据的接口,因为当前没有收到任何Join报文,所以没有下游接口,唯一的接口是注册隧道接口。 组播数据报文从上游接口流入,然后转发进注册隧道,隧道使用PIM协议封装组播报文,隧道的源IP地址是DR接口的IP地址10.1.1.1,目标IP地址是RP的IP地址10.1.3.3,PIM Register作为隧道协议直接封装路由器收到的原始的组播数据并发给RP。下图是DR发给RP的注册报文,其中包含组播数据(ICMP报文是组播数据)。 当RP收到注册报文并解封装后,并不对内部组播数据执行RPF检查,根据组播源和组的IP地址,观察当前RP是否有(* ,229.1.2.3)组播表项。R3当前存在(* ,229.1.2.3)组播表项,且下游接口非空。RP开始向下游转发组播数据,同时,在经过的每一跳路由器上,创建和(* , 229.1.2.3)并列存在的(101.1.100, 29.1.2.3)表项,二者有相同的上游及下游接口。 RP在知道源后开始SPT切换,向组播源发送( 10.1.1.100, 229.1.2.3) Join 报文,Join报文逐跳转发到组播源。Join 报文经过R2,在R2上创建( 10.1.1.100, 229.1.2.3)表项后,继续经S1/0/0转发给上游路由器R1。R1从R2收到(10.1.1.100, 229.1.2.3) Join报文,在(10.1.100, 229.1.2.3)表项下添加下游接口S1/0/0,此时R1下游接口包括S1/0/0和Register Tunnel接口。当R1转发组播数据时,同时向S1/0/0 接口和逻辑隧道接口转发数据。 RP会收到两份同样的数据报文,一份从S1/0/0接口组播流入,一份是通过单播的注册报文,此时RP开始单播回送注册一停止报文给DR,通知DR不要继续发送封装的组播数据报文,DR收到后会抑制发送注册报文。如下图所示。 场景2:源活跃,但尚无接收者加入组( 共享树尚未建立) 注册过程: 源发送组播数据。R1收到组播数据后,开始产生单播注册报文,封装组播数据,并发给RP。![]() ![]() 注册抑制计时器和空注册报文: 头一跳路由器DR收到注册一停止报文后,注册报文抑制并触发注册抑制计时器(Registr-Supression- Timer)开始计时,抑制计时器时长60s,在此期间抑制发送注册报文,超时后头- -跳 DR重新开始发送注册报文。为降低RP系统开销,DR在每次抑制计时器到期之前5s,向RP发送Probe报文,又叫空注册报文。空注册报文是Null-Register置位的注册报文,报文中仅包含组播源和组播组的信息,不含组播数据,其作用是充当Probe,用以向RP通告组播源仍处于活跃状态。同时,也提醒RP需要发送注册一停止报文,否则抑制计时器超时后RP会收到包含数据的注册报文。 如果RP不希望收到包含组播数据的注册报文,收到空注册报文或注册报文(含数据)后应立即回应注册一终止报文。如果RP希望收到注册报文中的组播数据,则收到空注;册报文或注册报文(含数据)后,并不回应注册一终止报文。默认情况下,Probe时间间隔是在抑制计时器到期之前的5s。 阶段三:SPT切换概述: 切换条件:当信息吞吐率超过预定的值时,PIM-SM就会从共享树切换到组播源路径树,华为设备默认是0,表示连接接收者的路由器在探测到组播源之后(即接收到第一个数据报文),便立即加入最短路径树(源树),即从RPT向SPT切换,使用最优的路径。 组成员端DR周期性检测组播报文的转发速率,一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换: 组成员端DR逐跳向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。以上图所示:现在已经生成了一棵RPT,到达组播源的路径为R3->R2->R1,但是最优路径是R3->R1,所以当R3接收到第一流量的时候,立刻产生(S*G)条目,知道了源,查看单播路由表,发现了更优的路由,直接通过路由的出接口作为SPT的上游接口,向上发送join报文,直接通过最优路径加入组播,当然原来的路径就不管用了,所以按照源路径向上发送剪枝报文,使R2的下游接口抑制,又因为SPT树的路径没有经过RP,所以R2继续向上发送剪枝报文,将RPT树完全去掉。这里我们也可以看到,如果需要流量的时候自己是可以向RP去请求加入对应组的,所以自己不需要保存对应的条目了,所以不需要刷新报文和响应的剪枝定时器的存在了,一次剪枝,除了下次join消息想要加入,否则一直不会有流量下放。 具体场景: ![]() ![]() 规则a: 当SPT树和RPT树在当前路由器上同时存在时,若SPT树(S,G) 条目置有SPT标志,则组播数据报文使用SPT条目转发,若无SPT标志位,则组播数据报文使用RPT (*,G) 条目转发。 R7收到(10.1.1.100, 229.1.2.3) Join后,先创建组播条目,添加下游接口并转发给R1。当(10.1.1.100, 229.1.2.3) Join到达头一跳路由器R1后,R1上已存在(10.1.1.100,229.1.2.3)表项,在下游接口列表添加S1/0/1接口。目前,下游接口列表中有S1/0/0、S1/0/1及注册接口。 在场景中,R1上(10.1.1.100, 229.1.2.3)表项目前有两个物理下游接口S1/0/1和S1/0/0。R1 收到组播数据报文后分别从这两个接口转发出去,一份经R2、R3、 R4、R5、R6转发给接收者,一份经R7、R5、 R6转发给接收者。 在图中,R5既处于RPT树上,又处于SPT树上,(* ,229.1.2.3)和(101.1.100, 229.1.2.3)表项共存,当组播数据没有经S1/0/0接口进来时,R5上(10.1.100,229.1.2.3)表项置SWT、ACT 位,上游接口指向R4。当组播数据从新建的SPT树流下来时,数据包IP头匹配到R5上的(S,G) 表项,R5 去掉SWT位,把上游接口修改为指向R7,并置SPT位,向下转发组播数据。 此时,组播数据依然从共享树上R4流给R5,当R5收到组播数据报文时,R5上对组播数据根据( 10.1.1.100, 229.1.2.3)表项执行RPF检查。 • 如果源IP地址是10.1.1.100, 目标组播组IP地址是229.1.2.3 的报文从S1/0/1接口流进来,由于精确匹配的(10.1.1.100, 229.1.2.3)条目(已置SPT位)存在,上游接口和入口不一致,RPF 检查失败,报文被丢弃。 • 如果源IP地址是10.1.1.100, 目标组播组IP地址是229.1.2.3 的报文从S1/0/0接口流进来,由于精确匹配的(10.1.1.100, 229.1.2.3) 条目存在,入接口等于RPF接口,RPF 检查通过报文根据(10.1.1.100, 229.1.2.3) 表项向下游接口转发。 • 如果源IP地址是20.1.1.X,目标组播组IP地址是229.1.2.3的报文从S1/0/1接口流进来,由于没有对应的(20.1.1.X, 229.1.2.3) 精确组播条目,仅按对应的( * , 229.1.2.3)转发。只要报文入接口匹配( * ,G) 组播条目的RPF接口,报文被继续转发给“下游接口”。 规则b: 路由器对匹配(* ,G)条目的组播数据报文只验证数据入口是否与(* ,G)条目的RPF接口一致,不一致则报文丢弃。 R5收到两份组播数据报文,S1/0/1接口收到的R4转发的组播数据报文会被丢掉,但持续的不必要的组播报文流到R5并丢掉,会增加系统开销。所以,R5 在( 10.1.1.100,229.1.2.3)表项SPT置位后,立即向RP方向发送置R (代表RPT)位的(10.1.1.100,229.1.2.3) Prune 报文。收到(10.1.1.100, 229.1.2.3) Prune 报文的R4路由器,将已存在的组播(10.1.1.100, 229.1.2.3) 条目置RPT位(代表该(S,G)条目指向RP)。同时从(10.1.1.100, 229.1.2.3)下游接口列表中,剪除收到(10.1.1.100, 229.1.2.3) Prune 报文的接口。组播报文不再沿RPT树流给R5。![]()
在PIM SM中,每一个 PIM组播组都需要一个 RP地址,这个地址用来当作组播组相应的组播分发树的树根,用来连接SPT树和RPT树。在网络上的任何一台PIM SM路由器都需要知道组播组所需要的RP地址。 网络上每台PIM路由器内均有一张表RP-Info,记录组播组地址和RP地址的对应关系,任何组播路由器都会根据表选择出组播组所对应的唯一的RP。当组播源活跃时,向已知的RP发起注册。当接收者出现时,向RP发送建树请求。组播数据经RP在SPT和 RPT间转发,PIMSM离不开RP,如果不知道RP的位置,PIMSM路由器将不能正常工作。RP因其作用而具备如下特点: RP是PIM SM的核心、瓶颈,且易有单点故障: 路由器间通告RP会使网络增加负荷,配置维护的复杂性相应增加;RP是接收者所加入的RPT树的树根,是源所建起的SPT树的叶子路由器;RP未必处于源和接收者路由器之间的最优路径上,所以经RPT树路径未必是最优路径。使组播域中每台路由器都知道RP的信息,按RP部署维护的复杂性和方式,可分为静态RP和动态RP部署。 • 静态RP:在PIM域中的所有PIM路由器上逐一进行配置,静态指定RP。static-rp rp-address 指定静态RP的IP地址。坏处是所有路由器都需要配置,配置量比较大,并且没有备份功能,当RP出问题以后就无法正常转发流量了,所以当静态和动态RP同时存在的时候,优选动态RP。 • 动态RP:在PIM域内选择几台PIM路由器,配置成为C-RP(Candidate-RP),最后从C-RP中竞选产生RP。 使用动态RP,必须同时配置C-BSR(Candidate-BootStrap Router)。由C-BSR竞选产生BSR。具体内容在RP选举笔记中分析。 资料整理来源:《HCIE路由交换学习指南》、HCIE培训资料 |
CopyRight 2018-2019 实验室设备网 版权所有 |