FW: OSPF NSSA白皮书

NSSA原理简介

  众所周知,OSPF路由协议是目前因特网中应用最为广泛一种IGP,而NSSA则是在该协议发展过程中产生的一种新的属性,她的英文全称是"not-so-stubby” area,一个充满了幽默味道的名字。要想了解该属性的特征,我们先从路由协议的发展历程讲起。

  1.2 从D-V算法到链路状态算法

  RIP作为最古老的动态路由协议,使用D-V算法来计算路由。由于当时的网络环境非常简单,所以RIP协议的设计思想也是简洁为本,只求完成最基本的功能。这样在RIP应用于大型拓扑复杂的网络时,就会出现效率不高、收敛慢、路由自环等问题。其中尤以路由自环的危害最大。此时必须有新的路由协议来适应日益复杂的网络,而且新的路由协议必须要解决RIP遇到的所有问题。由于D-V算法对网络的理解是基于“平面的”——在运行RIP协议的路由器眼中,网络仅仅是由一个个直连的邻居和一条条由邻居通告的路由组成。这样在网络拓扑变化时难免会导致计算错误,产生自环。为了彻底解决这个问题,一种全新的算法——链路状态算法应运而生。该算法从“立体”的角度来看待网络,每一台路由器都理解全局网络的拓扑结构,并依据此来计算路由,由于每台路由器对网络的整体情况“一切尽在掌握”,所以自环的问题被这彻底的解决。

  1.3 OSPF协议与区域

  基于链路状态算法的OSPF协议虽然彻底的解决了路由自环问题,但这种算法本身也有很多固有的缺陷:

  耗费更多内存资源:每台路由器都必须保存整个网络的拓扑结构(以LSDB的形态)

  耗费更多CPU资源:该算法的路由计算使用SPF算法,较D-V算法要复杂的多。

  计算更为频繁:只要网络中有任何一台路由器的拓扑发生变化,就会导致网络中所有的路由器进行SPF计算,而且每台路由器都是将SPF算法重新执行一遍,以便找出变化的路由。

  而且,无论是D-V算法还是链路状态的路由协议都存在如下缺陷:

  没有从协议本身反映出网络的层次结构。因为实际应用中的一个网络是由各种级别的路由器组成的,有核心层的骨干路由器、汇聚层的高端路由器、接入层的低端路由器。这些路由器承担的任务不同,处理性能也不一样。但在路由协议中,所有的路由器都要完成几乎是相同的工作:发送已知的路由给邻居路由器,根据从邻居路由器获得的路由信息计算本地路由表。虽然每台路由器的接口数量不同,但最终计算得来的路由表的规模基本是一样的。

  为了彻底解决上述问题,OSPF提出了区域的概念(AREA),区域是将所有运行OSPF 的路由器人为的分成不同的组,以区域ID来标示。在区域内路由计算的方法不变,由于划分区域之后,每个区域内的路由器不会很多,所有上述缺陷表现得并不严重,带来的后果可以忽略不计。而在区域之间计算路由时采用D-V算法,这样三个缺点就被成功的规避了。实际上区域概念的提出意义远不只这些,在划分为区域之后:

  网络的拓扑结构就与路由协议之间存在了一种对应关系,核心和高端的路由器由于处理能力强,可以规划在骨干区域之中。因为骨干区域的路由器要承担更多的路由计算任务。

  每个单独的区域实际上就是一个独立于网络中其他区域的系统,可以在不同的区域中试行不同的路由策略,使组网规划更为灵活方便。

  实际上OSPF 协议在当今的网络中广为流行,不是因为她使用了无环路的链路状态算法,而是因为她提出了区域的概念!

  1.4 STUB区域

  STUB区域就是一个对区域概念的最典型的应用。STUB区域的设计思想在于:在划分了区域之后,非骨干区域中的路由器对于区域外的路由,一定要通过ABR(区域边界路由器)来转发,或者说对于区域内的路由器来说ABR是一个通往外部世界的必经之路。既然如此,对于区域内的路由器来说,就没有必要知道通往外部世界的详细的路由了,代之以由ABR向该区域发布一条缺省路由来指导报文的发送。这样在区域内的路由器中就只有为数不多的区域内路由和一条指向ABR的缺省路由。而且无论区域外的路由如何变化,都不会影响到区域内路由器的路由表。由于区域内的路由器通常是由一些处理能力有限的低端路由器组成,所以处于STUB区域内的这些低端设备既不需要保存庞大的路由表,也不需要经常性的进行路由计算。有了STUB属性之后,网络的规划更符合实际的设备特点。

  以上描述的只是STUB区域的设计思想,在协议文本中,对STUB区域的精确定义是:STUB区域一定是非骨干区域和非转换区域(可以配置虚连接的区域),并且在该区域中不可传递Type 5类型的LSA。 因为协议的设计者认为路由表中的绝大部分路由均是来自自治系统外部的引入的路由。(由于OSPF是链路状态算法的路由协议,LSA就是用来描述网络拓扑结构的一种数据结构。在OSPF 中将LSA分为5类:type1、2两种用来描述区域内的路由信息;type3用来描述区域间的路由信息;type4、5用来描述自治系统外部的路由信息。)OSPF链路状态公布LSA类型5定义了到达外部网络的路由,它并不泛洪到STUB区域。连接到STUB区域的ABR为外部网络发送一个缺省路由(0.0.0.0)到STUB区域。这允许STUB区域

  内部的某个路由器将报文转发到一个目的网络,而该网络并没有出现在s t u b区域路由器的路由表中。对于那些在自己的路由表中没有找到的网络报文, s t u b区域路由器将其转发到ABR路由器,而该ABR路由器已发送0.0.0.0 LSA

  需要注意的是定义中对于过滤TYPE5类型的LSA使用的描述语言是“不可传递”,这就意味着不仅区域外的ASE(自治系统外部)路由无法传递到STUB 区域中,同时STUB区域内部的ASE路由也无法传递到本区域之外。换一句更通俗的话来描述:STUB区域内的路由器都不可引入任何外部的路由(包括静态路由)。

  这样的定义未免太过严厉了。因为在实际的组网中,并不是所有的设备都会运行OSPF协议。例如:用户拨号上网时使用的接入服务器就需要连接路由器上因特网,但通常接入服务器上并不支持(也不需要)OSPF协议,而是通过配置静态路由实现路由功能。很多时候ISP为了保密或易于管理的需要,在连接用户侧的路由器时使用静态路由。总之:在一个网络中所有的路由器上都配置OSPF,而不使用静态路由的情况几乎是不存在的。——也就是说STUB区域的适用条件也是不存在的。

  1.5 NSSA区域

  STUB区域虽然为合理的规划网络描绘了美好的前景,但她在实际的组网中又不具备可操作性,未免遗憾。但此时的OSPF协议已经基本成型,不可能再做大的修改。为了弥补缺陷,协议设计者提出了一种新的概念NSSA,并且作为OSPF协议的一种扩展属性单独在RFC 1587中描述。

  NSSA需要完成如下任务:

  自治系统外的ASE路由不可以进入到NSSA区域中,但是NSSA区域内的路由器引入的ASE路由可以在NSSA中传播并发送到区域之外。即:取消了STUB关于ASE的双向传播的限制(区域外的进不来,区域里的也出不去),改为单向限制(区域外的进不来,区域里的能出去)。

  由于是作为OSPF标准协议的一种扩展属性,应尽量减少与不支持该属性的路由器协调工作时的冲突和兼容性问题。

  为了解决ASE单向传递的问题,NSSA中重新定义了一种LSA——Type 7类型的LSA,作为区域内的路由器引入外部路由时使用,该类型的LSA除了类型标识与Type 5不相同之外,其它内容基本一样。这样区域内的路由器就可以通过LSA的类型来判断是否该路由来自本区域内。但由于Type 7类的LSA是新定义的,对于不支持NSSA属性的路由器无法识别,所以协议规定:在NSSA的ABR上将NSSA内部产生的Type 7类型的LSA转化为Type 5类型的LSA再发布出去,并同时更改LSA的发布者为ABR自己。这样NSSA区域外的路由器就可以完全不用支持该属性。

  从上述描述可以看出:在NSSA区域内的所有路由器必须支持该属性(包括NSSA的ABR),而自治系统中的其他路由器则不需要。

  由于NSSA是由STUB区域的概念改进得来,所以她的名字叫做: “not-so-stubby” area ,本意是:不是那么STUB的区域。

  第2章 NSSA相关配置

  NSSA的原理不复杂,配置更简单,相关命令只有一条:

  [Router-ospf]

  area area-id nssa [ default-route-advertise ] [ no-import-route ] [ no-summary ]

  area-id:是需要配置成NSSA的区域的区域号。“[]”内的参数只有在该路由器是ABR时才会生效。

  关键字default-route-advertise用来产生缺省的Type-7 LSA,应用了该参数后,在ABR上无论路由表中是否存在缺省路由0.0.0.0,都会产生Type-7 LSA缺省路由;而在ASBR上当路由表中存在缺省路由0.0.0.0,才会产生Type-7 LSA缺省路由。

  关键字no-import-route用在ASBR上,使得OSPF通过import-route命令引入的路由不被通告到NSSA区域。如果NSSA的路由器既是ASBR也是ABR,一般选用该参数选项。

  为了进一步减少发送到NSSA区域中的链路状态发布(LSA)的数量,可以在ABR上配置no-summary属性,禁止ABR向NSSA区域内发送summary_net LSAs(Type-3 LSA)。配置该参数后,ABR会将Type3类型的LSA也过滤掉,即:NSSA区域中也不会出现区域间路由,路由表进一步精简。既然有缺省路由,那么其他指向区域外的具体路由都是没有必要的了。该参数推荐配置。

  即:如果路由器只是一台区域内路由器,只需配置area area-id nssa即可。如果是ABR,根据实际需要,选择添加三个可选参数。