OSPF的NSSA区域原理与配置纵观路由技术的学习与实践,OSPF路由协议在因特网的发展历程上正起着越来越重大的作用。而NSSA则是在该协议发展过程中产生的一种新的属性。而关于NSSA区域的理解,一直是广大网络爱好者的心头之痒。这篇文章,从NSSA区域的产生、基本原理和配置实例三个方面,对这个特殊的OSPF区域做以简要的介绍。一:OSPF协议与区域大家知道,路由协议推崇的链路状态算法,虽然彻底的解决了路由自环问题,但这种算法本身也有很多固有的缺陷:每台路由器都必须保存整个网络的拓扑结构。这样,一旦出现拓扑变化,就要进行新的SPF计算。这种复杂的SPF算法,对CPU和内存的占用是相当大的。而且,以前流行过的大多数路由协议都存在如下缺陷:没有从协议本身反映出网络的层次结构。因为实际应用中的一个网络是由各种级别的路由器组成的,有核心层的骨干路由器、汇聚层的高端路由器、接入层的低端路由器。这些路由器承担的任务不同,处理性能也不一样。但在路由协议中,所有的路由器都要完成几乎是相同的工作:发送已知的路由给邻居路由器,根据从邻居路由器获得的路由信息计算本地路由表。虽然每台路由器的接口数量不同,但最终计算得来的路由表的规模基本是一样的。为了彻底解决上述问题,OSPF提出了区域的概念(AREA),区域是将所有运行OSPF的路由器人为的分成不同的组,以区域ID来标示。在区域内路由计算的方法不变,由于划分区域之后,每个区域内的路由器不会很多,所有上述缺陷表现得并不严重,带来的后果可以忽略不计。这样,上述的缺点就被成功的规避了。实际上,区域概念的提出意义远不只这些,在划分为区域之后,网络的拓扑结构就与路由协议之间存在了一种对应关系,核心和高端的路由器由于处理能力强,可以规划在骨干区域之中。因为骨干区域的路由器要承担更多的路由计算任务。每个单独的区域实际上就是一个独立于网络中其他区域的系统,可以在不同的区域中试行不同的路由策略,使组网规划更为灵活方便。实际上OSPF协议在当今的网络中广为流行,不是因为它使用了无环路的链路状态算法,而是因为它提出了区域的概念。二:OSPF的STUB区域STUB区域就是一个对区域概念的最典型的应用。STUB区域的设计思想在于:在划分了区域之后,非骨干区域中的路由器对于区域外的路由,一定要通过ABR(区域边界路由器)来转发,或者说对于区域内的路由器来说ABR是一个通往外部世界的必经之路。既然如此,对于区域内的路由器来说,就没有必要知道通往外部世界的详细的路由了,代之以由ABR向该区域发布一条缺省路由来指导报文的发送。这样在区域内的路由器中就只有为数不多的区域内路由和一条指向ABR的缺省路由。而且无论区域外的路由如何变化,都不会影响到区域内路由器的路由表。由于区域内的路由器通常是由一些处理能力有限的低端路由器组成,所以处于STUB区域内的这些低端设备既不需要保存庞大的路由表,也不需要经常性的进行路由计算。有了STUB属性之后,网络的规划更符合实际的设备特点。以上描述的只是STUB区域的设计思想,在协议文本中,对STUB区域的精确定义是:STUB区域一定是非骨干区域和非转换区域(可以配置虚连接的区域),并且在该区域中不可传递Type5类型的LSA。因为协议的设计者认为路由表中的绝大部分路由均是来自自治系统外部的引入的路由。(由于OSPF是链路状态算法的路由协议,LSA就是用来描述网络拓扑结构的一种数据结构。在OSPF中将LSA分为5类:type1、2两种用来描述区域内的路由信息;type3用来描述区域间的路由信息;type4、5用来描述自治系统外部的路由信息。)需要注意的是定义中对于过滤TYPE5类型的LSA使用的描述语言是“不可传递”,这就意味着不仅区域外的ASE(自治系统外部)路由无法传递到STUB区域中,同时STUB区域内部的ASE路由也无法传递到本区域之外。换一句更通俗的话来描述:STUB区域内的路由器都不可引入任何外部的路由(包括静态路由)。这样的定义未免太过严厉了。因为在实际的组网中,并不是所有的设备都会运行OSPF协议。例如:用户拨号上网时使用的接入服务器就需要连接路由器上因特网,但通常接入服务器上并不支持(也不需要)OSPF协议,而是通过配置静态路由实现路由功能。很多时候ISP为了保密或易于管理的需要,在连接用户侧的路由器时使用静态路由。总之:在一个网络中所有的路由器上都配置OSPF,而不使用静态路由的情况几乎是不存在的。——也就是说STUB区域的适用条件也是不存在的。三:特殊的STUB--NSSA区域STUB区域虽然为合理的规划网络描绘了美好的前景,但她在实际的组网中又不具备可操作性,未免遗憾。但此时的OSPF协议已经基本成型,不可能再做大的修改。为了弥补缺陷,协议设计者提出了一种新的概念NSSA,并且作为OSPF协议的一种扩展属性单独在RFC1587中描述。NSSA需要完成如下任务:自治系统外的ASE路由不可以进入到NSSA区域中,但是NSSA区域内的路由器引入的ASE路由可以在NSSA中传播并发送到区域之外。即:取消了STUB关于ASE的双向传播的限制(区域外的进不来,区域里的也出不去),改为单向限制(区域外的进不来,区域里的能出去)。由于是作为OSPF标准协议的一种扩展属性,应尽量减少与不支持该属性的路由器协调工作时的冲突和兼容性问题。为了解决ASE单向传递的问题,NSSA中重新定义了一种LSA——Type7类型的LSA,作为区域内的路由器引入外部路由时使用,该类型的LSA除了类型标识与Type5不相同之外,其它内容基本一样。这样区域内的路由器就可以通过LSA的类型来判断是否该路由来自本区域内。但由于Type7类的LSA是新定义的,对于不支持NSSA属性的路由器无法识别,所以协议规定:在NSSA的ABR上将NSSA内部产生的Type7类型的LSA转化为Type5类型的LSA再发布出去,并同时更改LSA的发布者为ABR自己。这样NSSA区域外的路由器就可以完全不用支持该属性。从上述描述可以看出:在NSSA区域内的所有路由器必须支持该属性(包括NSSA的ABR),而自治系统中的其他路由器则不需要。由于NSSA是由STUB区域的概念改进得来,所以她的名字叫做:not-so-stubbyarea,本意是:不是那么STUB的区域。四:STUB区域的相关配置NSSA的原理不复杂,配置更简单,相关命令只有一条:[Router-ospf]areaarea-idnssa[default-route-advertise][no-import-route][no-summary]area-id:是需要配置成NSSA的区域的区域号。“[]”内的参数只有在该路由器是ABR时才会生效。关键字default-route-advertise用来产生缺省的Type-7LSA,应用了该参数后,在ABR上无论路由表中是否存在缺省路由0.0.0.0,都会产生Type-7LSA缺省路由;而在ASBR上当路由表中存在缺省路由0.0.0.0,才会产生Type-7LSA缺省路由。关键字no-import-route用在ASBR上,使得OSPF通过import-route命令引入的路由不被通告到NSSA区域。如果NSSA的路由器既是ASBR也是ABR,一般选用该参数选项。为了进一步减少发送到NSSA区域中的链路状态发布(LSA)的数量,可以在ABR上配置no-summary属性,禁止ABR向NSSA区域内发送summary_netLSAs(Type-3LSA)。配置该参数后,ABR会将Type3类型的LSA也过滤掉,即:NSSA区域中也不会出现区域间路由,路由表进一步精简。既然有缺省路由,那么其他指向区域外的具体路由都是没有必要的了。该参数推荐配置。即:如果路由器只是一台区域内路由器,只需配置areaarea-idnssa即可。如果是ABR,根据实际需要,选择添加三个可选参数。五:STUB区域配置实例先看一下实验拓扑图:实验之前,先做好五个路由器的预配置,这是必不可少的。第一步R1的预配置R1(config)#intlo0R1(config-if)#ipadd1.1.1.1255.255.255.0R1(config-if)#ints2/1R1(config-if)#ipadd12.0.0.1255.255.255.0R1(config-if)#noshR1(config-if)#ints2/2R1(config-if)#ipadd15.0.0.1255.255.255.0R1(config-if)#noshR1(config-if)#exit第二步R2的预配置R2(config)#intlo0R2(config-if)#ipadd2.2.2.2255.255.255.0R2(config-if)#ints2/1R2(config-if)#ipadd12.0.0.2255.255.255.0R2(config-if)#noshR2(config-if)#ints2/2R2(config-if)#ipadd23.0.0.2255.255.255.0R2(config-if)#noshR2(config-if)#exit第三步R3的预配置R3(config)#intlo0R3(config-if)#ipadd3.3.3.3255.255.255.0R3(config-if)#ints2/1R3(config-if)#ipadd23.0.0.3255.255.255.0R3(config-if)#noshR3(config-if)#exit第四步R4的预配置R4(config)#intlo0R4(config-if)#ipadd4.4.4.4255.255.255.0R4(config-if)#ints2/2R4(config-if)#ipadd45.0.0.4255.255.255.0R4(config-if)#noshR4(config-if)#exit第五步R5的预配置R5(config)#intlo0R5(config-if)#ipadd5.5.5.5255.255.255.0R5(config-if)#ints2/1R5(config-if)#ipadd15.0.0.5255.255.255.0R5(config-if)#noshR5(config-if)#ints2/2R5(config-if)#ipadd45.0.0.5255.255.255.0R5(config-if)#nosh好了,可以开始OSPF的相关配置了:第一步配置R1、R2、R3、R4、R5的OSPF协议R1(config)#routerospf100R1(config-router)#router-id1.1.1.1R1(config-router)#network1.1.1.10.0.0.0area0R1(config-router)#network12.0.0.10.0.0.0area0R1(config-router)#network15.0.0.10.0.0.0area0R1(config-router)#exitR2(config)#routerospf100R2(config-router)#router-id2.2.2.2R2(config-router)#network2.2.2.20.0.0.0area0R2(config-router)#network12.0.0.20.0.0.0area0R2(config-router)#network23.0.0.20.0.0.0area32R2(config-router)#exitR3(config)#routerospf100R3(config-router)#router-id3.3.3.3R3(config-router)#network3.3.3.30.0.0.0area32R3(config-router)#network23.0.0.30.0.0.0area32R3(config-rout