在前面的章节中,OSPF可以划分区域,减轻单区域里面LSDB的规模,从而减轻路由器的负荷,虽然OSPF能够划分区域,但是依旧需要维护域间路由和外部路由,这样随着网络规模的不断扩大,路由器所维护的LSDB的规模依然很庞大,那么对于非骨干区域的低端路由器而言,就会显得十分吃力,那么有什么办法可以进一步减轻LSDB的规模呢。本章课程将介绍OSPF的特殊区域以及其他特性
Stub区域和Totally Stub区域
网络规模变大对OSPF的LSA有怎样的影响,按照图中的案例知道,如果划分区域之后,虽然可以减轻单区域里面的一类和二类LSA,但是又会衍生出一个新的问题,在前面的课程中,我们学习过OSPF在区域间传递的是三类LSA,同是引入外部路由之后又会产生5类和4类LSA,所以它所需要维护的域内、域间及外部路由依然需要LSA来进行支撑,只要网络规模不断扩大,那么这些LSA的数量就会慢慢递增。数据库也会变得越来越大。对于一些边缘设备,它是一个比较低端的路由器,不像高端路由器一样处理这样的一个数据库变得非常简单,数据库规模一旦变大,这台路由器所消耗的性能和资源就会越来越多,这样设备的转发效率可能就会变得低,有没有办法减轻他的压力,这就是本章课程所需要解决的一个问题。
如果按照传输的流量去划分OSPF区域,那么区域可分为两类,一种是传输的区域,第二种是末端区域。那么转输区域指的是什么呢。就是本区域不仅要承载从本端发起和访问的流量,还要作为一个流量中转站来中转不同区域之间的通信。那么骨干区域0就是一个典型的传输区域。因为在前面的课程中学习过非骨干区域的通信要经过骨干区域,也许这些流量未必是要访问骨干区域的,或者说不是由本端骨干区域发起的,那么不同非骨干区域之间的通信都需要经过中转站进行中转,所以这样的一个传输区域,它是什么流量呢,承载的,就是穿越型流量。第二种就是末端区域,末端区域指的是什么呢,就是除了有本端发起的和访问本端的,它不作为流量中转空间,比如说Area1,Area1里面的设备去访问外部网络,和外部网络访问本地区域的设备,其他任何流量中转不经过本区域,那么末端区域里面的路由器是否可以进一步减少LSDB的规模呢,保保留对它有用的,
Stub区域
Stub区域它将这个区域划分出特殊区域之后,它有怎么的特点,可以看一下,它不向Stub区域里面传递AS外部路由信息,而是由缺少的三类LSA来代替,来看一下图中这样的一个案例,如果把Area2设为特殊区域Stub区域中,那么该区域路由器的LSDB会发生怎样的变迁呢,原本它的LSDB有本区域的1类和2类LSA,有区域间的3类LSA,以及一旦某台设备引用外部路由后,会生成5类和4类LSA,当把这个区域配置成特殊Stub区域之后,它的LSDB会发生怎样的变化呢?会发现原本的4类和5类LSA全部消失了,有一条缺少的3类LSA来代替,缺省的三类LSA指的是由ABR,R3向该区域下发的一条静态路由。下一跳指向ABR,也就是说,但凡要去访问外部网络,通过ABR就可以了,将数据包丢给ABR,因为ABR具有全网明细的这样的一个 LSA,再由他进行数据的转发,帮忙去传递这样的一个路由,或者说一个数量流量,这样就能够减轻该路由器的LSDB的规模。那么在配置Stub区域之后,要注意以下哪几个重要的关注点:
1,骨干区域是不能配置成Stub区域的
2,如果该区域一旦配置成Stub区域之后,这这区域里面所有的路由器都需要配置成Stub区域,要保持一致。
3,Stub区域不能够引入也不能接收外部路由,因为他无法存在5类和4类LSA,所以在Stub区域里面,它也不会存在ASBR这个概念,假设要在R5上引入一个外部路由,那么是不可以的。
4,虚链路是不能够穿越Stub区域的。
末端区域想要访问外部网络,只有一个出口,那就是ABR,反正流量都是要经过ABR的,那么就把所有的5类和4类的LSA全部用1条缺省的3类来代替,所有的流量丢给ABR,由ABR进行中转,这样就不用去思考其他的事情,就相录于ABR是我们的秘书一样,这个时候可能有一个疑问,如果说5类和4类访问外部的网络,用一条缺省的3类LSA来代替,那么原本的3类LSA为什么还要存在呢?是不是也可以用缺省的三类LSA来代替。都由ABR去执行,帮忙去转发,因为对于末端区域而言,无论是区域间路由还是外部路由,可以一视同仁,都是非本区域的这样的一个流量。如果大家能想到这一点,说明大家就是关于特殊区域的核心思想学习得非常好,因为后面会有它的一个衍生的区域。
首先查看一下R5 OSPF的路由表,因为R1将192.168.1.0这个网段通过引入的方式引到OSPF中,寻到如果R3正常去传递5类和4类LSA的话,R5的路由表应该有一条关于支往192.168.1.0的这样一条外部路由,但是去查看它的路由表的时候会发现有OSPF区域其它条目的路由网段,但是并没有192.168.1.0这条路由条目,会发现多了一条0.0.0.0缺省路由,那么这条路由是怎么来的呢,看一下R5的数据库,如果在正常的LSA通告下,查看R5的数据库应该有R3,也就是ABR去下发的5类和4类LSA。但是,查看数据库会发现,并没有5类和4类LSA,只有一条缺省的三类LSA,0.0.0.0由ABR下发,还有其它区域的明细3类LSA,那是因为将这个区域配置成Stub区域之后,R3就不再下发5类和4类的LSA,通过一条缺省的3类LSA代替他们下发给到Sbtu区域,这就是第一个Stub区域的它的这样的一个概念。
Totall Stub区域
对于末端区域而言,无论是外部这样的一个路由以及区域间路由,都是要通过ABR转发现去,那么何必要学习其他区域间的3类LSA,是否也可以用缺省的3类LSA来代替,从而进一步减轻末端区域路由器的负荷。 在 Stub区域的基础上,进行了一个增强。就是Totally Stub区域。通过命令在Stub区域后面加no-summary这条命令,就会发现,将该区域设置为Totally Stub区域,那么该区域设置为Totally Stub区域之后,既不允许5类和4类LSA在本区域内传播,同是甚至不允许区域间的路由在本区域传播。他们的数据库规模将会进一步进行压缩。原本的仅仅是用来过滤4类和5类LSA,用1条缺省的3类LSA来代替,现在包括区域间的3类LSA全部纳为一体,用一条缺省的3类LSA来代替,那么这样就可以大大减轻非骨干区域,也就是Totally Stub区域路由器里的负荷。这就是Totally Stub区域的和Stub区域的区别。
R1引入了一条外部路由192.168.1.0, 然后将区域2配置为Totally Stub区域,这个时候看R5的这样的一个数据库,会发现所有的5类、4类以及区域间的3类LSA全部消失了,只有一条缺省的3类LSA来代替它们。那么总结一下该区域的特点,就是为了减轻末端路由器的负荷,不想让他学习过多的LSA,所以但凡非本区域的LSA,全部用缺省的3类LSA来代替。来压缩数据库的规模。但是特殊区域又有一个非常致命的缺点,在某些特殊的应用场景下,它又是不太适合去适用这个区域.
NSSA区域和Totally NSSA区域
NSSA全称叫做Not So Stubby Area, 翻译过来就叫做非完全末梢区域,它其实是Stub区域的一个变形,它们之间有非常相似的地方,那么只不过在Stub区的基础上,保留了引入外部路由这样的一个能力。这个区域有什么特点呢。
假设在一个特殊的应用场景下,如果说在Area 2就是要引入一台服务器的IP地址,让其他区域通过Stub区域去访问这台路由器,就会产生一个问题,如果把Area 2设置成为Stub区域的话,它是没有引入外部路由这样的一个能力,所以就不能够去帮助它去实现让其他路由通过Stub去访问这台通用路由器,那么就就是在特殊的应用场景下,它会有一个缺点,于是为了弥补这种遗憾,扩展衍生出后面的一个特殊区域叫做NSSA这个区域。
NSSA是既能引入外部路由,同时不会学习来自OSPF其他区域引入的外部路由,也就是Stub区域上进行了一个增强,保留了引入外部路由的这样的一个能力,Totally NSSA区域和NSSA区域之间的差别在于在它的基础上进行进一步的改良。
R5和通用服务器直连,现在R5将这条外部路由引入到OSPF中,在NSSA区域里面,又衍生出了一个新的LSA,7类LSA,这个7类LSA比较特殊,只是用来在NSSA区域之间传播,不会通告给其他的区域,为了让NSSA区域里面的路由器去访问这台通用服务器,通过该区域的ASBR,也就是R5去访问它,但实际上对于其他区域的路由器而言,只要引入了外部路由,那么R5实际上是不是就可以看作是ASBR,所以R3 ABR,将7类的LSA,也就是引入外部路由的这样的一个信息,传递给别的区域的时候,会把它转换成普通的5类LSA进行传播,因为对于其他区域的路由器而言,只要你是外部路由,你应该告诉我5类LSA的信息。一旦把这个区域配置成NSSA区域之后,R3会生成一条缺省的7类LSA默认路由,那么这条缺省的7类LSA和Stub区域里面缺省的3类LSA是一样的,是用来告诉该区域去往外部路由的这条路径 0.0.0.0,假设R1引进一条外部路由,那么R3作为特殊区域上面的ABR,它是不能将5类LSA传递给NSSA区域的,所以它会用缺省的7类LSA来代替外部路由的LSA,这就是NSSA区域的一个特点。
会发现所有的外部路由全部由一条缺省的7类LSA来代替, 下发给NSSA区域,而另一条7类LSA关于外部路由这条信息是NSSA区域本区域自己的ASBR,也就是R5生成的,在该区域里面进行通告。同是如果去查看别的设备数据库,会发现R3将这条7类的关于192.168.3.0的7类LSA,转成5类LSA向其他区域进行通告。Totally NSSA区域在配置上面,后面加no-summary,但是在数据库里,原本所有明细的区域间3类LSA也全部消失了,由一条缺省的3类LSA来代替,这个和Stub区域是不同的,Stub区域访问外部路由以及区域间路由,是不是全部由缺省的3类LSA来代替,这是Totally Stub区域的特点。而Totally NSSA区域会发现什么呢?它有两条缺省路由,一条是区域间(路由)是通过一条缺省的3类,而外部(路由)是通过一条缺省的7类来代替的,所以这就是Totally NSSA区域和Totally Stub区域本质上的区别,它有两条缺省的路由。
特殊区域通过各样的规则能够减轻数据库的规模,从而减轻在该区域路由器的负荷,但是如果这个区域是一个普通的区域,它有没有别的方法能够减轻它的负荷,是不是一定把它设置成特殊区域才可以。、
LSA更新周期是1800s,每一个路由器,每隔1800s会更新一次自己的LSA,发送给邻居,邻居收到LSA之后,它来进行判断,判断数据库里面的LSA是否是新的,是否需要进行更新。首先判断序列号是否相同,如果不同的话,序列号大的为新的,进行更新,如果相同的话去判断校验和,校验和越大,越优。如果校验和相同,再看LSA的存活时间,就是是Age是否等于3600秒,如果是,那么这是最新的,如果不是等于3600秒的话,判断自己本数据库里面,关于这条LSA的时间,和收到的 LSA的它的存活时间,进行一个差值对比。如果差值超过15分钟,也就是900s,时间越小,越新,如果差值没有超过15分钟,默认这两个LSA是相同的,那么保留自己数据库里面的。这就是针对LSA更新的一个处理原则。
实际上LSA的序列号取值有一个范围,最大取值应该是0x7FFFFFFFF,当LSA序列号超过最大值的时候,它会重新归到起始取值范围,重新开始计算,那么这个时候,序列号小的反而比序列号最大的这样一条LSA更新,那么当然这种场景其实很难遇见,LSA更新到最大的序列号,所花费的时间其实是非常多的。
理论上,如果一条 LSA 以每秒 1 次的荒谬频率持续刷新,需要大约 136 年 才能耗尽序列号空间。
实际上,在正常的 OSPF 网络中:
LSA 只在网络变化时更新,频率很低。
每 30 分钟 (
LSRefreshTime
),LSA 会被强制刷新一次(序列号递增)。当序列号接近最大值 (
0x7FFFFFFE
) 时,会立即触发序列号回绕,重置为0x80000001
。
因此,在 OSPF 协议的正常运行机制下,LSA 的序列号永远不可能真正达到最大值
0x7FFFFFFF
。LSRefreshTime
和序列号回绕机制有效地保证了序列号空间的无限循环使用。
所以,回答“需要多长时间”的问题,答案是:在正常运行的 OSPF 网络中,由于每 30 分钟强制刷新和接近最大值时的回绕机制,LSA 的序列号永远不会达到 0x7FFFFFFF
。 关注点应该是 LSA 的刷新周期 (LSRefreshTime
) 和老化时间 (MaxAge
),而不是序列号耗尽所需的时间。
区域间路由汇总和外部路由汇总
路由汇总技术也称为路由聚合技术,就是将一组具有前缀相同的路由汇聚成一条,从而减少路由表的这样的一个规模,在OSPF里面的路由汇总类型分为两种,一种是区域间路由汇总,一种是外部路由汇总,区域间路由汇总是在ABR执行的,而外部路由汇总是在ASBR上面去行的, 那么执行完之后会大大减轻路由表的规模。
如何去实现路由聚合,将具有相同条目的这样的一条路由把它拆成二进制,保留相同位,然后不同位后面全部给它清0,最后来看相同位数的掩码,最后就成了汇总后的路由,那么原本区域间这样一条汇总R2,它关于3类LSA实际上一共有8条路由,现在要叫它在区域间传递的时候只传一条,所以在R2,也就是ABR的Area1里面,做了一个ABR汇总,汇总完之后就变成了一条路由,这个时候再去看一下R2的数据库,原本有8条区域间路由,汇总之后就变成了一条,那么再将这一条汇总的路由再传递给其它区域,做路由汇总综的好处是什么呢,第一个可以减轻数据库的规模以及路由表的这样的条目,第二个,一旦执行完路由汇总之后,如果说明细里面的路由发生网络波动,比如说是Up还是Down,汇总的这条路由是不发生任何变化的。那么对于其他区域的数据库而言将没有任何影响。只会将波动范围缩小在区域1里面,这样就不会使全网同一时间进行收敛,来影响转发效率。
外部路由汇总和区域间路由汇总是一样的,只不过在执行的设备上而言,换了一台,由ABR换成了ASBR,将R1的4条路由汇总成1条之后,然后在其它区域里面进行泛洪。同是,有一个非常特殊的一点,如果在个特殊的区域NSSA区域做汇总,是不是由ABR将7类转成5类在其他区域泛洪,所以ABR在执行7转5的动作同时,它又充当了一台类似于ASBR的概念,所以在NSSA区域做5类的汇总,是由ABR来执行的,同是也可以把它看做是一台ASBR,这一点是比较特殊的。
总结一下,就是在NSSA区域做5类汇总,是由ABR去执行的,同样能够达到一个减轻LSDB的规模以及路由条目,这个时候再去查看R3上的数据库,会发现原本的明细的lsa,全部由汇总后的LSA来取代他们,来减轻LSA的规模,说白了就是无论是区域间路由汇总,还是外部路由汇总,所达到的目的都是为了减轻设备的LSDB的规模,从而最终降低路由器这样的一个负荷。
OSPF协议特性
Silent-Interface,静默端口,将该接口配置成沉默端口之后,不会接不会发OSPF报文,在一些特殊的应用场景下,将自己的直连路由依旧可以发布出。
假设R1的右边连接着一台服务器,服务器是无法配置OSPF协议的,但是又想让别的网络能够访问这台服务器,所以R1需要把192.168.4.0连接服务器的网段宣告进OSPF协议里面,但是一旦宣告OSPF协议里面,代表该路由的G0/0/1接口开启了OSPF协议,是否会发送Hello报文给服务器,而Hello报文对服务器而言是没有任何意义的,服务器接收之后,还要进行丢弃,所以可以将该接口加入到沉默接口,这样的情况下,这个接口就不会发送报文给服务器,从而降低服务器性能消耗,只提供它提供的服务,这样服务器就没必要去接收那些他不想处理的报文。从而提高服务器的性能。
在一些特殊的场景下,沉默端口也可以用来去分割网络,比如说同一个网络都是用OSPF打通的,但是基于某个设备作为核心边界,不希望这两个边界的两边网络进行互相通信,那么该设备的某个接口就可以启用沉默端口,那么使这两台设备之间无法建立OSPF的邻居关系,从而达到一个分割网络的这样一个作用。所以不同的技术在不同的应用场景下,它有自己特殊的一个意义。
OSPF支持报文认证,只有通过认证的报文才能够被接收,这样是为了实现报文的交互更加具有安全性。在OSPF支持的认证中分为两种,一种是区域认证,一种是接口认证,只要配置的认证,那么该设备的认证类型要保持一致,同时认证的密码也要保持一致。
按图中的案例来看,首先R2在左边接口上配置了一个OSPF认证,是以MD5算法进行的,右边区域0中配置了一个区域认证,同样,它是以明文的形式去实现的。那么为了能够R2和左右路由器建立正常的邻居关系,所以他们的区域或者说接口认证要保持一致,那么R3应该和R2建立接口认证,同时接口类型和密码保持一致。R1和R2建立区域认证,区域认证的这样一个类型以及密码要保持一致。那么这就是OSPF的一个认证功能。
为了减轻数据库的规模,提出了特殊区域的概念,同时针对普通区域可以实现区域间路由汇总,外部路由汇总这样的功能,减小LSDB的规模,从而减轻设备的负荷,最后介绍了OSPF的其他特性。比如说沉默端口和OSPF认证。