组播原理详解

发布时间 : 星期五 文章组播原理详解更新完毕开始阅读

自己那里接收数据流,因而一直不停的把数据流发给MR。这样不但浪费链路带宽资源,而且浪费MR的系统资源,因为MR路由器必须做RPF检查。因此,一个有效的办法就是让RT1停止从该接口上转发组播数据流,这可以通过一个特殊的消息—剪枝来解决,具体过程是这样的:

当MR路由器从接口S1接收到组播数据报后,马上进行RPF检查,如果失败,则MR路由器丢弃接收到的组播数据报,并通过S1接口给上游路由器(在这里就是RT1)发送一个剪枝消息,告诉上游路由器停止转发该组的数据。这样当RT1接收到这个请求后,就不再从该接口转发数据流。RT1是通过修改自己内部的多播转发表来做到这一点的,回忆一下多播转发表的结构,RT1路由器仅仅在多播转发表的出口集合中把相应接口删除即可。 了解了剪枝消息后,嫁接消息就很简单了,它跟剪枝消息刚好相反,是用来通知上游路由器,让上游路由器把组播数据转发给自己,比如,在上面的图形中,MR路由器的接口S0由于某种原因DOWN掉了,这时候MR路由器会通过S1接口给上游路由器发送一个嫁接消息,接收到该嫁接消息后,RT1路由器回重新发组播数据流给MR路由器(通过在多播转发表中把连接MR路由器的接口加入出口集合来实现),这样在MR上会通过S1接收到组播数据流,这时候MR上进行RPF检查就不会失败了,因为S0接口DOWN掉,通往媒体流服务器的单播路由项会自动的切换到S1接口上(通过动态路由协议完成)。 其实,组播路由协议可以理解为剪枝和嫁接消息的集合,任何组播路由协议都是由这两个消息作为基础的,只不过不同的路由协议发出该消息的时机不同罢了。

上面介绍的时候,提到了RPF检查,并提到,RPF检查需要路由器的单播路由表,这个说法严格来说其实是不正确的,因为要分两种情况:对于某些协议(比如PIM-DM,PIM-SM等),这些协议在进行RPF检查的时候直接使用路由器用于转发单播数据的路由表,即这些协议信任路由器的单播路由协议,这种多播协议叫做协议无关多播协议(也就是PIM的由来,即Protocol Independ Multicast Protocol),还有一些协议,比如DVMRP等,它们在进行RPF检查的时候,是根据自己建立的一个单播路由表进行的,所有这些多播路由协议至少有两部分构成:一部分用于单播路由表的建立(该单播路由表跟路由器用来转发单播数据的路由表不同,它仅仅用于RPF检查),另外一部分用于组播路由表的建立。比如DVMRP,它实际上集成了一个RIP模块,使用该RIP模块来建立用于RPF检查的单播路由表。 下面我们看一下PIM协议,PIM(协议无关多播路由协议)分为DM(密集模式)和SM(稀疏模式),密集模式往往用于一些企业网等网络带宽资源比较丰富的场合下,而稀疏模式则用于网络带宽比较紧张的大型网络中,比如INTERNET,下面我们结合一个网络拓扑图形来分析这两种协议的本质不同:

假设多播路由器MR1和MR2运行的是PIM-DM协议,这样每当MR1接收到媒体流服务器发送过来的组播数据后,它就会通过串口S0发送给MR2,而不管MR2需要不需要这些组播数据流。当MR2不需要组播数据流的时候,MR2会通过一个剪枝消息通知MR1,让MR1停止发送组播数据流,这样MR1接收到MR2的剪枝消息后,会暂停发送组播数据流,一段时间后(该时间一般是3分钟,但可以配置),如果在这段时间内没再次接收到MR2发送过来的剪枝消息,则重新开始发送数据流。所以,如果MR2不想接收MR1发送过来的组播数据流的话,则必须不停的周期性的发送剪枝消息该MR1,即不停的“阻止”MR1给自己发送组播数据流。

如果MR1和MR2运行的是PIM-SM协议,则情况就完全两样了,这时候,MR1总是假设MR2不需要组播数据流,于是根本不给MR2发送从媒体流服务器接收到的数据流,这时候如果MR2想接收媒体流服务器发送的数据流的话,必须通过一个嫁接消息告诉MR1,自己想接收组播数据流了,MR1才开始给MR2发送组播数据流,不过一段时间后(该时间可以配置),如果没有再次接收到来自MR2的嫁接消息,则停止发送组播数据流。所以,如果MR2想持续不断的接收媒体流服务器发送过来的数据流,则必须不停的周期性的给MR1发送嫁接消息,也就是说,不停的向MR1“索取”组播数据流。

理解上面“阻止”和“索取”的含义,是理解DM和SM区别的关键。

其实,PIM-DM和PIM-SM的区别还有一个重要的方面,就是PIM-DM一开始就使用源组播树转发数据,而PIM-SM开始的时候使用共享的组播树发送组播数据,如果组播数据量到了一定程度,则转换为源组播树来完成组播数据的转发。在这里,我们简单介绍一下共享组播树的含义,至于在PIM-SM中由共享组播树向源组播树的切换过程,请参考有关书籍和资料。

共享组播树是这样的,即整个网络选择一个中心点,组播流数据首先发送到该共享的中心点(RP)上,然后由RP完成数据的转发。默认情况下,RP是不转发组播数据流的,所以如果一个路由器想接收组播数据流,则必须向共享中心点注册,这样当RP接收到你注册的组播组的数据后,才向注册路由器转发。

下面我们以一个简单的拓扑图说明注册的过程:

图中,RP即整个网络的共享中心点,这样假设MR2想接收来自媒体流服务器的组播数据流,则必须首先向RP注册(假设所有路由器都是运行PIM-SM协议)。下面说明MR2的注册过程:

1。MR2创建组播转发项(*,G,S0,{E0})(假设媒体流服务器在组播组G内转发数据,MR2通过E0接口连接本地网络),并通过S0接口向MR1发送一个嫁接消息,该嫁接消息中包含了RP的IP地址;

2。MR1接收到MR2发送过来的嫁接消息后,如果存在关于(*,G)的转发项,则仅仅把S0接口加入转发项的出口列表即可,否则MR1首先创建转发项(*,G,S1,{S0}),并通过S1接口向RP路由器发送嫁接消息;

3。如果RP路由器上存在组播转发项(*,G),则仅仅把出口S0加入出口列表,如果不存在该转发项,则创建转发项(*,G,E0,{S0}),这样当接收到媒体流服务器发送过来的组播数据流后,就根据该转发项进行转发(这里需要提出的是,如果路由器接收到一个组播数据报,然而自己组播转发表内没有关于该组播数据报的转发项的话,丢弃收到的组播数据报)。 在上面的过程中,所有转发项的源都是以*代替,*代表任何组播数据源,即创建该组播转发项的路由器对组播数据源的具体位置不关心。那么这时候就存在一个问题:组播路由器是根据什么来进行组播数据的RPF检查的呢?原来,PIM-SM协议的路由器在进行RPF检查的时候,不是采用组播数据报的源IP地址,而是根据RP路由器的IP地址来进行的。 到此为止,我们介绍了一些组播路由协议的基础概念,实际上,如果把这些基础概念都理解透彻了,组播路由协议理解起来就没有技术上的困难了。

3.3 组播高级专题(MSDP,MBGP)

上面介绍的一些组播概念都是限制在一个域内的(所谓域,可以简单的理解为ISP),如果要实现跨域组播,假设两个ISP要实现组播网络的互通,一些新的问题就出来了,最突出的两个问题就是RP选择和RPF检查问题。目前情况下,要运行PIM协议,必须有一个全局的RP,这个RP完成数据源的注册和数据接收端的分发。一般情况下,每个ISP都有

自己的RP路由器,而每个RP路由器仅仅知道自己内部的数据源和数据接收端,而实际情况是,一个ISP内的用户可能接收另外一个ISP内的组播数据流,而另外一个ISP内的组播数据源对本ISP的RP来说是未知的,MSDP协议就是为解决这个问题而提出来的。 MSDP的基本思路是,让ISP之间的RP路由器互相建立一个信令连接(MSDP连接,就是一个TCP连接),每当ISP内的数据源发送数据的时候,该ISP内的RP路由器通过这个信令连接通知其它ISP内的RP,其它ISP内的RP再通知数据接收端,这样数据接收端就知道了一个组播数据源的IP地址,于是就可以采用源组播树的方式完成组播数据的接收了。具体细节可以参考有关书籍,限于篇幅,在这里不做具体介绍。

另外一个问题就是RPF检查问题了,考虑下面的网络图:

ISP1和ISP2通过两条高速链路连接起来,这时,ISP2想让单播数据走连接1,而想让多播数据走连接2。因为PIM是基于单播路由表来进行RPF检查的,这样如果不对用于RPF检查的路由和用于单播数据发送的路由进行区分的话,就没法做到这一点。而传统的BGP无法完成这样的要求,所以必须采用扩展BGP,即MBGP(多协议BGP,在多播领域可以成为多播BGP)。 采用多播BGP后,BGP连接在传输路由时,会把单播路由跟多播路由分开(通过在BGP协议中引入特殊属性解决),这样另外的ISP在接收到BGP邻居发送过来的路由后,就会把用于组播RPF检查的路由跟用于单播数据转发的路由区分开。

一个重要的概念就是,MBGP传播的路由仅仅用于组播路由器的RPF检查,MBGP不为组播数据转发提供任何支持。

第四章 相关资料列表

前面部分我们仅仅介绍了组播的一些基础概念,这些概念是深入学习组播技术的基础,只有掌握了这些基础概念,才有基础去学习其它一些组播知识,当然,只要把这些基础概念理解透彻了,其它组播技术学习起来也就简单了。

为了方便大家进一步学习,在这里我们给出一些资料,并给出这些资料的主要内容,希望给大家提供帮助。 1。 多点广播路由协议概述

一篇组播路由协议入门文章,介绍了组播路由协议(特别是PIM-DM,PIM-SM)的基础概念和运行过程,建议阅读

2。 The_Interdomain_Solutions_with_MSDP

用于域间的组播解决方案,使用了MSDP和MBGP协议作为解决方案,很有代表性 3。 Ip_Multicast_Protocol_Overview

组播路由协议概述,写的很不错,值得阅读

联系合同范文客服:xxxxx#qq.com(#替换为@)