搜索
写经验 领红包
 > 旅游

ospf中ssa的作用(ospfs功能)

导语:网络工程师(42):OSPF的NSSA区域

为了减少LSDB及路由表的规模,提高路由器的转发效率,我们可以把一个位于网络边缘的非骨干区域设置为Stub或Totally Stub区域。同时我们要知道,在这样的特殊区域中,绝对不会有ASBR。

但是,世界万物都没有绝对的!

在实际组网中,往往会遇到这样的情况:网络中有大量的Type-5类外部路由,却又存在这样一个区域:由于区域中路由器的性能限制,该区域不能是普通区域,否则区域中的路由器无法处理这样大量的外部路由,必须把外部路由过滤掉;同时,这个区域中又有路由器连接了某个外部网络,必须要引入外部路由。

看上去十分矛盾:区域中不能有外部路由,可是自己却还要引入外部路由!

不能是普通区域,也不能是Stub区域!

那只能再约定一个特殊区域了。

NSSA(Not So Stubby Area,中文叫法很难,或者都不伦不类,所以干脆不翻译了,就叫NSSA)区域,是OSPF的一个特殊区域。它和Stub区域一样,不允许有Type-5类外部路由,ABR不会把Type-4和Type-5类LSA扔进NSSA区域里。

那区域里不是有路由器要引入外部路由吗?怎么办?

还记得我们曾说过,除Type-1、Type-2外,别的都是穿着不同LSA外衣的路由吧。

NSSA区域中不允许有Type-5类外部路由,那引入外部路由的时候别穿Type-5类外衣,换成Type-7不就行了。

看,又是个欺骗伎俩!NSSA区域中的ASBR引入了外部路由,但没让这些外部路由穿Type-5的外衣,而是穿了Type-7的外衣。

就像有的抗战神剧中,我们化妆成鬼子,穿上鬼子的衣服,即使迈着六亲不认的步伐,真正的鬼子也认不出来,也许还向你敬礼呢。

Type-7本质上和Type-5一样,都是外部路由,只是穿的衣服不一样。不同的是,Type-5是外部路由,所有区域都认识,但Type-7只在NSSA区域里有,只有NSSA区域认识它。

这就带来了另一个问题:NSSA区域中引入的Type-7类外部路由,其他区域怎么访问呢?

ABR当然不能把Type-7直接扔进区域0,因为除NSSA外,其他区域都不认识Type-7啊。所以,ABR要给这些Type-7换衣服,换成Type-5后再扔给区域0。这就是俗称的。转成Type-5后,其他区域访问这些路由就没问题了。

但还有二个问题,我们要弄明白。

第一个问题,ABR把NSSA区域中的Type-7变成Type-5扔进区域0后,在区域0及其他区域中查看这些Type-5,始发路由器是谁,是的ABR,还是NSSA区域中引入这些路由的ASBR?

第二个问题,区域0或其他区域访问这些被的外部路由,一定要经过的ABR吗?

对于第一个问题,在其他区域中查看这些路由的始发者,当然是的ABR。因为其他区域根本就不知道Type-7,当然也不会知道NSSA。

对于第二个问题,我们想想:这些路由其实并不是ABR始发的,真正的始发者是NSSA中的ASBR。那么其他区域如果去往ASBR的开销更小,那么强行经过ABR就不合理了。

怎么解决呢?还记得Type-5类LSA有个FA(Forwarding Address)地址吧,Type-7一样,也有个FA地址。

在Type-5中,这个FA地址常见为0.0.0.0,表示这些外部路由的下一跳是ASBR。

但在Type-7中,如果FA地址也为0,那么ABR的时候,FA也是0!这就意味着其他区域要访问这些的外部路由,必须强行经过ABR。

刚才说过,这不合理。所以,NSSA区域中的ASBR引入外部路由时,FA地址一般填写为ASBR的RID,ABR做时,FA地址不变。

这样一来,其他区域访问这些外部路由的下一跳,就是FA地址,而不是做的ABR了。

如果NSSA区域只有一台ABR连接区域0,FA地址虽然是NSSA区域中ASBR的RID,但是其他区域要访问这个ASBR,一定会经过ABR。这种情况下,FA是不是为0没什么关系,反正都会经过ABR。

但是,如果NSSA区域有多台ABR连接区域0,情况就不同了。

如图,RTD引入了外部路由N,并把FA地址设置为RTD的RID 3.3.3.3。RTB和RTC都是ABR,那么,谁来呢?

我们发现,不管是谁做RTA访问FA地址3.3.3.3都经过RTB,而不会经过RTC。

OSPF规定,如果NSSA区域存在多个ABR,由RID大的做也就是说,不论有几台ABR,只会有一台做。

会不会影响外部路由的访问路径?并不会,因为有FA地址。

如上图,RTC的RID 2.2.2.2比RTB的1.1.1.1大,所以由RTC负责但RTA访问外部路由N依然经过RTB,而不是RTC。

这就是NSSA区域的Type-7中FA地址一般不是0.0.0.0的原因。

如果图中所有链路的开销都一样呢?

那么,在RTA上,外部路由N形成ECMP(Equal-Cost Multi-Path,多路径等值路由),实现负载分担。

再说一个小细节:如果RTD没有把RID宣告,也就是RTA上没有3.3.3.3的路由,此时RTD就不会把FA地址填写为RID的3.3.3.3,

为什么?因为如果不宣告,填为3.3.3.3别人访问不了这个FA地址。

那填什么呢?会填写为建立邻居关系的接口地址中的一个,谁先建邻居,填谁的地址。

那么,如果邻居都已建好,RTD上也宣告了RID,FA地址为3.3.3.3,再把这个3.3.3.3的宣告删除,FA地址会变成谁呢?

做几个实验,自己验证一下吧!

NSSA区域有没有Totally NSSA呢?

有,和Totally Stub一样,连接Totally NSSA的ABR也不会把Type-3、Type-4和Type-5扔进Totally NSSA区域中。

除了ABR扔不扔Type-3外,NSSA和Totally NSSA还有一个小区别:ABR扔进NSSA区域中的缺省路由穿Type-7的外衣,扔进Totally NSSA的缺省路由穿Type-3的外衣。

如果区域中有多个缺省路由的话,这个区别可能会影响缺省路由的选择。

我们知道,如果路由的前缀掩码完全相同,OSPF会优选区域内路由(Type-1或Type-2),再优选区域间路由(Type-3),再优选第一类外部路由(Type-5或Type-7),最后选择第二类外部路由。

小Q:NSSA区域如果有多个ABR,为什么不都做呢?如果RID最大的ABR故障了怎么办?

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请与我联系,一经查实立刻删除内容。本文内容由快快网络小姬创作整理编辑!