宋慧乔和陈乔恩:组播协议和组播路由 来自

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 09:26:16
组播协议和组播路由  2010-07-07 23:07 加入收藏
  • 转发分享
    人人网
    开心网
    新浪微博
    搜狐博客
    百度收藏
    谷歌收藏
    qq书签
    豆瓣
    淘江湖
    Facebook
    Twitter
    Digg
    Yahoo!Bookmarks

一、什么是组播

1. 什么是组播?

组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。

2. 组播如何进行工作?

组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台源主 机发出目的地址是以上范围组播地址的报文,在网络中,如果有其他主机对于这个组的报文有兴趣的,可以申请加入这个组,并可以接受这个组,而其他不是这个组 的成员是无法接受到这个组的报文的。

3. 组播和单播的区别?

为了让网络中的多个主机可以同时接受到相同的报文,如果采用单播的方式,那么源主机必须不停的产生多个相同的报文来进行发送,对于一些对时延很敏感 的数据,在源主机要产生多个相同的数据报文后,在产生第二个数据报文,这通常是无法容忍的。而且对于一台主机来说,同时不停的产生一个报文来说也是一个很 大的负担。

如果采用组播的方式,源主机可以只需要发送一个报文就可以到达每个需要接受的主机上,这中间还要取决于路由器对组员和组关系的维护和选择。

4. 组播和广播的区别?

如同上个例子,当有多台主机想要接收相同的报文,广播采用的方式是把报文传送到局域网内每个主机上,不管这个主机是否对报文感兴趣。这样做就会造成 了带宽的浪费和主机的资源浪费。而组播有一套对组员和组之间关系维护的机制,可以明确的知道在某个子网中,是否有主机对这类组播报文感兴趣,如果没有就不 会把报文进行转发,并会通知上游路由器不要再转发这类报文到下游路由器上。

二、组播协议的要素

通过和广播,单播的数据传输方式的比较,我们可以发现组播中最关键的两个部分:

1. 组的管理和维护

在组播这套协议中,在网络设备和所连接的子网需要有一套协议或机制来保证网络设备知道所连接的子网中,有多少台主机属于一个特定的组。

2. 组播报文的路由

要组播路由协议有什么用?

(1)是发现上游接口,离源最近的接口。因为组播路由协议只关心到源的最短路径。

(2)通过(S,G)对来决定真正的下游接口,当所有的路由器都知道了他们的上下游接口,那么一颗多播树就已经建立完成。根是源主机直连的路由器, 而树枝是通过IGMP发现有组员的子网直连的路由器 (转载注明出处n et130)

(3)管理多播树

单播路由只需要知道下一跳的地址,就可以进行报文得转发。而组播,是把从一个由源产生得报文发送给一组目的。在一个特定的路由器上,一个包得多个备 份可能从多个接口上发出。如果有环路得存在,那么一个或多个包会返回到其输入的接口,而且这个包也会经复制 发到其他的端口上。这一结果可能导致多播风暴,这个包不断在路由器与交换机间复制,直到TTL减为0。由于这是个复制过程,它的危害会比单播环路严重的 多,所以所有的多播路由器必须知道多播包的源,并且需要保证多播包不能从源接口发出。所以他必须知道哪些是上游接口和下游接口,可以分辨出 数据包的流向。如果在不是在源的上游接口收到数据包,就会把它丢弃掉。而多播路由协议必须关心到源的最短路径,或者说它关心到源的上游接口。同时,除了关 心上游接口,但是在转发的时候,不能把数据包从除了上游接口的其他接口发送出去。所以,另外,他还要关心(S,G)下游接口。当关于一个(S,G)的上下 游接口都被判断出来了,那么一颗多播树就形成了。

稀疏和密集模式的比较?

什么是稀疏模式?它是指在一个整体网络中,参与组播的主机相对来少的一种拓扑,主要出现在WAN中。

什么是密集模式?和以上相反,主要出现在交换式LAN或校园网中

隐式加入和显示加入的比较?

组员可以在多播会话存活的时候,加入或退出一个组,而其相连的路由器必须动态的根据直连子网内组员的存在或退出来决定要加入或剪除多播树的树枝。这 就是通过显式或隐式加入两种方式来完成。

隐式加入试用于密集模式,它是采用广播/剪除模式来去除多播树上的没有组播成员的树枝,也就是说,它是通过先把网际网络上的所有路由器都加入到多播 树上,然后由每个路由器通过IGMP来查询是否有组员在直连的子网上,如果没有,就发出一条剪除消息,来剪除多余的树枝。

显示加入适用于稀疏模式,它是由每个路由器先查询子网内有无组员,然后才看是否要发 加入信息给上游路由器。

基于源的树和共享树的比较?

基于源的树是针对一个源就会有一颗多播树构成,也就说,如果网络中有多个可以产生组播报文的源主机,那么就会有多少颗组播树组成,在组播表里,会有 组数×每组的成员数的项目条数。这种拓扑主要适用于密集模式。

共享树是在整个网络中选一个RP,或叫集中点,所有的组播报文都需要从这个点来进行传送,所以它没有(S,G)项,只有(*,G)项,表明所有有多 个源。RP是预先设定的一个路由器,承担转发所有的多播报文的责任。所有要发送组播报文的源主机在发送组播报文前,都需要到RP上进行注册,然后通过直连 的路由器来确定到RP的最短路径,通过RP路由器来确定到目的地的最短路径。RP成为了多播树的根结点。

相对于基于源的树,共享树的多播表项更为精简,适合在稀疏模式下使用。但是也有一些缺点。共享树在RP上的选择,会导致从源主机到各个组地址的路由 并非最优路径。

如果在整个局域网里同时有多条耗带宽的组播链路,会导致RP成为整个网络的瓶颈。并且在共享树中,采用选取RP来转发组播报文,会增加产生单点故障 的可能。

三、如何来维护组成员

现在有IGMP和CGMP(Cisco专有的)两种协议,可以进行主机和网络设备之间的组员关系的维护。

IGMP是路由器和内部子网之间通信的方式,也就是说它是三层设备对直连子网的组关系 的维护机制。它可以分成两个部分,主机部分和路由器部分,每个部分可以完成不同的工作。但是它有一个限制,就是IGMP报文只能在本地子网内传送,使三层设备不能前转到其他的设备上,它的TTL总是1。

IGMPv2主机部分的功能:

运行IGMPv2的主机会产生以下3种信息:

* Member Report消息

用来指示一台主机想要加入一个组播组,这个消息在一个主机第一次加入组的时候会发出,也可以用来响应三层设备发出Membership Query消息。由于Membership Query消息的目的地址是组地址,除了路由器,网内其他的组 员主机都会收到这个报文,一旦其他主机收到报文,他们将会抑制自己的Membership Query报文,避免了内部局域网充斥了Membership Query报文。它只需要让路由器知道网内还有一个组员。

* Version 1 Membership Report消息

是为了IGMPv2主机的向后兼容性,用于检测和支持子网中IGMPv1主机和路由器   (转载注明出处n et130)

* Leave Group消息

主机发出的,目的地址为224.0.0.2(所有路由器),告诉路由器主机离开了一个组。

IGMPv2路由器功能:

主要是查询功能,它会有两种查询报文,General Query和Group-Specific Query

General Query每隔一段时间就会向局域网内发送,目的地址是224.0.0.1(网内所有主机),所以子网里的每一个主机都会收到这个报文,并 且会以Member Report报文回应,如果在一定的时间间隔内设备没有收到任何Member Report,它就会认为子网内没有组员。

Group-Specific Query报文,当路由器收到一个Leave Group报文的时候,它会发送这样一个具体包含有组地址的报文来查询这个组是否有组成员存在。

当如果在一个子网上同时有两个多播路由器,他们一开始都会认为自己是组播成员的查询者,当他们发送General Query报文时,通过比较从对端收到的报文源IP地址的大小来决定谁是查询者谁不是查询者,IP地址大的 成为查询者。如果在一段时间内没有收到查询的报文,就会认为查询者down掉了,它就会充当起查询者的角色。

CGMP(Cisco专有)

考虑到了如果有交换机存在的情况,考虑到了在三层设备和主机中有二层设备,而IGMP是一个三层协议,二层设备如果收到这样一个类型的报文,只会向 除了源端口以外的所有端口进行转发,这样会对网络的带宽和整体性能造成影响。解决的方法是希望交换机可以对有组播成员的端口进行组播报文的转发。

在交换式网络上,对组播流的控制有三种方法:

(1)手工配置的交换式多播树

在交换机的桥接表上配置静态的组播MAC地址和端口映射。

(2)GMRP(802.1p)

他让MAC层的多播组地址动态地在交换机上注册和取消。

(3)IGMP侦听

通过在交换机端口上配置,可以使交换机进行IGMP消息地检查,可以知道多播路由器和组员地位置。但是,检测IGMP消息意味着所有地IP包都要进 行检查。尤其当这些如果是在软件地方式来实施,会严重降低交换机的性能。

CGMP的做法是通过路由器来告诉交换机,组播成员的组MAC地址和主机MAC地址,让交换机可以知道在那个端口上有组员,并且可以进行转发。

四、组播报文如何来进行路由

现下常用的组播路由协议有一下几种,由于现 在主流的路由器产品只支持Pim,其他的路由器协议都不支持,所以只会对PIM做个详细的解释。

DVMRP         它是通过RIP来发现到源的最短路径,采用广播/剪除的方式来构建一颗多播树。

MOSPF         它是通过OSPF协议来发现到源的最短路径,也是用在密集方式的拓扑下。

CBT         是一个与协议无关的,基于稀疏模式的,共享树协议。他和DVMRP和MOSPF的区别有两点:它无需要在组播中在加入一个路由协议,可以在现有的任何协议 上查找到到源的最短路径;它是基于共享树的协议,所以必须要在网络里设置一个网络的核心来确保组播包的前转;更适合使用在稀疏模式下。

PIM-DM         它是个与协议无关的组播协议,同时又是基于密集拓扑的组播协议。采用广播/剪除的方法来进行多播树的构造。

功能:

* 通过交换Hello报文发现邻居

* 当单播路由发生变化时,重新计算RPF接口

* 在多路访问的网络中选举指定路由器

* 在多路访问的网络中使用剪除覆盖

* 在多路访问的网络中用Assert消息选举指定前转器

其中会产生一下5中PIMv2消息:

* Hello

周期性地发送用来发现PIM邻居。和OSPF中的Hello报文有着类似点,如果没有在一定的时间内收到,就会认为邻居已经死亡。

* Join/Prune

这是一个合成的报文,其中有要加入组播树的路由器信息,也有要被剪除路由器信息,都会在这样一个报文里列出来。

当源在发送多播报文的时候,PIM-DM用扩散与剪除的方式建立多播树。那些没有组员连接的路由器通过发送Prune消息可以把自己变成处于剪除状 态。

当处在剪除状态的路由器,它收到了所直连的子网所发出的IGMP加入信息,就会发出这样一个join的报文给上游路由器,通知列出了需要加入多播树 的子网列表。

* Graft

当一个下游路由器发送给上游路由器一个Prune报文时,上游路由器不会马上把通告的子网从多播前转表中删除,而是会等待一段时间,如果下游路由器 所直连的子网又要加入多播树时,需要发出一个Graft报文,通知上游路由器来加入多播树。   (转载注明出处n et130)

* Graft-Ack

上游路由器收到一个Graft信息,必须要回一个Ack信息,这样才会使下游路由器接受组播报文

* Assert

当有两台设备同时连在同一个广播网络上,并且有相同的上游路由器接口,如果两台路由器同时负责前转多播报文的话,会造成网络资源的浪费,所以需要可 以在两台路由器中选出一个来作为唯一的前转报文路由器,Assert报文就是在两个路由器中互相通信,选出一个前转器的报文,通过优先权值,IP地址等参 数来协商前转器。

PIM-SM

采用共享树的拓扑方式,建立起多播树。使用显示加入的方式来加入多播树。

查找汇聚点:

* 自举协议

* 自动RP协议

* 静态设置

PIM-SM和共享树:

PIM-SM由于是单向传输协议,所以组播流量只能从RP向外发送,而不能向RP发送,而源是通过把组播报文封装在PIM Register报文里,发送RP接口,然后再由RP进行剥头,对其中的组播报文进行处理。如果组播报文比较多,通过封装Register报文对设备来说 是一种负担,所以可以在RP和源之间建立一个基于源的树,进行源到RP的组播报文传送。

PIM-SM和最短路径树

在大型网络中,共享树的路径未必是最短路径,PIM-SM可以通过在源和目的地之间建立一个基于源的树实现最短路径的传送。

IP组播技术在视频中的应用

同单播(unicast)或广播(broadcast)相比,组播效率非常高,因为任何给定的链路至多用一次,可以节省网络带宽和资源。我们以一个 例子来说明,如图1所示,建立一个视频服务器和远端网络的通信,网络中有N个用户,对于一个全动全屏图像,一个视频信息流需要占用1.5Mbps的带宽。

  图 1 单播和组播网络的视频信息传输

  一个单播(unicast)环境里,视频服务器依次送出N个信息流,由网络中的用户接收,共需要1.5M*Nbps的带宽;如果服务器处于 10M的以太网内,6—7个信息流就占满了带宽;若在一个高速的以太网里,最多只能容纳250—300个1.5Mbps的视频流,所以服务器与主机接口间 的容量是一个巨大的瓶颈。

  在一个组播(multicast)环境里,不论网络中的用户数目有多少,服务器发出的一个视频 流,由网络中的路由器或交换器同时复制出N个视频流,广播到每个用户,仅需1.5Mbps的带宽。

  可见,IP组播能够有效地节省网络带宽和资源,管理网络的增容和控制开销,大大减轻发送服务器的负荷,达到发送信息的高性能。

  

 


2.2.2组播地址的划分
整个 IP 组播地址的空间划分如下图所示。

 


其中:
224.0.0.0 到 224.0.0.255 地址范围被 IANA 预留,地址 224.0.0.0 保留不做分配,其它地址供路由协议及拓扑查找和维护协议使用。该范围内的地址属于局部范畴,不论生存时间字段(TTL)值是多少,都不会被路由器转发;

224.0.1.0 到 238.255.255.255 地址范围作为用户组播地址,在全网范围内有效。其中233/8 为 GLOP地址。GLOP 是一种自治系统之间的组播地址分配机制,将 AS 号直接填入组播地址的中间两个字节中,每个自治系统都可以得到 255个组播地址;

239.0.0.0 到 239.255.255.255 地址范围为本地管理组播地址(administratively scoped addresses),仅在特定的本地范围内有效。

当 IP 层收到组播数据报文时,根据组播目的地址查找组播转发表,对报文进行转发。

2.2.3IP 组播地址到 MAC 地址的映射
IANA 将 MAC 地址范围 01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF分配给组播使用,这就要求将28位的 IP 组播地址空间映射到 23 位的 MAC 地址空间中,具体的映射方法是将组播地址中的低 23位放入 MAC 地址的低 23 位,如下图所示。

 


由于 IP 组播地址的后 28 位中只有 23 位被映射到 MAC 地址,这样会有 32 个 IP 组播地址映射到同一 MAC地址上。

2、实现IP组播的前提条件
实现IP组播传输,组播源和接收者以及两者之间的下层网络都必须支持组播。即主机的TCP/IP实现支持发送 和接收IP组播;主机的网络接口支持组播;有一套用于加入、离开、查询的组管理协议,即IGMP(v1,v2);有一套IP地址分配策略,并能将第三层 IP组播地址映射到第二层MAC地址;支持IP组播的应用软件;所有介于组播源和接收者之间的路由器、交换机均需支持组播;Cisco的路由器不仅支持 DVMRP、PIM路由协议、IGMP组管理协议,而且支持Cisco专有Cisco组管理协议CGMP,对 于不支持IP组播传输的中间路由器采用IP隧道(Tunneling)技术作为过渡方案。

三、组播的实现


在IP组播技术中有四个方面的问题:首先是发送给谁的问题、其次是接收方如何接收组播信息、第三是用户主机如何通知路由器对 某个组不再感兴趣、第四是路由器如何转发组播信息。


1、组播地址分配与MAC地址


在组播通信中,我们需要两种地址:一个IP组播地址 和一个Ethernet组播地址。其中,IP组播地址标识一个组播组。由于所有IP数据包都封装在Ethernet帧中,所以还需要一个组播 Ethernet地址。为使组播正常工作,主机应能同时接收单播和组播数据,这意味着主机需要多个IP和Ethernet地址。IP地址方案专门为组播划 出一个地址范围,在IPv4中为D类地址,范围是224.0.0.0到239.255.255.255,并将D类地址划分为局部链接组播地址、预留组播地 址、管理权限组播地址。


局部链接地址:224.0.0.0~224.0.0.255,用于局域网,路由器不转发属于此范围的IP包;


预 留组播地址:224.0.1.0~238.255.255.255,用于全球范围或网络协议;


管理权限地 址:239.0.0.0~239.255.255.255,组织内部使用,用于限制组播范围;


以太网组播MAC地址映射方法: IP组播帧都使用以0X0100.5EXX.XXXX的24位前缀开始的MAC层地址,但只有其中的一半MAC地址可以被IP组播使用,剩下的MAC地址 空间的23位作为第三层IP组播地址进入第二层MAC地址的映射使用。

由于第三层IP组播的28位地址不能 映射到只有23位的可用MAC地址空间,造成有32:1的地址不明确,所以主机CPU必须对收到的每一个组播数据包做出判断。这增加了主机CPU的开销。

此 外,还产生抑制第二层局域网交换的组播扩散问题。


2、组管理协议IGMP


主机使用IGMP通知子网组播路由器,希望加入组播组;路由器 使用IGMP查询本地子网中是否有属于某个组播组的主机。


1)加入组播组


当某个主机加入某一个组播组时,它通过“成员资格报告”消息 通知它所在的IP子网的组播路由器,同时将自己的IP模块做相应的准备,以便开始接收来自该组播组传来的数据。如果这台主机是它所在的IP子网中第一台加 入该组播组的主机,通过路由信息的交换,组播路由器加入组播分布树。


加入之后,接收方主机的网络接口卡开始侦听与组播组地址相关的组播MAC地 址,路由器把发送方的信息包一跳一跳地发送到有接受者的网段上去,局域网路由器根据信息包中的组地址转换成与之相关的MAC地址,接收方侦听到这个地址, 收到信息包后,将IP层的组播数据包取出传向上层。


2)退出组播组


在IGMP v1中,当主机离开某一个组播组时,它将自行退出。组播路由器定时使用“成员资格查询” 消息向IP子网中的所有主机的组地址(224.0.0.1)查询,如果某一组播组在IP子网中已经没有任何成员,那么组播路由器在确认这一事件后,将不再 在子网中转发该组播组的数据。与此同时,通过路由信息交换,从特定的组播组分布树中删除相应的组播路由器。这种不通知任何人而悄悄离开的方法,使得组播路 由器知道IP子网中已经没有任何成员的事件延时了一段时间,在IGMP v2.0中,当每一个主机离开某一个组播组时,需要通知子网组播路由器,组播路由器立即向IP子网中的所有组播组询问,从而减少了系统处理停止组播的延 时。


3、组播转发


1)逆向路径转发(Reverse Path Forward: RPF)


当组播数据包到达路由器时,路由 器作RPF检查,以决定是否转发或抛弃该数据包,若成功则转发,否则抛弃。RPF检查过程如下:


检查数据包的源地址,以确定该数据包经过的接 口,是否在从源到此的路径上;


若数据包是从可返回源主机的接口上到达,则RPF检查成功,转发该数据包到输出接口表上的所有接口,否则RPF检 查失败,抛弃该数据包。


2)组播转发缓存


对于每一个输入组播数据包进行RPF检查会导致较大的路由器性能损失。因此,建立组播转发缓存 时,通常由组播路由确定RPF接口。然后将RPF接口变成组播转发缓存项的输入接口。一旦RPF检查程序使用的路由表发生变化,必须重新计算RPF接口; 并更新组播转发缓存项。


3)TTL阈值


每当路由器转发组播数据包,IP包中的TTL(Time To Live)值都减1。若数据包的TTL减少到0,则路由器将抛弃该数据包。TTL阈值可用于组播路由器的各个接口,以防止在该接口上转发低于TTL阈值的 组播数据包。这样可对组播的范围加以控制。


4)管理权限边界


除TTL阈值外,组播提供另一种称为管理权限的地址机制作为边界,以限制组 播信息转发到域外。管理权限的组播地址是从239.0.0.0到239.255.255.255,这段地址被认为是本地分配(类似于单播中的 192.168.xx.xx),不能用于Internet。这种机制使得在Intranet内部可重复使用组播地址,提高组播地址空间的利用率。


4、 组播树


在单播模型中,数据包通过网络沿着单一路径从源主机向目标主机传递,但在组播模型中,组播源向某一组地址传递数据包,而这一地址却代表一 个主机组。为了向所有接收者传递数据,一般采用组播分布树描述IP组播在网络里经过的路径。


组播分布树有两种基本类型 有源树和共享树。


1) 有源树


有源树也称为基于信源的树或最短路径树(Shortest Path Tree:SPT)。它是以组播源为根构造的从根到所有接收者路径都最短的分布树。如果组中有多个组播源,则必须为每个组播源构造一棵组播树。由于不同组 播源发出的数据包被分散到各自分离的组播树上,因此采用SPT有利于网络中数据流量的均衡。同时,因为从组播源到每个接收者的路径最短,所以端到端 (end-to-end)的时延性能较好,有利于流量大、时延性能要求较高的实时媒体应用。SPT的缺点是:要为每个组播源构造各自的分布树,当数据流量 不大时,构造SPT的开销相对较大。


2)共享树


共享树也称RP树(RPT),是指为每个组播组选定一个共用根(汇合点RP或核心), 以RP为根建立的组播树。同一组播组的组播源将所要组播的数据单播到RP,再由RP向其它成员转发。目前,讨论最多同时也是最具代表性的两种共享树是 Steiner树和有核树(CBT)。


共享树在路由器所需存储的状态信息的数量和路由树的总代价两个方面具有较好的性能。当组的规模较大,而每 个成员的数据发送率较低时,使用共享树比较适合。但当通信量大时,使用共享树将导致流量集中及根(RP)附近的瓶颈。