首页 > 搜索 > spt路由算法,组播路由协议 PIM

spt路由算法,组播路由协议 PIM

互联网 2020-10-21 15:21:03
在线算命,八字测算命理

 

PIM-SM (Protocol Independent Multicast-Sparse Mode)­––––––独立于协议的组播稀疏模式。

PIM,独立于协议,这主要是指PIM不依赖于某种特定的单播路由协议,它只是利用单播路由协议建立起来的单播路由表来完成RPF校验,而非维护一个组播路由表来实现组播的转发。因为PIM不需要保持自己的路由表,所以它不需要象其它协议那样发送或接收组播路由更新,这样PIM的开销也就低了许多。

 

 

 

以下我将结合例子来简单讲述PIM-SM协议:

 

一.       PIM-SM的工作过程(共享树的加入剪枝)

 

PIM-SM的操作是围绕着一个单向的共享树来展开的,这里的单向是指:从源到接收者方向。在共享树上,有一个根节点----RP,共享树上的组播数据流要依赖于RP来向下转发,因此共享树也叫RP树,通常称作RPT。

那么源的数据流是如何到达接收者的呢?见下图:

 

ReceiverB是个接收者,想接收HostA的数据流,则它向路由器C发送一个IGMP加入报文(该报文中包含一个组播组,即B想接收的那个组播流的多播地址),RouterC收到这个加入报文后,它要检查看是否存在有关于该多播地址的路由条目,没有,则创建一个(*,G)路由条目(这里的G就是目标多播组的组地址),并将收到加入报文的接口添加在这个路由条目的出接口中。

同时这也引发了RouterC向RP(图中的RouterD)发送一个PIM(*,G)加入消息,以便能够加入共享树。至于routerC是如何知道RP的,我们将在以后讨论。

 

RP收到这个(*,G)加入消息,也检查看是否存在有关于该多播地址的路由条目,有则将收到消息的接口加入到相应条目的出接口表中(即自己与RouterC相连的接口),如果没有相应的路由条目,则创建,并也在其出接口表中添加收到消息的接口。

其实组播路由器在转发组播数据流的时候,并不关心其下面有多少个接收者,他们分别位于何处,它只关心组播数据流是否有相应的出接口,有就将它们从出接口转发出去,没有就丢掉。

 

假设,此时另外的一个接收者ReceiverC也想加入组播组G的共享树,则它也向它的直连routerE 发送一个IGMP加入报文,E一看没有有关G组的多播路由条目,它也建立一个(*,G)路由,并将相应的接口添加到该路由的出接口表中。由此又引发了E向RP发PIM(*,G)加入消息。

当这个加入消息到达RouterC后,C检查看到已经有了有关组播组G的多播路由条目(*,G)(也就是说它已经在该组的共享树上了),则C简单的将收到该加入消息的接口添加到这个(*,G)的出接口表中。并不再向RP发加入消息了。

 

 

至此,这个单向的共享树的下半段(即RP到接收者)路径就建立好了。

 

 

那么,组播源的信息是如何到达RP,并向下流到接收者的呢?PIM-SM是通过源注册来完成这一步的。

PIM注册消息由第一跳路由器DR(也就是直接与一个组播源相连的路由器)发送到RP,注册消息的目的是:

1.  通知RP源(图中的HostA)正在有效地向组G发送信息。

2.  为了沿着共享树向下发送信息,向RP转发源最初的组播信息包。

   

当组播源开始传输组播数据时,DR收到组播数据包,它查看数据是从其直连的网络中收到的,则routerA知道自己是第一跳路由器――DR,并在它的组播路由表中建立一个(S,G)状态条目。由于是DR,所以routerA将组播信息包封装在一个独立的PIM注册消息中,并把它单播给RP。

当RP接收到PIM注册消息时,它先解封装此消息,检查组播包,看是否存在相应的组播组。如果不存在就简单的丢弃,并不向源发送加入消息;如果存在相应的组播组,RP就沿着共享树向下转发信息,然后把SPT加入到源,以便它能接收到源的原始数据包,而不是封装在PIM注册消息中的。

以图为例说明这一过程:

组播数据源HostA,开始转发数据,数据先是到达RouterA,RouterA发现数据来自与自己直连的网络,则它知道自己是DR。然后,它创建(S,G)路由,并将组播数据包封装在PIM注册消息中并将它们单播到RP(RouterD)。

当RP,即RouterD收到PIM注册消息后,它解封装,查看数据包是否来在一个存在的组播组。因为在此之前RP建立了(*,G)路由项,所以RP,将解封装了的数据从(*,G)路由的出接口转发出去。RP还向源的方向发送一条(S,G)加入消息,以把源加入到SPT,即把(S,G)消息拉到RP。

(S,G)加入信息一跳一跳的被传送到DR,当DR收到加入消息时,从路由器A到RP的(S,G)SPT就建立成了。为了终止DR的注册以及接收不封装的数据流,RP还要向DR单播一个PIM保留消息。收到PIM保留消息后,DR就不再发注册消息,并且不封装组播数据而是直接将其发送到RP。

RP接收到不封装的数据流,就从相应的出接口转发出去,到了RouterC,RouterC收到后检查出接口,一个是直接转发给了HostB,一个是转发给了RouterE。RouterE收到后再从其多播路由的相应出接口转发出去,转发给了HostC。

 

 

我们来做个总结,看看PIM-SM的工作过程:整个过程分为两部分,一部分是接收者到RP,一部分是源到RP。

接收者到RP的共享树建立,是通过接收者向第一跳路由器发加入报文,再由第一跳路由器朝着RP方向发加入报文,并在途中的所以路由器上建立相应的(*,G)路由条目,添加相应的出接口。

源到RP的共享树的建立,是通过DR向RP单播PIM注册消息,RP解封装消息,查看相应的路由,转发数据,并向DR发送PIM保留消息,以终止DR的注册和接收不封装的数据流。

 

到此,一个组播数据流就从源,通过RP,流到了接收者HostB和HostC。

以上是共享树的加入过程。那么,如果接收者不想再接收数据了,怎么办呢,这就是我们要讲到的共享树的剪枝:

假设HostC不想再接收组播数据了,则它发送一个IGMP剪枝报文给路由器E,E收到剪枝后查看多播路由条目,然后这个接口从(*,G)的出接口列表中被删除。当接口被删除后,作为(*,G)条目的输出接口列表为空了,这表示RouterE不再需要这个组的信息了,则RouterE通过向RP发送(*,G)剪枝来把自己从共享树上剪枝掉。

RouterC收到E的剪枝后,从它的(*,G)条目的出接口列表中将相应的接口删掉,因为RouterC的(*,G)的出接口列表中还有一个出口(到达HostB的)存在,所以它并不需要向RP发什么剪枝报文。(它只是简单的删除掉到E的接口)。

 

 

二.       PIM-SM的最短路径树

2.1加入SPT

PIM-SM的一个主要好处就是它还可以使用SPT来接收组播信息。通过加入SPT,组播信息不必通过RP即可直接路由到接收站点,因此减少了网络延迟以及RP上可能出现的堵塞。

见下图:

 

在启了PIM-SM的router上,有个阀值叫SPT-Switchover,当组播的数据流量大于设定的SPT-Threshold值时,router就会向源发送一个(S,G)加入消息(它是通过RPF计算来确定把此报文从那个接口发送出去),以便加入到这个源的SPT。消息被一跳一跳的流向源,并建立SPT。说明一点:我们的设备缺省的SPT-Threshold值为0,即实时要加入源的SPT。

看图讲解这个过程:routerE向源发送(S,G)加入报文(它是通过RPF计算来确定把此报文从那个接口发送出去),当RouterC收到该报文后,就在它的组播组播转发表中建立(S,G)条目,并添加相应的出接口,同时也向源发送(S,G)加入报文。

因为RouterC检测到,共享树和SPT的路径在此分离,所以它沿着共享树向RP发一个RP位剪枝消息,就是说它不想从RP那里得到源的组播数据了,以避免收到重复的信息。

最后,当RouterA收到加入报文时,它向现有的(S,G)条目的输出接口表中添加到RouterC的接口,这样从源来的数据流就可以通过A直接到达C。

 

2.2剪枝SPT(与剪枝共享树基本相同)

    HostC发送IGMP离开报文,routerE收到后剪枝相应(*,G)、(S,G)的出口列表,因为只有HostC一个直连的成员,所以出口列表为空了,routerE要向RP发送(*,G)剪枝,并停止发送定期的(S,G)加入消息。RouterC收到剪枝消息,也从(*,G)出口表中剪枝相应的出口,如果出口表为空则继续向RP发(*,G)剪枝,而routerE和routerC的(S,G)路由项就等着超时而被删掉。

 

三.RP

 

以上的讲解中,我们遗留了一个问题,就是RP。

RP:Rendezvous Point,集合点、汇合点的意思,它是共享树的根。

对于每一个多播组来说,都必须有且只有一个RP,组播数据流要想下流到接收者到必须经过RP,或至少最初要经过RP(对于源的SPT来说),因为源不知道接收者在那里,它只能把数据交给RP,RP知道接收者与其相连的接口,并将数据于这些接口转发出去。与接收者相连的第一跳路由器最初(甚至有的最终也)不知道源在那里,它们只是将加入组的信息向RP发送,并在沿途建立起相应的(*,G)路由,最终到达RP。

那么,源和接收者是如何知道RP在何处的呢?

一种方式,administrator可以手工在网络上的每台pim路由器上指定静态的RP,用命令:ip pim rp-address X.X.X.X。这样所有的pim路由器就都知道RP的位置了,但很明显这样有个弊端:它不适合用在大型以及经常变化的网络上。

另一种方式,动态的RP,也就是PIMv2中定义的“将组到RP的映射信息发布到网络的所有PIM路由器”,这种方法常被简单的叫做“自举路由器机制”。

自举路由器机制,许网络中有多个候选的RP,这样可以容错,避免单一的静态RP失败而造成组播网络的瘫痪。那么多个候选的RP,究竟那个,会被如何选为网络中的真正有效的RP呢?这就依靠BSR(bootstrap router)。

BSR,bootstrap router,叫自举路由器。

网络中的某台路由器被配置成BSR,则它要先向所有的PIM路由器发送bootstrap报文,通知大家“我是BSR”。当候选的RP得知这个消息后,它们就把自己的信息单播给BSR,这样BSR会收到网络中所有候选RP的信息,然后,BSR就定期发送带有所有候选RP信息的bootstrap报文,给所有的PIM路由器,之后所有的PIM路由器按照相同的hash算法在本地算出一个RP。因为大家收到的候选RP信息都相同,算法也相同,所以算出的RP也一定相同,这样就保证了网络同一个组播组可以映射到同一个RP。

(BSR也可以配置多个,以提供容余,BSR在网络中也要只有一个,它们之间的竞争还是通过bootstrap报文。)

 

 

 

至此,我的这篇学习理解就收尾了,有错误或不足处之处请大家指正!!!

 

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多