当前位置:文档之家› 组播原理详解

组播原理详解

组播原理第一章概述随着数据通信技术的不断发展,各项基于数据通信技术的业务层出不穷,FTP,HTTP,SMTP等传统的数据通信业务已经不能满足人们对信息的需求,视频点播,远程教学,新闻发布,网络电视等新型业务也逐渐发展起来,并被引入数据通信网络。

这些新型业务的特点是,有一个服务器(我们把这个服务器称为媒体流服务器)在发布信息,而接收端数量很大,可能有成千上万个,而且具体数目不固定。

在这种方式下,我们可以使用传统的客户服务器(C/S )模型解决,按照下面的思路:1。

在媒体流服务器上启动媒体流播放进程,作为服务器;2。

客户端每当想接受某个媒体流服务器的数据的时候,通过给出该媒体流服务器的IP 地址,来跟该媒体流服务器建立连接(比如,TCP连接等);3。

媒体流服务器维护一个客户列表,采用轮循的方式向每个客户发送媒体流。

可以看出,这样的解决方案有两个缺陷:1。

客户数目很大的时候,媒体流服务器就有可能承受不了,因为这种媒体流跟传统的窄带业务(比如HTTP等)不同,它需要很高的带宽来传输,而且服务器还必须维护每个客户的信息;2。

严重浪费网络资源,相同的数据可能在网上传播了很多次,在一些带宽较低的链路上,可能引起严重的通信瓶径。

在这个时候,我们自然而然的想起了组播。

这种技术最适合上面的这些新型业务。

因为组播通信有下列优点:1。

媒体流服务器不必知道某个客户端的存在,它只管把媒体流以组播地址播放出去即可,而且仅仅播放一份;2。

媒体流数据在网上仅仅传送一份即可,即使有成千上万个客户端;3。

客户端不必向媒体流服务器注册,如果想接收某个媒体流服务器的数据,仅仅加入该媒体流服务器所播放的数据所在的多播组即可。

组播技术从提出到现在,它的一些标准和技术已经相当完善了,但推广还不是十分广泛,尤其是在我国,人们对组播的认识还处于一个朦胧的阶段,更谈不上规模应用。

为了让大家尽快的了解组播技术,我们在本文中给出一些学习指引,主要有下列内容:1。

组播基础概念,这些概念是深入学习组播的最基础的东西,如果对这些基础概念不了解,学习组播将是一句空话;2。

流行组播协议,在文中我们不具体分析哪种组播协议,而给出组播协议的一些共性,并列举了目前比较流行的组播协议和它的应用场合;3。

列举了一些参考资料,这些资料按照不同的读者层次列举,既有面向组播专家的高级论题,也有面向初学者的入门文章。

总之,本文是面向组播初学者的,如果你从没有接触过组播技术,那么仔细的阅读本文并掌握介绍的一些基本概念,然后参考文中列举的其他文章,将会是一种良好的学习路径。

如果您是一位组播技术方面的专家,阅读本文也不无裨益,您可以从不同的角度来了解组播的基础概念,也可以参考文中提到的其他组播文章,相信对您也是有好处的。

第二章二层组播基础概念在前面的介绍中,我们讨论了用多播的方式解决新型流媒体业务的好处,在该部分中,我们结合一个实际的网络给出一些多播的基础概念,掌握这些基础概念是深入掌握多播技术的前提。

2.1网络实例有下面一个网络需求:在图中,媒体流服务器通过以太网交换机LSWA跟核心路由器GSR/连接起来,并启动流媒体进程,不断的以多播IP地址224.10.10.10 发送媒体流。

GSRA和GSRB>间采用以太网连接起来,GSRB1过以太网交换机LSWB连接了许多终端,其中两台终端需要媒体流服务器播放的媒体流。

下面我们仔细分析每一个步骤,在分析的过程中引入并介绍一些基础的组播概念。

2.2组播MAC地址和组播IP地址在前面的介绍中,我们提到了媒体流服务器不断的以多播IP地址224.10.10.10 发送媒体流,224.10.10.10 这个IP地址就是一个多播IP地址。

按照IP协议规定,位于224.0.0.1 —239.255.255.255 范围内的IP地址都是多播地址。

所谓多播地址,实际上是一个逻辑的概念,在网络上,没有一个计算机的IP地址是一个多播IP地址,多播IP地址仅仅代表了一个逻辑的组,加入该组的终端设备可以以该组所在的多播地址为目的IP地址来发送数据,这时候,发送的数据不是针对某个具体主机的,而是针对一组机器,想接收这个 多播数据流的计算机,只要倾听接收到的每个数据报,判断该数据报的目的IP 地址是不是组播组的IP 地址即可。

若是,则接收,否则丢弃。

为了更好的理解组播IP 地址的概念,我们举一个例子,如下面的网络图所示:主机A (最左边的一台计算机)不断的以组播IP 地址224.10.10.10 发送数据,这时候 主机B (中间计算机)想接收组播组 224.10.10.10 的数据,于是它就会监听每个收到的数据报,判断该数据报目的IP 地址是不是224.10.10.10,如果不是则丢弃,如果是则接收下 来送到上层处理。

这里牵涉到了一个问题:主机 B 的哪个模块判断接收到的数据报是不是组播数据报,并且是不是针对组 224.10.10.10的数据报?答案是主机B 的IP 模块。

我们看一下一台计算 机接收数据的过程:1。

数据链路层把接收到的数据帧剥掉链路层头后送给 收数据帧,在后面会详细探讨); 2。

IP 模块维护一张接收列表 (该列表是IP 地址组成的结合),每当接收到一个数据报 (链路层送上来的)后,便把数据报的目的 IP 地址提取出来,然后跟接收列表中的 每个 IP 地址比较,如果有一项匹配,则接收该数据,并向上层传送,否则丢弃;3。

如果一台主机想加入一个多播组(加入与否由上层应用决定),比如你想看网络电 视频道,这时候你需要启动一个应用程序, 并告诉该应用程序网络电视频道的组播 IP 地址,该应用程序就会向IP 模块注册,请求加入组播组。

IP 模块于是在自己维护的接收列表里添 加一项(同时也告诉数据链路层自己加入了一个组播组,并附带上组播组地址),添加的这 项就是组播组的组播IP 地址。

这样每当接收到目的地址是该组播 IP 地址的数据报的时候, IP 模块就接收下来,并向上层传送。

4。

如果一台主机想退出组播组,比如你终止了电视频道接收程序,于是该程序在退出的时候会告诉IP 模块,自己不再接收组播组的数据,并告诉IP 模块组播组的组拨IP 地址, 于是IP 模块就把该组播地址从接收列表中删除,这样以后如果再接收到该组播组的数据报 的话,因为接收列表里没有匹配的项目,所以IP 模块就丢弃该数据报。

经过上面的分析可以看出,问题的关键在于 IP 模块维护的接收列表。

通常情况下(主机没有加入任何组播组) ,该列表里只有两项,即主机自己的 IP 地址和广播 IP 地址 (255.255.255.255 ),这样主机只能接收针对自己的数据报和广播数据报。

IP 层(至于数据链路层怎样接细心的读者可以看出一个问题,就是数据链路层如何接收组播数据帧呢?原来,数据链路层的接收过程跟IP层原理一致,即数据链路层也有自己的接收列表(不过该列表的内容不是IP地址,而是MAC地址),每当IP模块收到上层应用的加入组播组的请求之后,IP模块就会向数据链路层通告(上面提到过),通告的时候携带了组播组的IP地址,于是数据链路层就会把IP地址进行适当的变换,变换的结果就是一个组播MAC地址,于是数据链路层把这个组播MAC地址插入自己的接收列表里面,以后每当有数据帧到来的时候,数据链路层就会把数据正的目的MAC地址跟接收列表里的每项内容进行比较,遇到任何匹配的一项就接收下来,并向IP层传送。

这样又引出了两个问题:数据链路层如何区分单播MAC地址跟组播MAC地址?数据链路层做一个IP地址跟组播MAC地址的影射,这个影射是怎样的?首先解释第一个,一般情况下,单播MAC地址的最高字节的最低比特为0,而组播MAC地址的最高字节的最低比特为1,如下所示:组播地址,第六个字节的第一位为1单播MAC地址£第六个字节的第一位为0这样数据链路层就可以根据该比特判断收到的数据帧是不是一个组播数据帧。

下图是第二个问题的答案:XXXXXXXX JXXXXXXXXXXXXXXXX XXXXXXXX■ ------------ 23hit ----------- *「V01-00-5E 胡XXXXXXXXXXXXXXXXXXXXXh ----- 2恥 -------,从可以看出,MAC地址跟IP地址的低23比特是对应的,比如IP模块告诉数据链路层软件,自己加入了一个组播组224.10.10.10 ,则数据链路层形成一个MAC地址01--00--5E--0A--0A--0A (取组播IP地址低23位,高位为上面介绍的规则),并加入接收地址列表中。

到此为止,我们分析了网络层和数据链路层对组播的处理过程,为了更加深理解,我们举一个实际中的例子,还是同样的网络拓扑:xxxxxxxmxxxxxxxxxxxxxxxxxxxxxx闫------ 23就-------- #U 1 r01-00-5E--0XXXXXXXXXXXXXXXXXXXXXk --------- 型t --------- .假设图中从左到右计算机依次叫做PCA PCB PCC并假设PCA上运行媒体流服务器发送程序,以组播地址224.10.10.10 来不停的发送电视频道数据流。

开始的时候,PCB和PCC都没有接收该数据流,于是在PCB PCC的数据链路层和网络层的接收列表中都没有针对224.10.10.10 组播地址的接收项,从而当数据链路层接收到一个数据帧,该该数据帧的目的MAC地址是01--00--5E--0A--0A--0A 的时候,因为接收列表中没有该地址,所以在数据链路层就被丢弃(到这里,读者应该能体会到,组播数据在数据链路层就可以被隔离,而广播数据则必须到达网络层才能判断出是否需要丢弃,这也是使用组播而不使用广播的最大好处)。

这时候,假设PCB计算机的一个用户想收看网络电视频道了,于是该用户启动一个程序(比如,WINDOW平台下的WMPLAYER并告诉该程序接收224.10.10.10 组播组的数据流。

于是发生下列事情:1。

该应用程序通过操作系统调用接口(API函数)告诉该PC机的IP模块,自己想接收224.10.10.10 组播组的数据(也就是说要加入组播组224.10.10.10 );2。

IP模块接收到该加入请求后,便把组播组地址224.10.10.10 加入自己的接收列表中,同时向数据链路层发送一个请求,告诉数据链路层自己想接收224.10.10.10 组对应的数据流;3。

数据链路层接收到IP模块的这个请求后,根据组播MAC地址跟组播IP地址的影射规则,把组播IP地址224.10.10.10 影射成组播MAC地址01--00--5E--0A--0A--0A ,然后加入自己的接收列表,至吐匕动作完成。

相关主题