IP组播基础及工作原理实战——3

                                    PIM基础及工作原理

PIM(协议无关组播)中的“协议无关”指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息,而是直接利用单播路由表的路由信息(注意:还有自己的组播路由表),对组播报文执行RPF(Reverse Path Forwarding,逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。

目前在实际网络中,PIM主要有两种模式:PIM-DMPIM-DenseModePIM密集模式)、PIM-SMPIM-Sparse ModePIM稀疏模式),均可用于IPv4和IPv6网络。由PIM路由器所组成的网络称为PIM网络。通常一个大的PIM网络可以划分为多个PIM来管理和控制组播报文的转发,这里的域内组播协议即是指PIM域内组播协议

在目前的PIM协议中,主要实现方式包括PIM-DMPIM-SMASM模型)、PIM-SMSSM模型)3。SSM模型与ASM模型之间的最大差异就是是否指定了组播源


1、PIM路由器

接口上使能了PIM协议的路由器即为PIM路由器。在建立组播分发树的过程中,PIM路由器又分为以下几种:

(1)第一跳路由器:在组播转发路径上与组播源相连且负责转发该组播源发出的组播数据的PIM路由器。如上图的RouterE。

(2)叶子路由器与用户主机相连的PIM路由器,但连接的用户主机不一定为组成员,如上图中的RouterA、RouterB、RouterC。

(3)最后一跳路由器:在组播转发路径上与组播组成员相连,且负责向该组成员转发组播数据的PIM路由器。如上图中的RouterA、RouterB

(4)中间路由器:在组播转发路径上第一跳路由器与最后一跳路由器之间的PIM路由器。如上图RouterD

2、组播分发树

“组播分发树”是PIM网络中以组播组为单位PIM路由器上建立的点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树(MDTMulticast Distribution Tree

组播分发树主要包括以下几种:

(1)以组播源为根以组播成员为叶子的组播分发树称为SPTShortest Path Tree,最短路径树)。SPT同时适用于PIM-DM网络和PIM-SM网络。如上图的RouterE——>RouterD——>RouterA/RouterB/RouterC就是一棵以Source为根,以HostA、HostB和HostC为叶子的SPT。

(2)RPRendezvousPoint,汇集点)为根,以组播组成员为叶子的组播分发树称为RPTRP Tree,汇集点树)。RPT仅适用于PIM-SM网络。RP是通过手动配置的。

关于组播分发树:

组播分发树是用来描述IP组播报文在网络中经过的路径,分为两个基本类型:源路径树(如SPT)和共享树(如RPT)。

组播路由形成了一个从数据源到多个接收端的单向无环数据传输路径,即组播分发树。
l 组播分发树的两个基本类型:源路径树和共享树。
l 源路径树:以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树。由于源路径树使用的是从组播源到接收者的最短路径,因此也称为最短路径树(Shortest Path TreeSPT)。对于某个组,网络要为任何一个向该组发送报文的组播源建立一棵树。
l 共享树:以某个路由器作为路由树的树根,该路由器称为汇集点(Rendezvous PointRP),将 RP 到所有接收者的最短路径结合起来构成转发树。
l 使用共享树时,对应某个组,网络中只有一棵树。所有的组播源和接收者都使用这棵树来收发报文,组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者。

本例中有两个组播源(源S1和源S2),接收者R1RT2。所以本例中有两棵源路径树,分别是:
l S1—A---CR1-----ER2
l S2---F----D---CR1------ER2

共享树以某个路由器作为路由树的树根,该路由器称为汇集点(Rendezvous Point, RP),将 RP 到所有接收者的最短路径结合起来构成转发树。使用共享树时,对应某个组,网络中只有一棵树所有的组播源和接收者都使用这棵树来收发报文组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者

本例中两个源S1S2共享一颗树 DRP----CR1----ER2

3、PIM路由表项

PIM路由表项通过PIM协议建立的组播路由表项。PIM路由表项中主要用于指导转发的信息,包括组播源IP地址(是一个单播IP地址)、组播组IP地址(是一个组播IP地址)、上游接口(本地路由器上接收到组播数据的接口,如上图中RouterDGE3/0/0接口)和下游接口(将组播数据转发出去的接口,如上图中RouterDGE1/0/0GE2/0/0接口)

PIM网络中存在两种路由表项SG)路由表项或(*G)路由表项。S表示组播源IP地址,G表示组播组IP地址,*表示任意组播源。其中,SG)路由表项中明确指定了组播源S的位置,主要用于在PIM路由器上建立SPT(最短路径树),同时适用于PIM-DM和PIM-SM网络;而*G)路由表项中代表不知道组播源位置,只知道组播组IP地址,主要用于在PIM路由器上建立RPT(汇集点树),仅适用于PIM-SM网络

PIM路由器上可能同时存在以上两种路由表项。当收到源地址为S,组地址为G的组播报文,且通过RPF(逆向路径转发)检查的情况下,按照如下的规则转发:

(1)如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。

(2)如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发

组播数据转发

● 组播路由和单播路由是相反的

☆ 单播路由关心数据报文要到哪里去。

☆ 组播路由关心数据报文从哪里来。

● 组播路由使用“反向路径转发”机制(RPF,Reverse Path Forwarding)

单播报文的转发过程中,路由器并不关心源地址,只关心报文中的目的地址通过目的地址决定向哪个接口转发

 在组播中,报文是发送给一组接收者的,这些接收者用一个逻辑地址标识。路由器在接收到报文后,必须根据源和目的地址确定出上游(指向组播源)和下游方向,把报文沿着远离组播源的方向进行转发。这个过程称作 RPFReverse Path Forwarding,逆向路径转发)

什么是逆向路径转发RPF??——路由器收到组播数据报文后,只有确认这个数据报文是从自己到组播源的出接口上到来的,才进行转发,否则丢弃报文。

RPF检查——在单播路由表中查找到组播报文源地址的路由:如果该路由的出接口就是组播报文的入接口,RPF成功;否则RPF失败,报文丢弃。

● RPF 执行过程中会用到原有的单播路由表以确定上游和下游的邻接结点。只有当报文是从上游邻接结点对应的接口(称作 RPF 接口)到达时,才向下游转发

● RPF 的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的环路,环路避免在组播路由中是一个非常重要的问题

● RPF 的主体是 RPF 检查,路由器收到组播报文后,先对报文进行 RPF 检查,只有检查通过才转发,否则丢弃。 RPF 检查过程如下:

 1)路由器在单播路由表中查找组播源或 RP 对应的 RPF 接口(当使用信源树时,查找组播源对应的 RPF 接口,使用共享树时查找 RP 对应的RPF 接口),某个地址对应的 RPF 接口是指从路由器向该地址发送报文时的出接口

 2)如果组播报文是从 RPF 接口接收下来的,则 RPF 检查通过,报文向下游接口转发;

 3)否则,丢弃该报文

● RPF检查的过程实际上是查找单播路由表的过程。

● 路由器接收到组播报文后,后查找单播路由表,检查到达组播源的出接口是否与接收到组播报文接口一致。如果一致则认为合法,如果不一致则认为从错误接口收到报文, RFP检查失败,丢弃报文。

● 如图所示的本例中,路由器的S0接口接收到组播报文。于是启动RPF检查。通过查找单播路由表,发现到达路由源151.10.0.0/16的出接口为S1,与接收口S0不一致,于是RPF失败,并认为是从错误接口收到组播报文,丢弃该报文。

● 与前一例相同的组网图,路由器从S1接口接收到组播报文,同样进行RPF检查。对比单播路由表,发现到达组播源的出接口是S1,与接收口一致,于是正常接收该报文,并向组播分树中的下游接口转发组播报文

——通过这里的讲解描述,所谓的RPF逆向路径检测,是针对单播路由表来说的,本来单播路由表是按照数据流从源到目的的顺序查找转发的,就是查找的是目的,或说是下游(下一站)的路径(或是接口,或是地址),而组播则是查找的源,或者说是上游的路由,所以叫做逆向路径查找

二、PIM-DM基本工作原理

PIM-DM(PIM密集模式)使用“推”(Push)模式转发组播报文,一般应用于组播组成员规模相对较小、相对密集的网络。在实现过程中,它会假设网络中的组成员分布非常稠密,每个网段都可能存在组成员。当有活跃的组播源出现时,PIM-DM会将组播源发来的组播报文扩散到整个网络的PIM路由器上,再裁剪掉不存在组播报文转发的分支。——先扩散,再裁剪

PIM-DM通过周期性的进行“扩散(Flooding)——剪枝(Prune)”过程来构建并维护一棵连接组播源和组成员的单向无环SPTSource Specific Shortest Path Tree,源指定最短路径树)。如果在下一次“扩散——剪枝”进行前,被裁剪掉的分支由于其叶子路由器上有新的组成员加入而希望提前恢复转发状态,也可通过嫁接(Graft机制主动恢复其对组播报文的转发。

PIM-DM的关键工作机制包括邻居发现、扩散、剪枝、嫁接、断言和状态刷新。其中,扩散、剪枝、嫁接是构建SPT的主要方法。

1、邻居发现(Neighbor Discovery)

PIM路由器每个使能了PIM协议的接口上都会对外发送Hello报文。封装Hello报文的组播报文的目的地址是224.0.0.13(代表同一网段中所有PIM路由器,是一个永久组播地址)、源地址为接口的IP地址、TTL数值为1

Hello报文的作用:发现PIM邻居、协调各项PIM协议报文参数,并维持邻居关系。

发现PIM邻居的过程中,同一网段中的PIM路由器都必须接收目的地址为224.0.0.13的组播报文。这样直接相连的PIM路由器之间通过交互Hello报文后就可以彼此知道自己的邻居信息,建立邻居关系。只有邻居关系建立成功后,PIM路由器之间才能相互接收PIM协议报文,从而创建组播路由表项。

Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制,协调各项PIM协议报文参数。具体参数包括:

(1)DR_Priority:表示各路由器接口竞选DR(指定路由器)的优先级,优先级越高越容易获胜,担当IGMPv1的查询器(注意,如果是运行IGMPv2或IGMPv3则采用专门的查询器选举机制)。

(2)Holdtime:表示保持邻居为可达状态的超时时间,超过这个时间没收到邻居发来的Hello报文即认为该邻居不可达。这与RIP、OSPF等动态路由协议中的Hello报文是一样的。

(3)LAN_Delay:表示共享网段内传输Prune(剪枝)报文的延迟时间,超过这个时间,这个报文将被丢弃。

(4)Neighbor-Tracking:表示邻居跟踪功能

(5)Override-Interval:表示Hello报文中携带的否决剪枝的时间间隔。当超过这个时间后原来的剪枝状态就要被中止,恢复对应接口的组播转发功能。

2、维持邻居关系

PIM路由器之间周期性地发送Hello报文。如果Holdtime超时还没有接收到该PIM邻居发出的新的Hello报文,则认为该邻居不可达,将其从邻居列表中清除。

PIM邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由器重新收敛,组播分发树迁移。

3、扩散

当PIM-DM网络总出现活跃的组播源之后,组播源发送的组播报文将在全网内扩散(Flooding)。“扩散”的目的其实就是为了下一步的“剪枝”和“断言”操作。当PIM路由器接收到组播报文,并根据单播路由表进行RPF检查通过后,就会在该路由器上创建(S,G)表项。PIM路由器的下游接口列表中包括了除上游接口之外,与所有PIM邻居相连的接口,到达的组播报文将从各个下游接口转发出去。最后组播报文扩散到达叶子路由器,此时会出现以下两种情况:

(1)如果与该叶子路由器相连用户网段上存在组成员,则将与该网段相连的接口加入(S,G)表项的下游接口列表中,后续的组播报文会向组成员转发。

(2)如果与该叶子路由器相连用户网段上不存在组成员,且不需要向其下游PIM邻居转发组播报文,则执行“剪枝”机制,从组播路径中去掉这部分路径。

有时组播报文扩散到一个连着多台PIM路由器的共享网段时,会出现这种情况:这些PIM路由器上进行的RPF检查都能通过,从而有多份相同报文转发到这个网段。此时,需要执行“断言”机制,保证只有一个PIM路由器向该网段转发组播报文。

如上图,在PIM-DM网络中,RouterA、RouterB和RouterC之间通过发送Hello报文建立了PIM邻居关系。HostA通过RouterA与HostA之间运行的IGMP协议加入了组播组G,HostB没有加入任何组播组。则扩散的具体过程如下,从中也反映了扩散的目的之一——“剪枝”。

(1)组播源S开始向组播组G发送组播报文。

(2)RouterC接收到源发送的组播报文后根据单播路由表进行RPF检查。RPF检查通过后创建(S,G)表项,下游接口列表包括与RouterA和RouterB相连的接口,后续到达的报文向RouterA和RouterB转发。

(3)RouterA接收来自RouterC的组播报文,通过RPF成功检查后在本地创建对应(S,G)表项,并在下游接口列表添加与组成员HostA相连的接口,后续到达的报文向HostA转发。

(4)RouterB接收来自RouterC的组播报文,由于与RouterB相连下游网段不存在组成员和PIM邻居,所以执行剪枝操作,不会发送组播数据到HostB上。

4、剪枝(Prune)

通过“扩散”特性可了解“剪枝”的目的,剪枝的原理如下:

当PIM路由器接收到组播报文后,通过RPF检查,但是下游网段没有组播报文需求时,PIM路由器会向上游发送剪枝报文通知上游路由器禁止相应下游接口的转发将其从(S,G)表项的下游接口列表中删除。剪枝操作由叶子路由器发起逐跳向上,最终组播转发路径上只存在与组成员相连的分支。

路由器为被裁剪的下游接口启动一个剪枝定时器,定时器超时后接口恢复转发。这时,组播报文又会重新在全网范围内扩散,新加入的组成员可以接收到组播报文。随后,下游不存在组成员的叶子路由器再次将向上发起剪枝操作。通过这种周期性地扩散——剪枝,PIM-DM周期性的刷新SPT。当下游接口被剪枝后会执行以下操作:

(1)如果下游叶子路由器有组成员加入,并且希望在下次“扩散——剪枝”前就恢复组播报文转发,则执行“嫁接”机制

(2)如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行“状态刷新机制”

——从上面的描述,可以得出,组播路由表项的数据结构除了包括(S,G)外,还包括一个下游接口列表,可设想如下(S,G<GE0/0/1,GE0/0/2,...>,而接口列表的确定依赖邻居关系表,所谓的剪枝Prune,就是对(S,G<>的项进行删除,也就是没有下游接口的组播路由项进行删除。如叶子路由器因为没有组成员,相应的组播路由表项后面就没有接口列表,进行组播路由表项的删除,同时,向上游路由器发送剪枝报文,上游路由器的(S,G)表项将对应的接口列表中的这个接口删除,再判断(S,G)表项的接口列表是否为空,不为空,说明还有其他分支上需要转发(S,G)的组播报文,剪枝到此为止,如果(S,G)表项的接口列表为空,在删除此组播路由表项,同时再次上传剪枝报文到它的上游路由器进行剪枝

如下图,RouterB上未连接组成员。在这种情况下,RouterB会向上游发起剪枝请求。过程如下:

(1)RouterB向上游RouterC发送Prune报文,通知RouterC不用再转发数据到该下游网段。

(2)RouterC收到Prune报文后,停止该下游接口(也就是与RouterB相连的出接口)转发,将该下游接口从(S,G)表项中删除,后续到达的报文只向RouterA转发。

5、嫁接(Graft)

PIM-DM通过“嫁接机制”可使有新组成员加入的网段快速得到组播报文。叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中

嫁接过程从叶子路由器开始,到有组播报文到达的路由器结束。如下图所示为具体的嫁接过程:

(1)RouterB希望立即恢复对HostB组播报文的转发,于是向上游路由器RouterC发送Graft报文,请求恢复相应出接口转发组播报文。

(2)RouterC收到Graft报文后,恢复与RouterB相连的出接口转发,将该接口添加到(S,G)表项中的下游接口列表中,这样后续到达的报文向RouterB转发,直达HostB。

——也就是说,作为组播路由器,对于建立的组播路由表项不删除,只是对接口进行管理

6、状态刷新(StateRefresh)

在PIM-DM网络中,为了避免被剪枝的接口因为“剪枝定时器”超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发State Refresh报文在全网内扩散。收到状态刷新(State Refresh)报文的PIM路由器会刷新剪枝定时器的状态,其目的就是查找原来被剪枝的路径上是否有组播成员要加入,要恢复转发状态,是一种被动中止剪枝状态的操作。在原来被剪枝接口的下游叶子路由器上,如果有新的组成员加入,则立即中止剪枝状态,对应路径的组播转发;如果仍没有组成员加入,则该接口将一直处于抑制转发状态。

——状态刷新报文就是为了保持全网的剪枝效果,使其一直为剪枝状态,剪枝定时器只在非叶子路由器上存在,这样,剪枝后,因为配置了状态刷新,所以就只能一直是剪枝状态,这时想要恢复转发,只能由叶子路由器主动发送嫁接Graft报文,来主动要求上游路由器在组播路由表项中的接口列表中添加相应接口,启动转发。配置了状态刷新,那么就需要叶子路由器主动发送嫁接报文来主动加入转发路径中;如果不设置状态刷新,那么就需要叶子路由器不断发送剪枝Prune报文,不停的对上游路由器进行剪枝

7、断言(Assert)

当一个网段内有多个相连的PIM路由器通过RPF检查后向该网段转发相同的组播报文时,则需要通过“断言机制”来保证只有一个PIM路由器向该网段转发组播报文,以保证组成员不接收多份相同的组报文。

“断言机制”是PIM路由器接收到邻居路由器发送的相同组播报文后,以组播的方式向本网段的所有PIM路由器发送Assert报文目的地址为224.0.0.13(代表所有PIM路由器)。其他PIM路由器在接收到Assert报文后,将自身参数与对方报文中携带的参数做比较,进行Assert竞选。竞选规则如下:

(1)单播路由协议优先级较高者获胜

(2)如果优先级相同,则到组播源的路径开销较小者获胜

(3)如果以上都相同,则下游接口IP地址最大者获胜

根据Assert竞选结果,路由器将执行不同的操作:

(1)获胜一方的下游接口称为AssertWinner,将负责后续对该网段组播报文的转发。

(2)失败一方的下游接口称为AssertLoser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除

Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。所有Asser Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert竞选。

如上图,RouterB和RouterC均通过了RPF检查,创建了(S,G)表项,并且两者的下游接口连接在同一网段,RouterB和RouterC都向该网段发送组播报文。具体断言过程如下:

(1)RouterB和RouterC从各自上游接口接收到RouterA发来的组播报文,RPF检查都失败,报文被丢弃。这时,RouterB和RouterC就会分别向该网段发送Assert报文。——这里是不太明白的,为什么RPF检查会都失败?其(S,G)表项的创建是因为RPF成功才能创建,这里又说失败,很矛盾

(2)RouterB在收到RouterC发来的Assert报文后,将自身的路由信息与Assert报文中携带的路由信息进行比较,由于RouterB自身到组播源的开销较小而获胜。于是后续组播报文仍然向该网段转发,RouterC在接收到组播报文后仍然由于RPF检查失败而丢弃。

(3)同样,RouterC在收到RouterB发来的Assert报文,也将自身的路由信息与报文中携带的路由信息进行比较,由于RouterC自身到组播源的开销较大而落败。于是禁止相应下游接口向该网段转发组播报文,将其从(S,G)表项的下游接口列表中删除。

● PIM(Protocol Independent Multicast)称为协议无关组播,表示为IP组播提供路由信息的可以是静态路由、 RIP、 OSPF、 IS-IS、 BGP等任何一种单播路由协议。组播路由和单播路由协议无关,只要通过单播路由协议能够产生相应组播路由表项即可。

● PIM-DM(Protocol Independent Multicast Dense Mode)称为协议独立组播-密集模式,属于密集模式的组播路由协议,适用于小型网络。在这种网络环境下,组播组的成员相对比较密集。

● PIM-DM假设网络中的每个子网都存在至少一个对组播源感兴趣的接收站点,因此组播数据包被扩散到网络中的所有点,与此伴随着相关资源(带宽和路由器的CPU等)的消耗。

● 为了减少这些宝贵网络资源的消耗,密集模式组播路由协议对没有组播数据转发的分支进行Prune剪枝操作,只保留包含接收者的分支。

● 剪掉的有组播数据转发需求的分支也可以重新接收组播数据流。 PIM-DM使用Graft嫁接机制主动恢复组播报文的转发。

● 周期性的扩散和剪枝现象是密集模式协议的特征,只能适合规模较小的局域网

● DM模式下数据包的转发路径是一颗“有源树”。

● “有源树”以“组播源”为根、组播组成员为枝叶的一棵树。有源树使用的是从组播源到接收者的最短路径,因此也称为最短路径树SPT(Shortest Path Tree) 。如图中箭头所示的从Source到接收者的路径。

● PIM-DM不依赖于特定的单播路由协议,而是使用现存的单播路由表进行RPF检查。

● 数据包的转发中会出现上游和下游两个概念。路由器收到组播数据的接口称为上游。转发组播数据的接口称为下游数据包的转发是从上游至下游方向的转发。

● PIM协议报文中的协议号都是103。——这里说的是IP报头中的protocol字段的值。PIM协议数据报文是封装在IP报文中的,IP报文中以protocol字段值为103来标识其封装的是协议无关组播协议数据

● 本页列出的几种报文类型是于PIM-DM协议相关的。

● PIM-DM协议的报文类型有: Hello报文、加入/剪枝消息、 Assert报文(Assert消息使用组播方式发送,目的地是224.0.0.13的所有PIM路由器)、嫁接消息、嫁接回应消息。这几类报文主要用于周期的建立、维护SPT树。

● 在PIM-DM网络中, 刚启动的组播路由器需要使用Hello消息来发现邻居, 并维护邻居关系。 通过各路由器之间周期性地使用Hello消息保持联系, 从而构建和维护了SPT树。

● pim timer hello interval, 在接口视图下配置发送Hello消息的时间间隔。 Hello消息默认周期是30秒。

● 除了维护邻居关系外, Hello消息还具有一个重要的功能就是在多路由器网段中选举DR指定路由器。 DR充当IGMPv1查询器。 在IGMP概述中已经提到过IGMPv1中查询器的选举由组播路由协议决定。

● 在PIM-DM中通过比较Hello消息上携带的优先级和IP地址, 各路由器为多路由器网段选举指定路由器DR, 充当IGMPv1的查询器。

● 当DR出现故障时, 接收Hello消息将会超时, 邻居路由器之间会触发新的DR选举过程。

pim hello-option holdtime interval 在接口视图下配置Hello消息超时时间值。默认情况超时时间值为105秒。

● PIM-DM假设网络上的所有主机都准备接收组播数据,当某组播源S开始向组播组G发送数据时,具过程如下:

● 路由器接收到组播报文后,首先根据单播路由表进行RPF检查。

 ☆ 如果检查通过则创建一个(S, G)表项,然后将数据向网络上所有下游PIM-DM节点转发,这个过程称为扩散(Flooding

 ☆ 如果没有通过RPF(Reverse Path Forwarding)检查,即组播报文从错误的接口输入,则将报文丢弃。

● 经过这个过程, PIM-DM组播域内每个路由器上都会创建(S, G)表项

● 无论下游有没有组播成员,组播报文都会被扩散出去,因此会导致宽带资源的浪费。为避免宽带的浪费PIM-DM使用剪枝机制。

● 当下游节点没有组播组成员,则路由器向上游节点发Prune剪枝消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune剪枝消息后,就将相应的接口从其组播转发表项(S G)对应的输出接口列表中删除。剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个以组播源S为根的SPT(一种组播转发树,被称为:源路径树或最短路径树)。

● 各个被剪枝的节点同时提供超时机制,当剪枝超时时重新开始扩散—剪枝过程。剪枝状态超时器的默认值为210秒。

● PIM-DM的扩散—剪枝机制周期性进行

● 组播路由器根据剪树消息剪去多余的分枝,形成一棵新的SPT树。虽然剪枝消息让路由器再不再向没有组播成员的分枝转发组播报文。但是每个路由器上的(SG)表项仍然存的,其目的是为了一旦有组播成员加入时可以快速加入并转发组播报文

● 被剪枝的下游节点可以在剪枝超时器超时会恢复到转发状态,但是剪枝超时器要等待210秒。如果在这期间有组播成员相加入时必须等待,这个时间是比较长的。为了减少反应的时间,当被剪枝的下游节点需要恢复到转发状态时,该节点可以使用Graft嫁接消息主动通知上游节点。

● 如上所示:网络中一个接收者恢复接收组播数据, Graft嫁接消息逐跳向组播源S传递,中间节点接收到Graft嫁接消息后回应确认,从而先前被剪掉的分支恢复信息传输。

● 剪枝路径重新恢复为转为路径,生成一颗新的SPT树。

● PIM-DM采用RPF检查机制, 利用现存的单播路由表、 组播静态路由表、 MBGP路由表来构建一棵从数据源S始发的组播转发树。

● 当一个组播包到达时,路由器首先判断到达路径的正确性。如果到达接口是单播路由指示的通往组播源S的接口, 就认为这个组播包是从正确路径而来;否则,将组播包作为冗余报文丢弃。

● 作为路径判断依据之一的单播路由信息可以来源于任何一种单播路由协议,如RIP、 OSPF发现的路由信息, 不依赖于特定的单播路由协议。

● 在共享网络(如Ethernet)中会出现相同报文的重复发送。如上图所示: LAN网段上包含多台组播路由器A、 B、 C和D,各自都有到组播源S的接收途径。当路由器A、 B和C都从上游接收到组播源发出的组播数据报文后,都会向Ethernet网络上转发该组播报文,这时下游节点组播路由器D就会收到三份完全相同的组播报文。

● 为了避免这种情况,就需要通过Assert机制来选定一个唯一的转发者。网络中的各路由器通过发送Assert报文选出一条最优的路径。

● 选举机制如下:如果两条或两条以上路径的优先级和到组播源的开销相同,则IP地址最大的路由器获胜成为该(S, G)项的上游邻居,由它负责该(S, G)组播报文的转发,而其他落选路由器则剪掉对应的接口以禁止转发信息。

——这里不明白的是断言机制启动的触发机制,从上图看,路由器在向下游转发组播报文的同时,监控接口是否接收了同样的组播报文,或者说只要路由器发现本路由器发送了(S,G)组播报文,而转发接口又收到了(S,G)组播报文,就发起断言。上图中RouterD因为只是接收了相同的三份组播报文,而本身(这个端口)没有发送(转发)组播报文,所以不参与断言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值