路由选择协议—毕业设计.doc
1 路由协议介绍1.1 路由协议的概念路由器提供了将异构网互联的机制,实现将一个网络的数据包发送到另一个网络。而路由就是指导IP数据包发送的路径信息。路由协议就是在路由指导IP数据包发送过程中事先约定好的规定和标准。路由协议通过在路由器之间共享路由信息来支持可路由协议。路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。总之,路由协议创建了路由表,描述了网络拓扑结构;路由协议与路由协议协同工作,执行路由选择和数据包转发功能。路由选择协议是用来为各路由协议确定到达路径的,它包括RIP、IGRP、EIGRP、OSPF等,起到一个地图导航,负责找路的作用。它工作在传输层或应用层。路由选择协议主要是运行在路由器上的协议,主要用来进行路径选择。路由协议作为TCP/IP协议族中重要成员之一,其选路过程实现的好坏会影响整个Internet网络的效率。按应用范围的不同,路由协议可分为两类:在一个AS(Autonomous System,自治系统,指一个互连网络,就是把整个Internet划分为许多较小的网络单位,这些小的网络有权自主地决定在本系统中应采用何种路由选择协议)内的路由协议称为内部网关协议(interior gateway protocol),AS之间的路由协议称为外部网关协议(exterior gateway protocol)。这里网关是路由器的旧称。现在正在使用的内部网关路由协议有以下几种:RIP-1、RIP-2、IGRP、EIGRP、IS-IS和OSPF。其中前4种路由协议采用的是距离向量算法,IS-IS和OSPF采用的是链路状态算法。对于小型网络,采用基于距离向量算法的路由协议易于配置和管理,且应用较为广泛,但在面对大型网络时,不但其固有的环路问题变得更难解决,所占用的带宽也迅速增长,以至于网络无法承受。因此对于大型网络,采用链路状态算法的IS-IS和OSPF较为有效,并且得到了广泛的应用。IS-IS与OSPF在质量和性能上的差别并不大,但OSPF更适用于IP,较IS-IS更具有活力。IETF始终在致力于OSPF的改进工作,其修改节奏要比IS-IS快得多。这使得OSPF正在成为应用广泛的一种路由协议。现在,不论是传统的路由器设计,还是即将成为标准的MPLS(多协议标记交换),均将OSPF视为必不可少的路由协议。外部网关协议最初采用的是EGP。EGP是为一个简单的树形拓扑结构设计的,随着越来越多的用户和网络加入Internet,给EGP带来了很多的局限性。为了摆脱EGP的局限性,IETF边界网关协议工作组制定了标准的边界网关协议-BGP。1.2 路由协议分类根据数据流的类型,可分成单播路由协议Unicast Routing Protocol 和多播路由协议Multicast Routing Protocol。单播路由协议包括RIP、OSPF、IGRP、BGP、IS-IS等;多播路由协议包括DVMRP、PIM-SM、PIM-DM等。根据网络规模大小,单播路由协议可分域内路由协议IGP 和域外路由协议EGP,其中IGP有RIP、OSPF、IGRP、EIGRP、IS-IS 、EGP。从IGP和EGP的定义顾名思义EGP适用用与大型网络自治区域与自治区域之间,IGP适用于小型网络自治区域内部。根据寻径算法,单播路由协议可分成距离矢量协议Distance-Vcetor 和链接状态协议Link-State。距离矢量协议包括RIP、IGRP、EIGRP、BGP。其中BGP是距离矢量协议变种它是一种路径矢量协议,链接状态协议包括OSPF、IS-IS。距离矢量协议和链接状态协议的主要区别在于它们传送的内容距离矢量协议直接传送各自的路由表。各个路由器根据收到的路由表更新自己的路由表。每个路由器对整个网络拓扑不了解,它们只知道邻近的情况,而链接状态协议传送路由器之间的连接状态.这样每个路由器都知道整个网络拓扑结构路由。1.3 路由选择协议1.3.1 IP路由选择概述路由器将分组转发到目标网络,为此,它必须知道远程网络,并确定前往这些网络的路径。路由器知道与其接口直接相连的网络,它根据接口的配置地址和子网掩码确定接口的子网或网络号;然而对于不与其接口直接相连的网络,路由器必须依赖于外部信息。路由器获得远程网络的方式有两种:静态路由和动态路由。静态路由是需要管理员手工配置信息,网络在发生变化时需要管理员手工更新;而动态路由则是路由器从其他路由器获得信息,但是它需要占用网络带宽和路由器资源。本设计研究的OSPF协议属于动态路由协议。使用动态路由协议时,管理员要在每台路由器上配置路由选择协议,这样路由器之间便可以交换有关可达的网络的信息和每个网网络的状态。只有运行同一种路由选择协议的路由器之间才会交换信息。网络拓扑发生变化后,新信息将会动态的传遍整个网络,每个路由器都将更新其路由选择表,以反映变化后的拓扑。1.3.2 路由选择协议的比较表1.1 路由选择协议的管理距离路由来源管理距离直接接口0使用出站接口配置的静态路由0使用下一跳地址配置的静态路由1EIGRP汇总路由5外部BGP20内部EIGRP90IGRP100OSPF110IS-IS115RIPv1、RIPv2120外部网关协议140ODR160外部EIGRP170内部BGP200大多数路由选择协议的度量值结构算法都不与其他协议兼容,使用多种路由协议的网络必须能够无缝的交换路由信息,并能够从多种协议提供的路径中选择最佳路径,Cisco路由器将根据管理距离来选择最佳路径。管理路径指出了协议的可信度。对于Cisco路由器支持的每种路由选择协议都制定了一个默认管理距离。按可信度从高到低的顺序排列路由选择协议的优先顺序。表1.1列出了各协议的默认管理距离。管理距离越小,可信度越高。表1.2 路由选择协议的协议号、端口号和可靠性路由选择协议协议号端口号更新的可靠性IGRP9-尽力而为的传送EIGRP88-1-to-1窗口OSPF89-1-to-1窗口RIP-UDP 520尽力而为的传送BGP-TCP 179使用TCP窗口技术注:从Cisco IOS12.3版起不再支持IGRP,这里列出它旨在确保完整性。表1.3 路由选择协议之比较特征RIPv2EIGRPIS-ISOSPFBGP距离矢量链路状态要求采用分层拓扑自动路由汇总手工路由汇总支持VLSM无类度量值跳数复合度量值成本成本路径属性会聚速度慢非常快快快慢IGRP、EIGRP和OSPF都是运行在IP之上的传输层协议,而RIP和BGP都位于应用层中。RIP使用UDP作为传输协议,其更新是以尽力而为的方式传输,这是不可靠的。BGP使用传输控制协议(TCP)作为传输协议,它利用了TCP的可靠机制和窗口技术。表1.2列出了各种路由选择协议的协议号、端口号和可靠性。表1.3比较了各种路由选择协议的特征。1.3.3 选择协议RIP和OSPF的比较目前应用较多的路由协议有RIP和OSPF,它们同属于内部网关协议,但RIP是基于距离矢量算法,而OSPF基于链路状态的最短路径优先算法。它们在网络中利用的传输技术也不同。 RIP是利用UDP的520号端口进行传输,实现中利用套接口编程,而OSPF则直接在IP上进行传输,它的协议号为89。在RIP当中,所有的路由都由跳数来描述,到达目的地的路由最大不超过16跳,且只保留唯一的一条路由,这就限制了RIP的服务半径,即其只适用于小型的简单网络。同时,运行RIP的路由器需要定期地(一般30s)将自己的路由表广播到网络当中,达到对网络拓扑的聚合,这样不但聚合的速度慢而且极容易引起广播风暴、累加到无穷、路由环致命等问题。为此,OSPF应运而生。OSPF是基于链路状态的路由协议,它克服了RIP的许多缺陷: OSPF不再采用跳数的概念,而是根据接口的吞吐率、拥塞状况、往返时间、可靠性等实际链路的负载能力定出路由的代价。同时选择最短、最优路由并允许保持到达同一目标地址的多条路由,从而平衡网络负荷。 OSPF支持不同服务类型的不同代价,从而实现不同QoS的路由服务。 OSPF路由器不再交换路由表,而是同步各路由器对网络状态的认识,即链路状态数据库。然后通过Dijkstra最短路径算法计算出网络中各目的地址的最优路由。这样OSPF路由器间不需要定期地交换大量数据,而只是保持着一种连接,一旦有链路状态发生变化时,才通过组播方式对这一变化做出反应,这样不但减轻了不参与系统的负荷而且达到了对网络拓扑的快速聚会。而这些正是OSPF强大生命力和应用潜力的根本所在。2 OSPF协议基本原理和具体实现2.1 OSPF协议的基本概念OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS。它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息。OSPF路由器正是通过这个数据库计算出其OSPF路由表的。作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。2.1.1 OSPF工作原理分析 OSPF是一种分层次的路由协议,其层次中最大的实体是AS(自治系统),即遵循共同路由策略管理下的一部分网络实体。在每个AS中,将网络划分为不同的区域。每个区域都有自己特定的标识号。对于主干(backbone)区域,负责在区域之间分发链路状态信息。这种分层次的网络结构是根据OSPF的实际提出来的。当网络中自治系统非常大时,网络拓扑数据库的内容就更多,所以如果不分层次的话,一方面容易造成数据库溢出,另一方面当网络中某一链路状态发生变化时,会引起整个网络中每个节点都重新计算一遍自己的路由表,既浪费资源与时间,又会影响路由协议的性能(如聚合速度、稳定性、灵活性等)。因此,需要把自治系统划分为多个域,每个域内部维持本域一张唯一的拓扑结构图,且各域根据自己的拓扑图各自计算路由,区域边界路由器把各个域的内部路由总结后在域间扩散。这样,当网络中的某条链路状态发生变化时,此链路所在的域中的每个路由器重新计算本域路由表,而其它域中路由器只需修改其路由表中的相应条目而无须重新计算整个路由表,节省了计算路由表的时间。 OSPF由两个互相关联的主要部分组成:“呼叫”协议和“可靠泛洪”机制。呼叫协议检测邻居并维护邻接关系,可靠泛洪算法可以确保统一域中的所有的 OSPF路由器始终具有一致的链路状态数据库,而该数据库构成了对域的网络拓扑和链路状态的映射。链路状态数据库中每个条目称为LSA(链路状态通告),共有5种不同类型的LSA,路由器间交换信息时就是交换这些LSA。每个路由器都维护一个用于跟踪网络链路状态的数据库,然后各路由器的路由选择就是基于链路状态,通过Dijkstra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。最后再通过计算域间路由、自治系统外部路由确定完整的路由表。与此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。 OSPF的设计实现要涉及到指定路由器、备份指定路由器的选举、协议包的接收、发送、泛洪机制、路由表计算等一系列问题。2.1.2 Dijkstra算法Dijkstra算法是路由表计算的依据,通过Dijkstra算法可以得到有关网络节点的最短路径树,然后由最短路径优先树得到路由表。虽然最短路径优先算法 SPF是Dijkstra发明的,但是Dijkstra算法有时候被称为SPF算法。SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。在OSPF路由协议中,最短路径树的树干长度,即OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost,其算法为:Cost = 100×10/链路带宽。在这里,链路带宽以bps来表示。也就是说,OSPF的Cost 与链路的带宽成反比,带宽越高,Cost越小,表示OSPF到目的地的距离越近。举例来说,FDDI或快速以太网的Cost为1,2M串行链路的Cost为48,10M以太网的Cost为10等。(1) Dijkstra算法的描述 初始化集合E,使之只包含源节点S。并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O。 若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。 首先寻找列表O中的最短路径P,从O中删除P。设V为P的最终节点。若V已在集合E中,继续执行步骤2。否则,P为通往V的最短路径。将V从R移至E。 建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2。 (2) Dijkstra算法举例 Dijkstra算法的举例示意图如图2.1所示: 路由器H向路由器E发送通告,以表明自己的存在。路由器E将路由器H和自己的通告传递给邻居路由器C和G。路由器将这些通告和自己的通告传递给路由器D。依次类推。 这些LSA遵守水平分割规则,即路由器不应将LSA通告给提供该LSA的路由器。在这个例子中,路由器E不会讲路由器H的LSA再通告给路由器H。 路由器X有4台邻接路由器:A、B、C、D。它从这些路由器那里收到了网络中所有其它路由器的LSA。根据这些LSA,它能够推断出路由器之间的所有链路,并绘制出了如图2.1所示的路由连接情况。 图中每条快速以太网链路的OSPF成本都被设置为1。通过将前往每个目的地的成本相加,路由器可以推断出最佳路径。 图2.1中,右边是通过计算得到的最佳路径(SPF树)。根据这些最佳路径(用实线表示),将前往每台路由器连接的目标网络的路由加入到路由选择表中,并将相应的邻接路由器指定为下一跳地址。XCAFBDHGEXAECDHGFBSPF算法链路状态数据库最短路径邻接关系数据库X的邻居A、B、C、D转发路由表图2.1 SPF计算2.1.3 OSPF路由表的计算与实现有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路的存活时间、链路的类型以及下一跳等内容。关于整个计算的过程,主要由以下五个步骤来完成: 保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立路由表; 域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路由; 域间路由的计算,通过检查Summary-LSA来计算域间路由。若该路由器连到多个域,则只检查主干域的Summary-LSA; 查看Summary-LSA。在连到一个或多个传输域的域边界路由器中,通过检查该域内的Summary-LSA来检查是否有比第(2)(3)步更好的路径; AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外的路由。 通过以上步骤,OSPF生成了路由表。但这里的路由表还不同于路由器中实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种路由协议的学习。 2.1.4 OSPF的基本操作我们将整个OSPF路由协议的运行过程概括如下: 运行OSPF的路由单元在自身的所有启动了OSPF协议的端口发送 Hello协议分组。如果在同一数据链路上的两台路由器能够就Hello协议分组中包含的参数进行协商达成一致,它们之间就能成为neighbors。 邻接关系(Adjacencies)。我们可以将这种关系看作是虚拟的点到点链路,它形成于己经构成neighbor关系的路由器之间,取决于交换Hello协议分组的路由单元类型和端口目前所处于的网络类型。 每个路由单元都会与所有已经和它建立了邻接关系的路由单元交换链路状态公告(LSA)。LSA描述了所有路由单元的链接或接口,还包括这些链路的状态。这些链路可能连接到存根网络(Stub Network),也就是没有连接其它任何路由器或其它区域内的网络;甚至可能连接到路由域外。正是因为存在多种类型的链路信息,OSPF定义了多种LSA类型对它们进行描述。 每一个路由单元从它的邻接路由器那里收到一个LSA记录以后,会在将该记录存放到链路状态数据库中的同时将该LSA的副本发送给其它邻接路由器。 使用这种区域内洪泛LSA的机制,所有域内路由器都会拥有一致的链路状态数据库。 一旦数据库信息被收集完整,每一个路由单元都会独立运行.Dijkstra (最短路径优先)算法,以自己为生成树的根,为每一个目的网络计算出一条代价最低的无环路径,我们将计算的结果称为SPF生成树。 每个路由单元都根据自己计算得出的SPF生成树构建自身的路由表。当所有的链路状态信息被洪泛到本区域内的所有路由单元以后,也就是说,链路状态数据库在本区域内同步以后,下一步的任务就是建立路由表。我们可以看到,OSPF是一个“安静”的路由协议,一旦LSA数据库的同步被完成以后,在相邻路由器之间交换Hello协议单元作为链路存活信号,而对LSA来说,以30分钟作为更新周期。如果网络拓扑在此期间没有发生改变,就不会有任何其它路由协议相关事件产生。OPSF作为一种重要的内部网关协协议的普遍应用,极大地增强了网络的可扩展性和稳定性,同时也反映出了动态路由协议的强大功能。但是,在有关OSPF协议的研究、实现中尚存在一些问题,如数据库的溢出、度量的刻画、以及MTU协商等等。同时,在IPv6中,OSPFv3基于链路的处理机制、IP地址的变化、泛洪范围的增加、包格式、LSA的变化以及邻居的识别等技术都将是大家以后继续探讨的课题。2.1.5 OSPF路由协议封装数据包的型态OSPF路由协议定义了5种包封装的型态。Hello封装数据包用来维护相连路由器的关系与找寻相邻的路由器。Database-Description用来让2个路由器的网络拓扑数据库的的数据同步。Link State-Request封装数据包是当2个路由器拓扑结构数据库同步后,仍然有一些数据无法得知时,则运用此封装数据包要求得到这些数据。Link State Update是用来发送更新的LSA信息给其他路由器。Link State Acknowledge是当路由器收到更新的LSA后回应信息给产生LSA更新的路由器。表2.1 OSPF分组类型名称描述1Hello发现邻居并在它们之间建立邻接关系2数据库描述(DBD)检查路由器的数据库之间是否同步3链路状态请求向另一台路由器请求特定的链路状态记录4LSU发送请求的链路状态记录5LSAck对其他类型的分组进行确认表2.1中的5种OSPF分组都被直接封装到IP分组的有效负载中,OSPF分组不使用传输控制协议(TCP)和用户数据报协议(UDP)。OSPF要求使用可靠的分组传输机制,但由于没有使用TCP,OSPF将使用确认分组(5类OSPF分组)来实现自己的确认机制。表2.2给出了OSPF分组报头的格式。表2.2 OSPF分组报头的格式OSPF分组版本号类型分组长度路由器ID区域ID校验和身份验证类型身份验证数据版本号:用于OSPF第2版;分组类型:表2.1中的5种;分组长度:OSPF分组的长度,单位为字节;区域ID:指出分在来自哪个区域;校验和:用于分组报头错误检测,确保OSPF分组在传输过程中未受损;身份验证类型和身份验证在下文中会讲到。下面重点说明路由器ID。路由器ID是唯一地标识路由器的32位数字。默认情况下,如果没有手工配置环回接口或路由器ID,则将为活动接口的最大IP地址。这个路由器标识对于建立邻接关系和协调LSU交换很重要。在选举DR/BDR的过程中,如果OSPF优先级相同,则路由器ID将用于决定谁赢得选举。路由器ID一旦被设置便不会改变,即使其地址被用作路由器ID的接口关闭。仅当路由器重新启动或OSPF路由选择进程重新启动后,路由器ID才可能改变。因而它是的稳定性很高。2.1.6 链路状态通告(LSA)安全方面的考虑OSPF用IP报文直接封装协议报文,协议号为89。一个比较完整的OSPF报文如表2.3所示(以LSU为例):表2.3 OSPF报文IP头OSPF报文头LSA数目LSA头LSA数据一个OSPF的Link State Update封装数据包通常包含了一个或多个的LSA来描述网络上的一条或多条连接情况。LSA的表头主要有8部分,其表头如图2.2所示。为提高OSPF网络的安全性,我们将对其中2个可能遭受攻击的位进行说明。LS AgeOptionsLS TypeLink State IDLS AgeLS Sequence NumberLS ChecksumLength图2-2 LSA表头LSA的Age位:该位用来指示该LSA经过多长时间或是该LSA要被删除了。产生该LSA的路由器会将Age位设置为“0”。而每当经过一个路由器时,该路由器会将LSA的Age位加“1”后再往其他路由器发送。LSA的Age位会一直增加到一个最大值3600,此时收到LSA的Age位为最大值的路由器会根据收到的LSA,将LSA从路由器自己的网络拓扑数据库中移除掉。因此,路由器若想把某个由自己产生的LSA从自己的数据库与其他在相同区域的路由器数据库移除的话,只要送出一个最大值的LSA即可以将该LSA从区域中的所有路由器数据库中移除掉。而这样的行为即可以保持区域内所有路由器的数据库一致性的特质。LSA的Sequence Number位:这是当一个路由器收到多份相同的LSA时,可用来判断哪一个LSA是比较新的版本。LSA的Sequence Number位的最小值为0x80000001,最大值为0x7FFFFFFF。而0x80000000这个值由OSPF保留起来。当路由器产生一个比较新的LSA时,会根据之前产生的相同的LSA的Sequence Number再加一。这样,当一个路由器收到多份相同的LSA时,可利用Sequence Number的值来判断哪个LSA是比较新的版本。而当Sequence Number的值达到最大值0x7FFFFFFF时,产生该LSA的路由器若想再继续产生新的LSA时,会先针对该LSA发出Max Age的LSA,来让区域内所有的路由器先消除该LSA,之后再由最小值开始发出新的LSA。2.1.7 OSPF的特点OSPF协议(Open Shortest Path First,开放最短路径优先)是在1989年由互联网工程任务组(IETF)正式发布。它能有效地解决RIP和IGRP等距离矢量协议存在的缺陷具体优点如下: 收敛速度快:OSPF采用一种可靠的扩散(flooding)机制根据网络拓扑变化来更新邻居路由器。路由发生改变时只发送产生的路由更新信息。这两点再加上整个网络在 OSPF域中所有路由器上的拓扑都几乎完全一样的特点使得 OSPF在某条链路出现问题时能够比RIP和 IGRP更迅速的收敛。 支持VLSM、超网以及汇总功能:OSPF采用汇总功能和VLSM来节省地址空间能够更高效地进行路由。 存根区域路由:OSPF采用存根区域路由大大减小了路由表的规模。这也是 OSPF支持大型网络的一个原因。 基于路由代价(Cost)的可变度量:OSPF采用可变路由代价度量标准来决定路由选择。 支持类型 I和类型 II(MD5)的认证方式:OSPF能够通过类型 1的明文密码或是类型2的MD5加密认证方式来确保安全可靠的路由传输。2.2 OSPF汇总OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域” (Area),“主干”的部分称为“主干区域”。为了减少路由器在运行过程中传送流量、平衡数据的负担以及减少网络拓扑结构信息库的大小,OSPF路由协议选择了2种阶层的路由架构:第一种为区域路由架构,第二种为骨干路由架构。这2种架构都存在于网络的同一自治系统。而在OSPF系统中所谓的区域是一群网络、设备、路由器的集合。每一个区域都维持自己区域的连接状态。区域内部的路由器并不知道区域外部的网络拓扑,相对的区域外部的路由器也不知道区域内部的网络拓扑。这样的机制不仅仅减少选择路由时所需的传送流量、平衡数据的负担,以及减少网络拓扑结构信息库的大小,更能将网络架构受到的攻击限制在一个区域内的路由器上,而不会影响其他区域路由器的运行。所谓的骨干也可能是一群网络、设备、路由器的集合。但是骨干还具有帮助自治系统内其他区域路由器将数据包传送给另一个区域或另一个自治系统的功能。为了实现OSPF网络的优化性能,应该按区域对IP地址进行分组。当根据区域对IP地址进行适当分组后,OSPF汇总就非常灵活而且可以配置。OSPF汇总是手工过程。在一些协议中没有RIP V2或者EIGRP等协议中的“自动汇总”概念。“合法的”OSPF区域配置可以有如下特征: 单主网络号。 单固定掩码子网。 若干主网络号。 若干固定掩码子网。 主网络和不同主网络的子网的组合。 网络、固定和可变子网、特定主机地址的随即安排。在OSPF骨干区域当中,一个区域的所有地址都会被通告进来。但是如果某个子网忽好忽坏不稳定,那么在它每次改变状态的时候,都会引起LSA在整个网络中泛洪。为了解决这个问题,我们可以对网络地址进行汇总。OSPF汇总有两种类型:区域汇总和外部路由汇总。区域汇总就是区域之间的地址汇总,一般配置在ABR上;外部路由汇总就是一组外部路由通过重发布进入OSPF中,将这些外部路由进行汇总。一般配置在ASBR上。OSPF有两种汇总形式:一是将其他路由选择协议重分布进OSPF时对路由进行的汇总。另一种是对一个区域的汇总。这两种汇总方式都创建汇总LSA并发送到AREA0,骨干区域又会将链路状态发送到其他区域。2.2.1 地址空间分配以可控制的方式分配主机、子网、和网络是十分重要的。理想情况下,某区域的所有地址应该是连续的,以便汇总LSA可以尽可能有效地表示整个地址空间。地址快是按2的指数分配的,因此,可以用一个汇总链路通告代表一个地址块。可以在ABR上使用area area id range address mask命令,使用一个汇总链路通告来汇总连续的子网块。为了最小化汇总块的数目,可使每一块尽可能的大。汇总LSA可以代表整个区域的地址空间,它将传入到主干区域0。示例2.1显示了在ABR上使用一个汇总链路通告汇总连续子网块的路由器配置。示例2.1 在ABR上使用一个汇总链路通告来汇总子网 ! Router ospf 90 network 192.168.1.0.0.0.0.255 area 0 network 172.16.0.0.0.0.255.255 area 1 area 1 range 172.16.0.0.255.255.0.0 !当每个ABR上汇总了同一类地址,则每个区域的具体IP地址信息不会遍历主干网。只有汇总地址才会为每个区域跨越主干网络。对于OSPF我们推荐使用汇总方法实现大型网络设计的可缩放性,特别是国际OSPF网络设计(这种网络很容易出现错误的WAN链路,也就是说,链路很容易出现错误)。2.2.2 位分割 可使用位分割技术将一个主网络号划分为多个区域。位分割借用几个子网位来指定区域。当子网是按照连续块分组时,那么很容易实现位分割。要划分为两个区域,分割1位即可。而要划分为16个区域,则需分割4位。区域号是以点分表示法出现的,与子网号相似。事实上,与汇总通告对应的32位区号代表该区域。我们可称之为区域1,2,3,和4。如图2.3所示,如果将B类网络划分为16个区域,那么将得到: 范围掩码255.255.240.0区域位:4 子网掩码255.255.255.0总子网位:8区域子网位:4每个区域的子网:16 通告给主干网的地址为:1111111.11111111.11110000.00000000 区域中隐藏的地址位:000000000.00000000.00001111.11111111 区域0 or 0.0.0.0131.108.1.0131.108.2.0最多到131.108.15.0 第一个区域范围131.108.16.0131.108.17.0最多到131.108.31.0 第二个区域范围131.108.32.0131.108.33.0最多到131.108.47.0 第三个区域范围131.108.48.0131.108.49.0最多到131.108.63.0 第四个区域范围区域131.108.0.0区域131.108.16.0区域131.108.16.0区域131.108.48.0图2-3 位分割地址空间2.2.3 不连续子网当使用不同主网络号表示的一个或多个网段是分开的时,子网就会变得不连续。OSPF支持不连续的子网,因为子网掩码是LSDB(Link-state database,链路状态数据库)的一部分。主干区域0可以是C类地址,而所有其他区域(同以网络中的所有子网)可以是B类主网络的地址块。OSPF的优点在于,无论是否配置汇总,都可以支持不连续子网。原因在于一个子网可以包含多个区域中的组件(如C类)。由于LSDB包含掩码信息,所以,OSPF可以处理这个问题。但RIP、IGRRP都不能支持不连续子网。2.2.4 ABR上的汇总配置 主干网和其他区域之间的ABR合并区域之间的路由选择信息。这就意味着,一个范围内的具体路由信息并不进入网络主干中。注意:一个区域可以包含一个或者多个ABR(通常为冗余性而设计)。我们使用路由配置area area id range address mask命令来手工配置合并。如果ABR上没有配置汇总,所有具体的链路信息都传送到主干网络上,如果链路是翻转的,就产生LSA流,传送到主干网和自治系统,从而导致严重的通信量和路由器CPU开销。每个路由器必须计算SPF算法(此算法需要大量的CPU时间),从而每次在OSPF AS中的任何地方有链路状态改变时,都建立新的路由选择表。SPF hold time 命令限制了SPF算法的计算频率。默认情况下,SPF保持时间是10秒。在计算新的路由选择表之前,以10秒为周期收集LSA。即使在今天,仍然有许多网络未使用路由汇总技术。当发生链路翻转时,该设计就有可能导致网络灾难。总而言之,不使用路由汇总技术的OSPF网络是拙劣的设计。 如果正确配置了路由汇总,那么将会只要汇总链路LSA传入主干网。因为特定链路的改变不进入主干网,导致所有路由器重新使用SPF算法重新计算路由,所以对于可缩放性来说,这是很重要的。更多的使用汇总技术就意味着更高的稳定性。汇总是使用OSPF缩放任何大型网络的关键技术。所有区域内的OSPF路由器还可以看到链路状态,而域间OSPF路由器不能。2.2.5 ASBR的汇总配置正如ABR可以汇总内部OSPF网络一样,ASBR可以向AS中传入具体的外部链路或汇总外部链路。传入此路由的决策是通过是否将在ASBR上配置default-information originate 命令而确定的。通常如果只有一个ASBR,使用default-information originate可以汇总外部链路。示例2.2说明了重新分配给OSPF路由选择域的默认路由,其度量是50。 示例2.2重新分配给OSPF路由选择域的默认路由!router ospf 90 redistribute igrp 90 metric 50 subnets default information originate metric 50!如果有多个ASBR,就应该衡量一下了。用default-information originate命令,可以使进入到自治系统的外部路由选择信息最少。自治系统中的每一个路由器都使用最近的ASBR作为外部网关,因为特定的外部链路上没有完整的信息。 建议不要允许所有的Internet路由进入到你的网络,因为过多的路由选择表很容易使网络陷于瘫痪。如果有多个具有默认路由ASBR,由于并没有“具体的”路由,因此折中的结果是你可能遇到非最优路径。实际上,这样的折中也许不是“一件坏事”,但当路由汇总时,应该注意到这一点。注意:外部OSPF路由一次传输一个包。这使得LSA的泛洪要占用大量带宽。因此,建议传入默认路由,或者配置OSPF存根区域。2.3 OSPF区域及域间路由在 OSPF 路由协议的定义中,可以将一个路由域或者一个自治系统 AS 划分为几个区域。在 OSPF 中,由按照一定的 OSPF 路由法则组合在一起的一组网络或路由器的集合称为区域(AREA)。 OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域”(Area),“主干”的部分称为“主干区域”。在OSPF路由协议中,每一个区域中的路由器都按照该区域中定义的链路状态算法来计算网络拓扑结构,这意味着每一个区域都有着该区域独立的网络拓扑数据库及网络拓扑图。对于每一个区域,其网络拓扑结构在区域外是不可见的,同样,在每一个区域中的路由器对其域外的其余网络结构也不了解。这意味着OSPF路由域中的网络链路状态数据广播被区域的边界挡住了,这样做有利于减少网络中链路状态数据包在全网范围内的广播,也是OSPF将其路由域或一个AS划分成很多个区域的重要原因。 随着区域概念的引入,意味着不再是在同一个AS内的所有路由器都有一个相同的链路状态数据库,而是