饱食之国:有没有做算法的人?最短路径树SPT有哪些算法?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/04 19:47:43
除了Dijkstra算法还有哪些?
不要列举单源单目或all pairs的或动态更新的算法,
就要单源的SPT的最基本计算算法。

IP 组播技术实现了 IP 网络中点到多点的高效数据传送。因为组播能够有效地节约网络带宽、降低网络负载,所以在实时数据传送、多媒体会议、数据拷贝、游戏和仿真等诸多方面都有广泛的应用。本文介绍了组播的基本概念和目前通用的组播协议,以及组播组网的基本方案;并针对组播业务需求和运营过程中面临的问题,提出了电信级的可运营、可管理的“受控组播”解决方案,包括信源管理、用户管理和组播安全控制等方面的内容。

关键词
组播 运营管理 受控组播 IGMP DVMRP PIM-SM PIM-DM MBGP MSDP

1 组播概述
1.1组播技术的产生原因
传统的IP通信有两种方式:第一种是在一台源 IP 主机和一台目的 IP 主机之间进行,即单播(unicast);第二种是在一台源 IP 主机和网络中所有其它的 IP 主机之间进行,即广播(broadcast)。如果要将信息发送给网络中的多个主机而非所有主机,则要么采用广播方式,要么由源主机分别向网络中的多台目标主机以单播方式发送 IP 包。采用广播方式实现时,不仅会将信息发送给不需要的主机而浪费带宽,也可能由于路由回环引起严重的广播风暴;采用单播方式实现时,由于 IP 包的重复发送会白白浪费掉大量带宽,也增加了服务器的负载。所以,传统的单播和广播通信方式不能有效地解决单点发送多点接收的问题。

IP 组播是指在 IP 网络中将数据包以尽力传送(best-effort)的形式发送到网络中的某个确定节点子集,这个子集称为组播组(multicast group)。IP 组播的基本思想是,源主机只发送一份数据,这份数据中的目的地址为组播组地址;组播组中的所有接收者都可接收到同样的数据拷贝,并且只有组播组内的主机(目标主机)可以接收该数据,网络中其它主机不能收到。组播组用 D 类 IP 地址(224.0.0.0 ~ 239.255.255.255)来标识。

1.2组播技术的市场前景
IP 组播技术有效地解决了单点发送多点接收的问题,实现了 IP 网络中点到多点的高效数据传送,能够大量节约网络带宽、降低网络负载。作为一种与单播和广播并列的通信方式,组播的意义不仅在于此。更重要的是,可以利用网络的组播特性方便地提供一些新的增值业务,包括在线直播、网络电视、远程教育、远程医疗、网络电台、实时视频会议等互联网的信息服务领域。

组播从 1988 年提出到现在已经经历了十几年的发展,许多国际组织对组播的技术研究和业务开展进行了大量的工作。随着互联网建设的迅猛发展和新业务的不断推出,组播也必将走向成熟。尽管目前端到端的全球组播业务还未大规模开展起来,但是具备组播能力的网络数目在增加。一些主要的 ISP 已运行域间组播路由协议进行组播路由的交换,形成组播对等体。在 IP 网络中多媒体业务日渐增多的情况下,组播有着巨大的市场潜力,组播业务也将逐渐得到推广和普及。

2 组播技术的基本原理
组播技术涵盖的内容相当丰富,从地址分配、组成员管理,到组播报文转发、路由建立、可靠性等诸多方面。下面首先介绍组播协议体系的整体结构,之后从组播地址、组播成员管理、组播报文转发、域内组播路由和域间组播路由等几个方面介绍有代表性的协议和机制。

2.1组播协议体系结构
根据协议的作用范围,组播协议分为主机-路由器之间的协议,即组播成员管理协议,以及路由器-路由器之间协议,主要是各种路由协议。组成员关系协议包括 IGMP(互连网组管理协议);组播路由协议又分为域内组播路由协议及域间组播路由协议两类。域内组播路由协议包括 PIM-SM、PIM-DM、DVMRP 等协议,域间组播路由协议包括 MBGP、MSDP 等协议。同时为了有效抑制组播数据在二层网络中的扩散,引入了 IGMP Snooping 等二层组播协议。

通过 IGMP 和二层组播协议,在路由器和交换机中建立起直联网段内的组成员关系信息,具体地说,就是哪个接口下有哪个组播组的成员。域内组播路由协议根据 IGMP 维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树,在路由器中建立组播路由状态,路由器根据这些状态进行组播数据包转发。域间组播路由协议根据网络中配置的域间组播路由策略,在各自治系统(AS,Autonomous System)间发布具有组播能力的路由信息以及组播源信息,使组播数据能在域间进行转发。

2.2组播地址机制
2.2.1组播IP地址
IP组播地址用于标识一个 IP 组播组。IANA 把 D 类地址空间分配给组播使用,范围从 224.0.0.0 到 239.255.255.255。如下图所示(二进制表示),IP 组播地址前四位均为“1110”。

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 地址范围为本地管理组播地址(***istratively 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.3组播成员管理
2.3.1IGMP ( Internet Group Management Protocol )
IGMP 协议运行于主机和与主机直接相连的组播路由器之间,IGMP 实现的功能是双向的:一方面,通过 IGMP 协议,主机通知本地路由器希望加入并接收某个特定组播组的信息;另一方面,路由器通过 IGMP 协议周期性地查询局域网内某个已知组的成员是否处于活动状态(即该网段是否仍有属于某个组播组的成员),实现所连网络组成员关系的收集与维护。通过 IGMP,在路由器中记录的信息是某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。

到目前为止,IGMP 有三个版本。IGMPv1(RFC1112)中定义了基本的组成员查询和报告过程;目前通用的是 IGMPv2,由 RFC2236 定义,在 IGMPv1 的基础上添加了组成员快速离开的机制;IGMPv3 中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。以下着重介绍 IGMPv2 协议的原理。

IGMPv2 的原理如下图所示:

当同一个网段内有多个组播路由器时,IGMPv2 通过查询器选举机制从中选举出唯一的查询器。查询器周期性地发送通用组查询消息进行成员关系查询;主机发送报告消息来响应查询。主机发送报告消息的时间有随机性,当检测到同一网段内有其它成员发送同样的消息时,则抑制自己的响应报文。如果有新的主机要加入组播组,不必等待查询器的查询消息,而是主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。对于作为组成员的路由器而言,其行为和普通的主机一样,响应其它路由器的查询。

通过上述机制,在组播路由器里建立起一张表,其中记录了路由器的各个接口所对应的子网上都有哪些组的成员。当路由器接收到某个组 G 的数据报文后,只向那些有 G 的成员的接口上转发数据报文。至于数据报文在路由器之间如何转发则由路由协议决定,不是 IGMP 协议的功能。

2.3.2二层环境中组成员管理的实现
IGMP 组播成员管理机制是针对第三层设计的,在第三层,路由器可以对组播报文的转发进行控制,只要进行适当的接口配置和对 TTL 值的检测就可以了。但是在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里。如果不对二层设备进行相应的配置,则组播报文就会转发给二层交换设备的所有接口,这显然会浪费大量的系统资源。IGMP 监听(IGMP Snooping)可以解决这个问题。

IGMP 监听的工作原理如下:

主机发出 IGMP 成员报告消息,这个消息是给路由器的;在 IGMP 成员报告经过交换机时,交换机对这个消息进行监听并记录下来,形成组成员和接口的对应关系;

交换机在收到组播数据报文时,根据组成员和接口的对应关系,仅向具有组成员的接口转发组播报文。

IGMP 监听可以解决二层环境中的组播报文泛滥问题,但要求交换机具有提取第三层信息的功能;其次,要求交换机对所有的组播报文进行监听和解读,这会产生很多的无效工作;此外,组播报文监听和解读工作也会占用大量的 CPU 处理时间。

2.4组播报文转发
与单播报文的转发相比,组播报文的转发相对复杂。一方面,组播路由类型与单播路由不同,是点到多点的一棵路由树;另一方面组播报文转发的处理过程也有所不同。

2.4.1组播路由的分类
组播路由可以分为两大类:信源树(Source Tree)和共享树(Shared Tree)。信源树是指以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树。由于信源树使用的是从组播源到接收者的最短路径,因此也称为最短路径树(shor*** path tree,SPT)。对于某个组,网络要为任何一个向该组发送报文的组播源建立一棵树。 共享树以某个路由器作为路由树的树根,该路由器称为汇集点(Rendezvous Point,RP),将 RP 到所有接收者的最短路结合起来构成转发树。使用共享树时,对应某个组,网络中只有一棵树。所有的组播源和接收者都使用这棵树来收发报文,组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者。

信源树的优点是能构造组播源和接收者之间的最短路径,使端到端的延迟达到最小;但是付出的代价是,在路由器中必须为每个组播源保存路由信息,这样会占用大量的系统资源,路由表的规模也比较大。共享树的最大优点是路由器中保留的状态数可以很少,缺点是组播源发出的报文要先经过 RP,再到达接收者,经由的路径通常并非最短,而且对 RP 的可靠性和处理能力要求很高。

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

RPF 执行过程中会用到原有的单播路由表以确定上游和下游的邻接结点。只有当报文是从上游邻接结点对应的接口(称作 RPF 接口)到达时,才向下游转发。RPF 的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的环路,环路避免在组播路由中是一个非常重要的问题。RPF 的主体是 RPF 检查,路由器收到组播报文后,先对报文进行 RPF 检查,只有检查通过才转发,否则丢弃。RPF 检查过程如下:

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

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

3)否则,丢弃该报文。

2.5域内组播路由协议
与单播路由一样,组播路由也分为域内和域间两大类。域内组播路由目前已经讨论的相当成熟,在众多的域内路由协议中,DVMRP(距离矢量组播路由协议)、PIM-DM(密集模式协议无关组播)和PIM-SM(稀疏模式协议无关组播)是目前应用最多的协议。

2.5.1DVMRP(Distance Vector Multicast Routing Protocol)
DVMRP 是第一个在 MBONE 上得到普遍使用的组播路由协议,它在 RIP 协议的基础上扩充了支持组播的功能。DVMRP 协议首先通过发送探测消息来进行邻居发现,之后通过路由交换来进行单播寻径和确定上下游依赖关系。

DVMRP 采用逆向路径组播(RPM)算法进行组播转发。当组播源第一次发送组播报文时,使用截断逆向路径组播(truncated RPM)算法沿着源的组播分发树向下转发组播报文。当叶子路由器不再需要组播数据包时,它朝着组播源发送剪枝消息,对组播分发树进行剪枝,借此除不必要的通信量。上游路由器收到剪枝消息后将收到此消息的接口置为剪枝状态,停止转发数据。剪枝状态关联着超时定时器,当定时器超时时,剪枝状态又重新变为转发状态,组播数据再次沿着这些分支流下。另外,当剪枝区域内出现了组播组成员时,为了减少反应时间,下游不必等待上游剪枝状态超时,而是主动向上游发送嫁接报文,以使剪枝状态变为转发状态。可见,DVMRP 是由数据触发驱动,建立组播路由表,而路由树的建立过程可以概括为“扩散与剪枝”(Broadcast and Prune)。转发特点可以概括为“被动接受,主动退出”。

另外,在多路访问网络中,当有两个或多个的组播路由器时,网络上可能会重复转发包。为了防止这种情况出现,在多路访问网络上,DVMRP 为每个源选择了一个唯一的转发器。

2.5.2PIM-DM(Protocol Independent Multicast Dense Mode)
在 PIM-DM 域中,运行 PIM-DM 协议的路由器周期性的发送 Hello 消息,发现邻接的 PIM 路由器,进行叶子网络、叶子路由器的判断,并且负责在多路访问网络中选举指定路由器(DR)。

PIM-DM 协议使用下面的假设:当组播源开始发送组播数据时,域内所有的网络节点都需要接收数据,因此采用“扩散-剪枝”的方式进行组播数据包的转发。组播源开始发送数据时,沿途路由器向除组播源对应的 RPF 接口之外的所有接口转发组播数据包。这样,PIM-DM 域中所有网络节点都会收到这些组播数据包。为了完成组播转发,沿途的路由器需要为组 G 和源 S 创建相应的组播路由项 (S, G)。 (S, G) 路由项包括组播源地址、组播组地址、入接口、出接口列表、定时器和标志等。

如果网络中某区域没有组播组成员,该区域内的路由器会发送剪枝消息,将通往该区域的转发接口剪枝,并且建立剪枝状态。剪枝状态对应着超时定时器。当定时器超时时,剪枝状态又重新变为转发状态,组播数据得以再次沿着这些分支流下。另外,剪枝状态包含组播源和组播组的信息。当剪枝区域内出现了组播组成员时,为了减少反应时间,协议不必等待上游剪枝状态超时,而是主动向上游发送嫁接报文,以使剪枝状态变为转发状态。

2.5.3PIM-SM(Protocol Independent Multicast Sparse Mode)
在 PIM-SM 域中,运行 PIM-SM 协议的路由器周期性的发送 Hello 消息,用以发现邻接的 PIM 路由器,并且负责在多路访问网络中进行 DR 的选举。这里,DR 负责为与其直连的组成员向组播树根节点的方向发送“加入/剪枝”消息,或是将直连组播源的数据发向组播分发树。

PIM-SM 通过建立组播分发树来进行组播数据包的转发。组播分发树分为两种:以组 G 的 RP 为根的共享树和以组播源为根的最短路径树。PIM-SM 通过显式的加入/剪枝机制来完成组播分发树的建立与维护。

PIM-SM 中还涉及到 RP 的选择机制。在 PIM-SM 域内配置了一个或多个候选自举路由器(Candidate-BSR)。使用一定的规则从中选出自举路由器 (BSR) 。PIM-SM 域中还配置有候选 RP 路由器(Candidate-RP),这些候选 RP 将包含了它们地址及可以服务的组播组等信息的报文单播发送给自举路由器,再由 BSR 定期生成包括一系列候选 RP 以及相应的组地址的“自举”消息。“自举”消息在整个域中逐跳发送。路由器接收并保存这些“自举”消息。若 DR 从直连主机收到了 IGMP 加入报文后,如果它没有这个组的路由项,将使用 hash 算法将组地址映射到一个候选 RP。然后朝 RP 方向逐跳组播“加入/剪枝”消息。若 DR 从直连主机收到组播数据包,如果它没有这个组的路由项,也将使用 hash 算法将组地址映射到一个候选 RP,然后将组播数据封装在注册消息中单播发送到 RP。

在多路访问网络中,PIM-SM 还引入了以下机制:使用断言机制选举唯一的转发者,以防向同一网段重复转发组播数据包;使用加入/剪枝抑制机制减少冗余的加入/剪枝消息;使用剪枝否决机制否决不应有的剪枝行为。

2.6域间组播路由协议
域间组播目前仍然处于研究和试验阶段,目前比较成型的解决方案是下面三个协议的组合:

MBGP(组播边界网关协议),用于在自治域之间交换组播路由信息;MSDP(组播信源发现协议),用于在 ISP 之间交换组播信源信息;PIM-SM,用作域内的组播路由协议。

PIM-SM 前文已经介绍,这里重点介绍 MBGP 和 MSDP,以及 PIM-SM / MBGP / MSDP 组合方案的工作过程。

2.6.1MBGP(MultiProtocol Border Gateway Protocol)
域间路由的首要问题是路由信息(或者说可达信息)如何在自治系统之间传递,由于不同的 AS 可能属于不同的运营商,因此除了距离信息外,域间路由信息必须包含运营商的策略,这是与域内路由信息的不同之处。

目前使用最多的域间单播路由协议是 BGP-4。为了实现域间组播路由信息的传递,必须对 BGP 进行改动,因为组播的网络拓扑和单播拓扑有可能不同。这里既有物理方面的原因,也有策略方面的原因。网络中的一些路由器可能只支持单播不支持组播,也可能按照策略配置不转发组播报文。为了构造域间组播路由树,除了要知道单播路由信息外,还要知道网络中哪些部分是支持组播的,即组播的网络拓扑情况。简而言之,域间的组播路由信息交换协议应该满足下面的要求:

能对单播和组播拓扑进行区分;

有一套稳定的对等和策略控制方法。

BGP-4 已经满足后一个条件,而且已经被证明是一个有效的、稳定的单播域间路由协议,因此合理的解决方案是对 BGP-4 协议进行增强和扩展,而不是构建一套全新的协议。在 RFC2858 中规定了对 BGP 进行多协议扩展的方法,扩展后的 BGP 协议(MBGP,也写作 BGP-4+)不仅能携带 IPv4 单播路由信息,也能携带其它网络层协议(如组播、IPv6 等)的路由信息,携带组播路由信息只是其中一个扩展功能。

有了 MBGP 之后,单播和组播路由信息可以通过同一个进程交换,但是存放在不同的路由表里。由于 MBGP 是 BGP-4 协议的一个增强版,因此 BGP-4 所支持的常见的策略和配置方法都可以用到组播里。

2.6.2MSDP(Multicast Source Discovery Protocol)
对于 ISP 来说,不希望依靠竞争对手的 RP 转发组播流量,但同时又要求无论信源的 RP 在哪里,都能从信源获取信息发给自己内部的成员。MSDP 就是为了解决这个问题而提出的。在 MSDP 里使用的是域间信源树而不是公共树,而且要求域内组播路由协议必须是 PIM-SM。

在 MSDP 中,某个域内的 RP 使用 TCP 连接与其它域内的 RP 建立 MSDP 对等关系,用这些对等关系交换信源信息。如果本地的接收者要接收其它域的信源发出的报文,则使用与 PIM-SM 中同样的方法构造信源树。

PIM-SM / MBGP / MSDP 组合方案实际上是 PIM-SM 协议在域间环境下的扩展。如果把整个 PIM-SM / MBGP / MSDP 组合方案机制看作 PIM-SM,则所有域的 RP 的集合就是 PIM-SM 协议中的“RP”,而 PIM-SM / MBGP / MSDP 无非是增加了两个过程:

1、信源信息在 RP 集合中的泛滥,以实现信源和成员在“RP”点的会合;

2、域间组播路由信息的传递,目的是保证组播报文在域间的顺利转发。在上述过程中,AS3 中的 RP 和收端向 AS2 中的远端建立逆向路径的过程中都需要用到 MBGP 传递的组播拓扑信息。

IP 组播技术实现了 IP 网络中点到多点的高效数据传送。因为组播能够有效地节约网络带宽、降低网络负载,所以在实时数据传送、多媒体会议、数据拷贝、游戏和仿真等诸多方面都有广泛的应用。本文介绍了组播的基本概念和目前通用的组播协议,以及组播组网的基本方案;并针对组播业务需求和运营过程中面临的问题,提出了电信级的可运营、可管理的“受控组播”解决方案,包括信源管理、用户管理和组播安全控制等方面的内容。

按时的

弗洛伊德算法~~

在这来问SPT的算法,也是没谁了,去看RFC,看PIM-DM定义的基本计算算法