为什么需要划分区域?
随着网络规模日益扩大,网络中的路由器数量不断增加。当一个巨型网络中的路由器都运行OSPF路由协议时,就会遇到如下问题:
1.每台路由器都保留着整个网络中其他所有路由器生成的LSA,这些LSA的集合组成LSDB,路由器数量的增多会导致LSDB非常庞大,这会占用大量的存储空间。
2.LSDB的庞大会增加运行SPF算法的复杂度,导致CPU负担很重。
?由于LSDB很大,两台路由器之间达到LSDB同步会需要很长时间。
3.网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“动荡”之中,为了同步这种变化,网络中会有大量的OSPF协议报文在传递,降低了网络的带宽利用率。更糟糕的是:每一次变化都会导致网络中所有的路由器重新进行路由计算。
解决上述问题的关键主要有两点:减少LSA的数量;屏蔽网络变化波及的范围。
OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是在逻辑上将路由器划分为不同的组。区域的边界是路由器,这样会有一些路由器属于不同的区域,(这样的路由器称作区域边界路由器——ABR),而一个网段只能属于一个区域。
划分成区域之后,给OSPF协议的处理带来了很大的变化。
4.每一个网段必须属于一个区域,或者说每个运行OSPF协议的接口必须指名属于某一个特定的区域,区域用区域号(Area ID)来标识。区域号是一个从0开始的32位整数。
5.不同的区域之间通过ABR来传递路由信息。

1.11 区域间路由计算

OSPF将自治系统划分为不同的区域后,路由计算方法也发生了很多变化:
1.只有同一个区域内的路由器之间会保持LSDB的同步,网络拓扑结构的变化首先在区域内更新。
2.区域之间的路由计算是通过ABR来完成的。ABR首先完成一个区域内的路由计算,然后查询路由表,为每一条OSPF路由生成一条Type3类型的LSA,内容主要包括该条路由的目的地址、掩码、花费等信息。然后将这些LSA发送到另一个区域中。
3.在另一个区域中的路由器根据每一条Type3的LSA生成一条路由,由于这些路由信息都是由ABR发布的,所以这些路由的下一跳都指向该ABR。
划分区域后的好处:
4.由于划分区域后ABR是根据本区域内的路由生成LSA,则可以根据IP地址的规律先将这些路由进行聚合后再生成LSA,这样做可以大大减少自治系统中LSA的数量。
5.划分区域之后,网络拓扑的变化首先在区域内进行同步,如果该变化影响到聚合之后的路由,则才会由ABR将该变化通知到其他区域。大部分的拓扑结构变化都会被屏蔽在区域之内了。

1.12 骨干区域与虚连接

为何需要骨干区域?
OSPF划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是0,通常被称为骨干区域(Backbone Area)。
由于划分区域之后,区域之间是通过ABR将一个区域内的已计算出的路由封装成Type3类的LSA发送到另一个区域之中来传递路由信息。需要注意的是:此时的LSA中包含的已不再是链路状态信息,而是纯粹的路由信息了。或者说,此时的OSPF是基于D-V算法,而不是基于链路状态算法的了。这就涉及到一个很重要的问题:路由自环。因为D-V算法无法保证消除路由自环。如果无法解决这个问题,则区域概念的提出就是失败的。
通过分析D-V算法中路由环的产生的原因可知,自环的产生主要是因为生成该条路由信息的路由器没有加入生成者的信息,即每一条路由信息都无法知道最初是由谁所生成。OSPF协议在生成LSA时首先将自己的Router ID加入到LSA中,但是如果该路由信息传递超过两个区域后,就会丧失最初的生成者的信息。
解决的方法是:所有ABR将本区域内的路由信息封装成LSA后,统一的发送给一个特定的区域,再由该区域将这些信息转发给其他区域。在这个特定区域内,每一条LSA都确切的知道生成者信息。在其他区域内所有的到区域外的路由都会发送到这个特定区域中,所以就不会产生路由自环。这个“特定区域”就是骨干区域。由上面的分析可知:所有的区域必须和骨干区域相连,也就是说,每一个ABR连接的区域中至少有一个是骨干区域。而且骨干区域自身也必须是连通的。
虚连接:
由于网络的拓扑结构复杂,有时无法满足每个区域必须和骨干区域直接相连的要求,例如图中的Area 19。 为解决此问题,OSPF提出了虚连接的概念。虚连接是指在两台ABR之间,穿过一个非骨干区域(转换区域——transit Area),建立的一条逻辑上的连接通道。可以理解为两台ABR之间存在一个点对点的连接。“逻辑通道”是指两台ABR之间的多台运行OSPF的路由器只是起到一个转发报文的作用(由于协议报文的目的地址不是这些路由器,所以这些报文对于他们是透明的,只是当作普通的IP报文来转发),两台ABR之间直接传递路由信息。这里的路由信息是指由ABR生成的type3的LSA,区域内的路由器同步方式没有因此改变。
注意:
如果自治系统被划分成一个以上的区域,则必须有一个区域是骨干区域,并且保证其它区域与骨干区域直接相连或逻辑上相连,且骨干区域自身也必须是连通的。

1.13 与自治系统外部通讯

自治系统:
OSPF是自治系统内部路由协议,负责计算同一个自治系统内的路由。在这里“自治系统”是指彼此相连的运行OSPF路由协议的所有路由器的集合。对于OSPF来说,整个网络只有“自治系统内”和“自治系统外”之分。需要注意的是:“自治系统外”并不一定在物理上或拓扑结构中真正的位于自治系统的外部,而是指那些没有运行OSPF的路由器或者是某台运行OSPF协议的路由器中没有运行OSPF的接口。
ASBR(Autonomous System Boundary Router):
作为一个IGP,OSPF同样需要了解自治系统外部的路由信息,这些信息是通过ASBR(自治系统边界路由器)获得的,ASBR是那些将其他路由协议(也包括静态路由和接口的直接路由)发现的路由引入(redistribute)到OSPF中的路由器。同样需要注意的是:ASBR并不一定真的位于AS的边界,而是可以在自治系统中的任何位置。
计算自治系统外部路由:
ASBR为每一条引入的路由生成一条Type5类型的LSA,主要内容包括该条路由的目的地址、掩码和花费等信息。这些路由信息将在整个自治系统中传播(STUB AREA除外)。计算路由时先在最短路径树中找到ASBR的位置,然后将所有由该ASBR生成的Type5类型的LSA都当作叶子节点挂在ASBR的下面。以上的方法在区域内部是可行的,但是由于划分区域的原因,与该ASBR不处于同一个区域的路由器计算路由时无法知道ASBR的确切位置(该信息被ABR给过滤掉了,因为ABR是根据区域内的已生成的路由再生成Type3类型的LSA)。为了解决这个问题,协议规定如下:如果某个区域内有ASBR,则这个区域的ABR在向其他区域生成路由信息时必须单独为这个ASBR生成一条Type 4类型的LSA,内容主要包括这个ASBR的Router ID和到他所需的花费值。
路由分级管理:
OSPF将所引入的自治系统外部路由分成两类:type 1和type 2。第一类是指引入的是IGP路由(例如RIP,STATIC),由于这类路由的可信程度高一些,所以计算出的外部路由的花费与自治系统内部的路由花费的数量级是相同的,即到第一类外部路由的花费值 = 本路由器到相应的ASBR的花费值+ASBR到该路由目的地址的花费值。对于第二类外部路由是指引入的是BGP路由,由于这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的花费远远大于在自治系统之内到达ASBR的花费。所以计算路由花费时将主要考虑前者,即到第二类外部路由的花费值 = ASBR到该路由目的地址的花费值。如果该值相等,再考虑本路由器到相应的ASBR的花费值。如果加上前面所述的两种路由类型,OSPF一共将路由分为四级,按优先级从高到低排列:
1.区域内路由
2.区域间路由
3.自治系统外一类路由
4.自治系统外二类路由
其中前两种路由在路由表中的优先级是一样的,缺省值为10;后两种路由在路由表中的优先级是相同的,缺省值是150。

1.14 STUB区域与路由聚合

OSPF协议将整个自治系统划分成不同的区域。主要出于以下目的:减少路由信息在自治系统之中的传递;可以针对不同区域的拓扑特点采用不同的策略。
STUB区域
STUB区域是指那些不传播Type5类型(即引入的外部路由)的LSA的区域。在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。为了保证到自治系统外的路由依旧可达,由该区域的ABR生成一条缺省路由(0.0.0.0)传播到区域内,因为所有到自治系统外部的路由都必须通过ABR才能到达。STUB区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常的,STUB区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。或者该区域虽然有多个ABR,但这些ABR之间没有配置虚连接。图中的 Area 8 和 Area 19 符合配置成STUB区域的条件。
配置STUB区域的一些注意事项:
1.骨干区域不能配置成STUB区域,虚连接不能穿过STUB区域。
2.如果想将一个区域配置成STUB区域,则该区域中的所有路由器都必须都配置该属性。
3.STUB区域内不能存在ASBR,即自治系统外部路由不能引入到区域内,区域的自治系统外部路由也不能在本区域内传播和传递到区域外。
NSSA(Not-So-Stubby Area)区域:
STUB 区域虽然为合理的规划 OSPF 网络描绘了美好的前景,但她在实际的组网中又不具备可操作性,因为实际网络中不可能每台路由、每个接口都运行 OSPF 路由协议,STUB 区域必然需要存在 ASBR 路由器。
为此协议设计者提出了一种新的概念 NSSA,并且作为 OSPF 协议的一种扩展属性单独在RFC 1587中描述。
NSSA 需要完成如下任务:
1)自治系统外的 ASE 路由(自治系统外部路由)不可以进入到 NSSA 区域中,但是 NSSA 区域内的路由器引入的 ASE 路由可以在 NSSA 中传播并发送到区域之外。即:取消了 STUB 关于 ASE 的双向传播的限制(区域外的进不来,区域里的也出不去),改为单向限制(区域外的进不来,区域里的能出去)。
2)由于是作为 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的区域。
路由聚合:
自治系统被划分成不同的区域,其主要目的是为了减少路由信息及路由表的规模。这主要是通过区域间的路由聚合来实现。ABR在计算出一个区域的区域内路由之后,查询路由表,将其中每一条OSPF 路由封装成一条Type3类型的LSA发送到区域之外。例如图中Area 19 内有三条区域内路由19.1.1.0/24,19.1.2.0/24,19.1.3.0/24,正常情况下RTA应该将这三条路由生成三条Type3类型的LSA。如果此时配置了路由聚合,即将三条路由聚合成19.1.0.0/16一条,在RTA上就会只生成一条描述聚合后路由的LSA。需要注意的是:路由聚合只有在ABR上配置才会有效。

1.15 LSA分类

OSPF是基于链路状态算法的路由协议,所有对路由信息的描述都是封装在LSA中发送出去。LSA根据不同的用途分为不同的种类,目前使用最多的是以下五种LSA:
Router LSA(Type = 1):
是最基本的LSA类型,所有运行OSPF的路由器都会生成这种LSA。主要描述本路由器运行OSPF的接口的连接状况,花费等信息。对于ABR,它会为每个区域生成一条Router LSA。这种类型的LSA传递的范围是它所属的整个区域。
Netwrok LSA(Type = 2):
本类型的LSA由DR生成。对于广播和NBMA类型的网络,为了减少该网段中路由器之间交换报文的次数而提出了DR的概念。一个网段中有了DR之后不仅发送报文的方式有所改变,链路状态的描述也发生了变化。在DROther 和BDR的Router LSA中只描述到DR的连接,而DR则通过Network LSA来描述本网段中所有已经同其建立了邻接关系的路由器。(分别列出它们Router ID)。同样, 这种类型的LSA传递的范围是它所属的整个区域。
Network Summary LSA(Type = 3):
本类型的LSA由ABR生成。当ABR完成它所属一个区域中的区域内路由计算之后,查询路由表,将本区域内的每一条OSPF路由封装成 Network Summary LSA 发送到区域外。 LSA中描述了某条路由的目的地址、掩码、花费值等信息。这种类型的LSA传递的范围是ABR中除了该LSA生成区域之外的其他区域。
ASBR Summary LSA(Type = 4):
本类型的LSA同样是由ABR生成。内容主要是描述到达本区域内部的ASBR的路由。 这种LSA与Type3类型的LSA内容基本一样,只是Type4的LSA描述的目的地址是ASBR,是主机路由,所以掩码为0.0.0.0。这种类型的LSA传递的范围与Type3的LSA相同。
AS External LSA(Type = 5):
本类型的LSA由ASBR生成。主要描述了到自治系统外部路由的信息,LSA中包含某条路由的目的地址、掩码、花费值等信息。本类型的LSA是唯一一种与区域无关的LSA类型,它并不与某一个特定的区域相关。 这种类型的LSA传递的范围整个自治系统(STUB区域除外)。

1.16 接口分类及路由器分类

OSPF协议根据链路层封装协议不同分为以下四种网络类型:
Broadcast:当链路层协议是Ethernet时,OSPF缺省认为网络类型是Broadcast。在这种类型网络中, 以组播地址(224.0.0.5,224.0.0.6)发送协议报文,需要选举DR,BDR。
NBMA
当链路层协议是Frame Relay、X.25时,OSPF缺省认为网络类型是NBMA。在这种类型网络中, 以单播地址发送协议报文,必须手工配置邻居的IP地址,需要选举DR,BDR。
Point-to-Multipoint
没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型,通常由NBMA的类型手工修改而来,如果NBMA类型的网络不是全连通的。 在这种类型网络中,以组播地址(224.0.0.5)发送协议报文,不需要选举DR,BDR。
Point-to-Point
当链路层协议是PPP,HDLC,LAPB时,OSPF缺省认为网络类型是Point-to-Point。在这种类型网络中, 以组播地址(224.0.0.5)发送协议报文,不需要选举DR,BDR。
路由器根据在自治系统中的不同位置划分为以下四种类型:
IAR(Internal Area Router):
区域内路由器,是指该路由器的所有接口都属于同一个OSPF区域。这种路由器只生成一条Router LSA,只保存一个LSDB。
ABR(Area Border Router):
区域边界路由器,该路由器同时属于两个以上的区域(其中必须有一个是骨干区域,也就是区域0)。该路由器为每一个所属的区域生成一条Router LSA,为每一个所属的区域保存一个LSDB。并根据需要生成Network Summary LSA(Type = 3)和 ASBR Summary LSA(Type = 4)。
BBR (BackBone Router):
骨干路由器,是指该路由器属于骨干区域(也就是0 区域)。由定义可知,所有的ABR都是骨干路由器,所有的骨干区域内部的IAR也属于BBR。
ASBR(AS Boundary Router):
自治系统边界路由器,是指该路由器引入了其他路由协议(也包括静态路由和接口的直接路由)发现的路由。需要注意的是ASBR并不一定在拓扑结构中位于自治系统的边界。ASBR生成AS External LSA(Type = 5)。
一个运行OSPF协议的接口状态根据接口的不同类型可划分为以下四种:
DR、BDR、DROther:
当接口的类型为Broadcast、NBMA时,需要在网段内选举DR、BDR,根据选举的结果不同,接口的状态可能是以上三种中的一种。
Point-to-Point:
当接口的类型为Point-to-Point、Point-to-Multipoint时,不需要在网段内选举DR、BDR,此时接口的状态是Point-to-Point。
注意:
路由器的各种类型之间是可以“兼职”的(除了不能同时是IAR和ABR),例如:一台路由器可以同时是IAR、BBR、ASBR。而接口状态是指路由器的其中一个接口的状态,两者之间没有任何关系。

1.17 OSPF与路由自环

路由自环是指到某一个目的地址的路由在网络中形成了环路,一个最简单的例子:路由器A上有一条路由10.0.0.0/8下一跳是路由器B;而在路由器B的路由表中该路由的下一跳指向A;如果A收到一条到10.0.0.1的报文,它会转发给B,而B根据路由表又将该报文转发给A。于是该报文会在A、B之间不停的震荡,直至TTL=0才会将该报文丢弃,最坏的情况可能会震荡255次。路由自环对网络的危害是极大的,不仅导致路由不可达,而且浪费了大量的网络的带宽。路由自环是所有路由协议必须解决的问题,也是衡量一个路由协议好坏的重要标志。
D-V算法与路由自环:
D-V算法又称为“距离—向量”算法,其核心思想是网络中的每台路由器都将自己已知的路由表发送给相邻的路由器,每台路由器都会根据收到的所有路由确定最优路径的下一跳。这种算法(主要指RIP和IGPR所实现的D-V算法)的缺陷是:
1.每台路由器对接收到的路由的可信度完全依赖于相邻的路由器。而一台路由器只能保证自己本地路由的正确性(指本路由器的接口路由),而对由其他路由器发送来的路由则无法保证。
2.每一条路由信息中没有标明生成者的信息,该路由信息经过网络中多次传递之后,可能被传回给最初的生成者,而生成者无法知道该信息是否由自己所发布,这就为自环的产生埋下了隐患。
当网络拓扑结构发生变化时,一条已经无效的路由在未能彻底清除之前,可能仍旧在网络中传递,当它传递给该路由的生成者时,此时下一跳的计算可能会发生错误,导致路由自环的产生。
OSPF与路由自环:
OSPF是一种基于链路状态算法的协议,其核心思想是:每一台路由器将自己周边的链路状态(包括接口的直接路由、相连的路由器等信息)描述出来,发送给网络中所有的路由器。每台路由器在收到其他所有路由器的发送的链路状态信息之后,运行SPF算法计算路由。
OSPF计算出的路由不会有自环,主要有以下原因:
1.每台路由器描述的是自己能够确保正确的信息——自己周边的网络拓扑结构。并且在生成的LSA中标记了该信息的生成者——写入自己的Router ID。其他的路由器只负责在网络中传输该信息,而不会有任何的更改。这一点保证了无论网络的拓扑结构如何,无论路由器位于网络中的什么位置,都可以准确无误的接收到全网的拓扑结构图。
2.路由计算的算法是SPF算法。计算的结果是一棵树,路由是树上的叶子节点。从根节点到叶子节点是单向不可回复的路径。
3.当网络的拓扑结构发生变化时(此时最易产生路由自环),会有一台(或多台)路由器感知到这一变化,重新描述网络拓扑结构,并将其通知给其他路由器。每个路由器接收到更新信息后,都会立即重新运行SPF算法,得到新的路由。
OSPF真的没有路由自环吗?
上文中描述的是指没有划分区域时的情况,或者说是在同一区域内OSPF的运行情况。当OSPF划分为不同的区域之后,ABR通过将区域内已计算好的路由封装成Type3类型的LSA发送出去。需要特别注意的是:此时ABR只是单纯的对路由进行描述,而不是描述链路的状态了。或者说,此时的OSPF计算区域间路由时使用的是D-V算法。这时就可能会产生路由自环,OSPF通过骨干区域解决了这个问题(详情见“骨干区域与虚连接”)。
但是当OSPF引入自治系统外部路由时,ASBR封装在Type5类型的LSA中的同样是路由信息,而不是链路状态。这时也同样会产生路由自环。这一次OSPF没有采取任何措施来避免自环的生成,因为引入的自治系统外部路由其本身就是不可靠的。它可能来源于RIP等不可靠的路由,或者是配置错误的静态路由等等,可能这些路由本身就存在路由环。划分区域时区域内计算出的路由都是正确无误的,所以应极力避免由于划分区域而生成新的环路。而引入的外部路由由于其来源即不可靠,所以就没必要再进行其他的操作了。
“OSPF协议不会产生路由自环”这句话的严格定义应该是:OSPF协议生成的自治系统内部路由是无自环的,引入的自治系统外部路由则无法保证。