组播原理详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
精心整理
组播原理
第一章?概?述
随着数据通信技术的不断发展,各项基于数据通信技术的业务层出不穷,FTP ,HTTP ,SMTP 等传统的数据通信业务已经不能满足人们对信息的需求,视频点播,远程教学,新闻发布,网络电视等新型业务也逐渐发展起来,并被引入数据通信网络。
这些新型业务的特点是,有一个服务器(我们把这个服务器称为媒体流服务器)在发布信息,而接收端数量很大,可能有成千上万个,而且具体数目不固定。
在这种方式下,我们可以使用传统12312在这个时候,我们自然而然的想起了组播。
这种技术最适合上面的这些新型业务。
因为组播通信有下列优点:
1。
媒体流服务器不必知道某个客户端的存在,它只管把媒体流以组播
地址播放出去即可,而且仅仅播放一份;
2。
媒体流数据在网上仅仅传送一份即可,即使有成千上万个客户端;
3。
客户端不必向媒体流服务器注册,如果想接收某个媒体流服务器的
数据,仅仅加入该媒体流服务器所播放的数据所在的多播组即可。
组播技术从提出到现在,它的一些标准和技术已经相当完善了,但推广还不是十分广泛,尤其是在我国,人们对组播的认识还处于一个朦胧的阶段,更谈不上规模应用。
为了让大家尽快的了解组播技术,我们在本文中给出一些学习指引,主要有下列内容:
1。
组播基础概念,这些概念是深入学习组播的最基础的东西,如果对这些基础概念不了解,学习组播将是一句空话;
2。
流行组播协议,在文中我们不具体分析哪种组播协议,而给出组播协议的一些共性,并列举了目前比较流行的组播协议和它的应用场合;
3。
也可以
第二章?二层组播基础概念
在前面的介绍中,我们讨论了用多播的方式解决新型流媒体业务的好处,在该部分中,我们结合一个实际的网络给出一些多播的基础概念,掌握这些基础概念是深入掌握多播技术的前提。
2.1网络实例
有下面一个网络需求:
在图中,媒体流服务器通过以太网交换机LSWA,跟核心路由器GSRA连接起来,并启动流媒体进程,不断的以多播IP地址发送媒体流。
GSRA和GSRB之间采用以太网连接起来,GSRB 通过以太网交换机LSWB连接了许多终端,其中两台终端需要媒体流服务器播放的媒体流。
2.2组播
IP地址就
IP地址
IP地址即主机
1。
2。
IP模块维护一张接收列表(该列表是IP地址组成的结合),每当接收到一个数据报(链路层送上来的)后,便把数据报的目的IP地址提取出来,然后跟接收列表中的每个IP地址比较,如果有一项匹配,则接收该数据,并向上层传送,否则丢弃;
3。
如果一台主机想加入一个多播组(加入与否由上层应用决定),比如你想看网络电视频道,这时候你需要启动一个应用程序,并告诉该应用程序网络电视频道的组播IP地址,该应用程序就会向IP模块注册,请求加入组播组。
IP模块于是在自己维护的接收列表里添加一项(同时也告诉数据链路层自己加入了一个组播组,并附带上组播组地址),添加的这项就是组播组的组播IP地址。
这样每当接收到目的地址是该组播IP地址的数据报的时候,IP模块就接收下来,并向上层传送。
4。
如果一台主机想退出组播组,比如你终止了电视频道接收程序,于是该程序在退出的时候会告诉IP模块,自己不再接收组播组的数据,并告诉IP模块组播组的组拨IP地址,于是IP模块就把该组播地址从接收列表中删除,这样以后如果再接收到该组播组的数据报的话,因为接收列表里没有匹配的项目,所以IP模块就丢弃该数据报。
经过上面的分析可以看出,问题的关键在于IP模块维护的接收列表。
通常情况下(主机没有加入任何组播组),该列表里只有两项,即主机自己的IP地址和广播IP地址(),这样主机只能接收针对自己的数据报和广播数据报。
细心的读者可以看出一个问题,就是数据链路层如何接收组播数据帧呢?原来,数据链路层的接收过程跟IP层原理一致,即数据链路层也有自己的接收列表(不过该列表的内容不是IP地址,而是MAC地址),每当IP模块收到上层应用的加入组播组的请求之后,IP模块就会向数据链路
地址进行
地址跟
做一个IP
MAC地
IP地址低23
开始的时候,PCB和PCC都没有接收该数据流,于是在PCB,PCC的数据链路层和网络层的接收列表中都没有针对组播地址的接收项,从而当数据链路层接收到一个数据帧,该该数据帧的目的MAC地址是01--00--5E--0A--0A--0A的时候,因为接收列表中没有该地址,所以在数据链路层就被丢弃(到这里,读者应该能体会到,组播数据在数据链路层就可以被隔离,而广播数据则必须到达网络层才能判断出是否需要丢弃,这也是使用组播而不使用广播的最大好处)。
这时候,假设PCB计算机的一个用户想收看网络电视频道了,于是该用户启动一个程序(比如,WINDOWS平台下的WMPLAYER),并告诉该程序接收组播组的数据流。
于是发生下列事情:
1。
该应用程序通过操作系统调用接口(API函数)告诉该PC机的IP模块,自己想接收组播组的数据(也就是说要加入组播组);
2。
IP模块接收到该加入请求后,便把组播组地址加入自己的接收列表中,同时向数据链路层发送一个请求,告诉数据链路层自己想接收组对应的数据流;
3。
数据链路层接收到IP模块的这个请求后,根据组播MAC地址跟组播IP地址的影射规则,把组播IP地址影射成组播MAC地址01--00--5E--0A--0A--0A,然后加入自己的接收列表,到此动作完成。
完成上述动作后,PCB就可以接收组播组的数据流了。
如果这时候用户不想继续看网络电视了(比如用户关闭应用程序),则应用程序在退出的时候会通知网络层,自己退出组播组了,于是网络层会把自己的接收列表中项删除,并通知数据链路层删除相应的列表项目。
到此为止,我们对组播IP地址跟组播MAC地址做了个详细的介绍,并详细分析了各个协议
书籍。
2.3
PCA所在
在接收
则仅仅向
{目的CAM表,
MAC 地址可能是
转发项(
发组播数据流,这样PCC就不能收到无用的数据流了。
这时候假设PCC也加入了组播组,于是交换机修改自己的转发表,把转发项
(01--00--5E--0A--0A--0A,{B})修改成(01--00--5E--0A--0A--0A,{B,C})(假设PCC连接交换机的C端口),这样每当交换机从PCA接收到一个数据帧,就根据这个转发项,复制成两份,一份给PCB,一份给PCC。
大家对交换机上的组播转发项已经很清楚了,这时候又一个问题出现了:交换机根据什么创建组播转发项,并对组播转发项的出口集合做出修改?回忆单播的情况下,交换机是根据学习来获得单播转发表的,在组播情况下,学习能否奏效?
其实在组播情况下,学习是不行的,因为在单播情况下的学习,是针对数据帧的源MAC地址进行的,而组播MAC地址不可能出现在数据帧的源MAC地址位置上(组播MAC地址出现的唯一位置就是数据帧的目的MAC地址),所以根本无法学习。
这时候我们必须想一些其他办法来解决该问题,这些办法就是二层组播协议。
第一种办法,也是最容易理解的办法就是GMRP(通用组播注册协议),该协议需要计算机的网卡的配合。
该协议这样运行,每当计算机加入一个多播组的时候,计算机同时给交换机发送一条GMRP加入消息,该消息携带的内容之一就是计算机加入的组播组的MAC地址。
这样交换机会根据不同的情况而采取不同的动作:
1。
如果交换机上没有创建针对该组播MAC地址的转发项,则创建一个转发项,把出口集合初始化为连接发出请求的计算机的端口,以后就根据这个转发项进行数据转发;
2
所谓
这些数据数据流,
询消息是路由器发出,用来查询网络上是否还有某个组播组的成员的。
以上图为例,分析一下IGMP 协议的运行过程:
1。
本地网络上的一台主机加入了一个多播组G,于是该主机发出一个IGMP加入消息给路由器,告诉路由器自己想加入组播组G,于是路由器开始从上游引入组播组G的数据到本地网络;
2。
路由器转发组播组G的数据一段时间后,会发出一个查询消息,看网络上是否还存在组播组G的成员(因为有可能刚才加入的那台主机已经退出组播组了),加入组播组的成员要重新发布IGMP加入消息来作为成员查询消息的响应,如果没有组播组的成员了,路由器将收不到响应,这时候路由器将再次进行查询尝试,如果还没有主机应答,路由器就认为网络上已经没有针对组播组G的主机了,于是停止转发组播组G的数据;
3。
路由器发出组播组成员查询消息后,只要收到一台主机的响应,则路由器就必须继续转发组播组G的数据,不能因为网络上接收端的数目少而停止发送。
这样IGMP协议就很清楚了,我们来看一下IGMP窥探协议是怎样工作的。
IGMP窥探是这样的,交换机分析每个接收到的组播数据帧(IGMP加入消息是以组播方式发送的),看该数据正是否是一个IGMP加入消息,如果是,则从该消息中就可以判断出发出该消息的主机想加入的组播组,根据该组播组的IP地址形成组播MAC地址,并把接收到该消息的端口加入出口列表,这样一个组播转发项就创建完成了。
完成之后,交换机把刚才拦截的IGMP消息再不加改变的转发出去。
这样不停的窥探,交换机就可以掌握网络上的组播成员情况,并反映在自己内部的组播转发表里,以后就根据创建的组播转
IGMP
应该对
第三章?三层组播基础概念
在前面部分的介绍中,我们集中在了对二层组播基础概念的介绍上,在本章中,我们引入一些三层组播的基础概念,在这些概念的基础上,简单介绍目前流行的组播路由协议(注意跟二层组播协议的区分)原理及应用场合,使读者对这些协议有个大致的了解,并为以后详细学习这些组播路由协议打下基础。
3.1组播转发项,组播树和RPF检查
为了引入这些概念,我们首先看一个实际的网络图:
在该图中,路由器MR1连接了一台多播数据源,该数据源不停的播放多播数据,MR2和MR3
MR1,...}),其中S
}是一个
IP
在把
形中,路由器),MR2
RPF(反
路由器MR
并进行转发呢?如果MR把两个组播数据流都进行转发,肯定是不合适的,假设组播数据流是一个电视频道,这样必然引起图象的重复出现,严重影响画面。
于是我们可以这样选择:选择一个组播流,该组播流从组播源到路由器经过的路径最短。
比如在上面的网络中,我们让路由器MR选择从接口S0进入的组播流,因为S0直接连接了组播数据源,而S1的组播数据源则经过了另外一台路由器。
然而路由器怎样知道从哪个接口进入的数据流是最近的呢?答案是查找单播路由表。
到此为止,大家对RPF检查的背景一定有印象了,下面我们给出RPF检查的定义:支持组播的路由器每当接收到一个组播数据报,首先把组播数据报的源IP地址提取出来,然后根据这个源
IP地址查自己的单播路由表,查找的结果是一个接口,如果该接口跟接收到报文的接口相同,则根据多播转发表来转发该组播数据报,如果不相同,则丢弃该组播数据报。
RPF检查是三层组播中一个最重要的特性,正是它的存在,才把组播转发表和单播转发表结合了起来,在进行组播数据转发的时候,把单播转发表作为参考依据。
而且RPF检查确保了到达的数据流不会重复,也确保了到达的数据流对网络的影响最小(因为数据流是通过最短的路径过来的)。
3.2组播路由协议
在上面我们介绍了组播转发表的概念,组播路由器在进行组播数据的转发的时候,就是依该转发表为基础来进行数据转发的,需要注意的是,在进行组播数据转发的时候,还需要做一个重要的动作:
目前
上接收到在MR
因为MR
当MR路由器流。
RT1RT1
了解了剪枝消息后,嫁接消息就很简单了,它跟剪枝消息刚好相反,是用来通知上游路由器,让上游路由器把组播数据转发给自己,比如,在上面的图形中,MR路由器的接口S0由于某种原因DOWN掉了,这时候MR路由器会通过S1接口给上游路由器发送一个嫁接消息,接收到该嫁接消息后,RT1路由器回重新发组播数据流给MR路由器(通过在多播转发表中把连接MR路由器的接口加入出口集合来实现),这样在MR上会通过S1接收到组播数据流,这时候MR上进行RPF检查就不会失败了,因为S0接口DOWN掉,通往媒体流服务器的单播路由项会自动的切换到S1接口上(通过动态路由协议完成)。
其实,组播路由协议可以理解为剪枝和嫁接消息的集合,任何组播路由协议都是由这两个消息作为基础的,只不过不同的路由协议发出该消息的时机不同罢了。
上面介绍的时候,提到了RPF检查,并提到,RPF检查需要路由器的单播路由表,这个说法严格来说其实是不正确的,因为要分两种情况:对于某些协议(比如PIM-DM,PIM-SM等),这些协议在进行RPF检查的时候直接使用路由器用于转发单播数据的路由表,即这些协议信任路由器的单播路由协议,这种多播协议叫做协议无关多播协议(也就是PIM的由来,即ProtocolIndependMulticastProtocol),还有一些协议,比如DVMRP等,它们在进行RPF检查的时候,是根据自己建立的一个单播路由表进行的,所有这些多播路由协议至少有两部分构成:一部分用于单播路由表的建立(该单播路由表跟路由器用来转发单播数据的路由表不同,它仅仅用于RPF 检查),另外一部分用于组播路由表的建立。
比如DVMRP,它实际上集成了一个RIP模块,使用该RIP模块来建立用于RPF检查的单播路由表。
下面我们看一下PIM协议,PIM(协议无关多播路由协议)分为DM(密集模式)和SM(稀疏模式),密集模式往往用于一些企业网等网络带宽资源比较丰富的场合下,而稀疏模式则用于网
当MR2
是3
如果
MR2
MR2
的向
程度,则转换为源组播树来完成组播数据的转发。
在这里,我们简单介绍一下共享组播树的含义,至于在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}),这样当接收到媒体流服务器发送过来的组播数据流后,就根据该转发项进行转发(这里需要提出的是,如果路由器接收到一个组播数据报,然而自己组播转发表内没有关于该组播数据报的转发项的话,丢弃收到的组播数据报)。
3.3
就是RP,这个RP RP
另外一个MSDP
就是一个TCP
知其它
据源的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。
3。