一、区域内防环
OPSF在区域内会产生俩类LSA:Router LSA ,Network LSA
路由器以自己为树根构建最短路径树 ,这里的最短路径树按两步形 成,第一步,仅考虑路由器和传输网络之间的连接。通过 Dijkstra 算 法,根据链路状态数据库的子集形成树。第二步,考虑末节网络连接, 作为叶子加入树。
区域内部OSPF对网络是通过Router LSA ,Network LSA来描述网络 的,最终路由器收到LSA构建出LSDB。
LSDB通过描述一个有向线段图来描述网络拓扑结构,该有向图的端点有 三种类型:路由器节点,Stub网段和Transit网段。
Router LSA使用Link ID,Data,Type和Metric描述一条链路
类型有四种:如图所示
Stub网段表示该网段只有数据入口,例如一个Loopback接口就是一个 Stub网段。
此胶片描述了路由器节点和Stub网段的表示方式。
Cost表示从一个端点到另一个端点的开销,该参数可以在OSPF接口上配 置,表示数据离开该接口(出接口)的开销。
Transit网段有能力转发既不是本网段产生的,也不以本网段做为目的 地的数据。
有至少两台路由器的广播型网段或NBMA网段就是一种Transit网段。
从路由器到所连Transit网段的开销值就是连接到这个网段的接口所配 置的开销值。
从一个Transit网段到连接到这个网段的路由器的开销为0。(称为伪节 点)
在描述点到点接口的Router-LSA中:
1. 通告一个到邻居路由器的点到点链接,Link ID设置为对端的Router ID,Data设置为本地接口的IP地址;
2. 通告一个到该点到点网段的Stub连接,Link ID设置为该点到点网段 的网络号,Data设置为该点到点网段的网络掩码;
3. 上述两个连接的Cost值均为该点到点接口上的Cost值。
LSDB描述两接口处于不同网段的点到点网段的规则如下:
两台路由器经由两条有向线段直接相连,每个方向一条。
两个接口的网段被表示成Stub网段。
每个路由器通告一个Stub连接到该路由器所连的网段。
LSDB描述两接口处于同一网段的点到点网段的规则如下:
两台路由器经由两条有向线段直接相连,每个方向一条。
连接两个接口的网段被表示成Stub网段。
两个路由器同时通告Stub连接到该PPP网段。
在描述广播型或NBMA型接口的Router-LSA中:
1. 如果接口状态是Waiting,或者该网段上只有一个运行OSPF的路由 器,或者该网段上没有DR,则通告一个通往该网段的Stub链接,Link ID设置为该网段的IP网络号,Link Data设置为该网段的网络掩码;
其他情况下,通告一个通往该网段的Transit连接,Link ID设置为DR的 接口IP地址,Link Data设置为本地接口的IP地址。
2. 连接的开销值为接口的开销。
在描述广播型网段或者NBMA网段的Network-LSA中:
Link State ID设置为DR的接口IP地址。
Net mask设置为该网段的网络掩码。
Link State ID和Net mask做与运算,即可得出该网段的IP网络号。
在该LSA中,还包含一个连接到该网段的路由器列表。
从一个Transit网段到所连接的路由器的连接没有开销。
计算过程
根据上文描述上图拓扑在LSA传递完毕后生成有向图
计算过程中首先初始化最短路径树,RTA将自己做为根节点添加到最短 路径树上
RTA将自己添加到最短路径树上之后,检查自己生成的Router-LSA,对 于该LSA中所描述的每一个连接,如果不是一个Stub连接,就把该连接 添加到候选列表中,端点ID为Link ID,到根端点的开销为LSA中描述的 Metric值。本例中,添加端点4.4.4.4和2.2.2.2。
将候选列表中到根端点开销最小的端点移到最短路径树上
当有新节点添加到最短路径树上的时候,则检查LS ID为新节点的link-id ID的LSA,本例中检查LS ID为2.2.2.2的LSA。
如果LSA中所描述的连接的Link ID在最短路径树上已经存在,则忽略该 连接。本例中,Link ID为1.1.1.1的连接被忽略,只有10.3.1.1的连接 被添加到候选列表中。到根端点的开销设置为此连接的Metric值(本例 中此连接的Metric值为1)与父端点(本例中此连接的父端点为 2.2.2.2)到根端点的开销(本例中此开销值为48)之和。
将候选列表中到根端点的开销最小的端点移动到最短路径树上,本例 中,将10.3.1.1移到最短路径树上。
检查LS ID为最新添加节点的端点ID的LSA,本例中检查LS ID为 10.3.1.1的LSA。
在所描述的连接中,忽略2.2.2.2,将3.3.3.3和4.4.4.4添加到候选列 表中。从Transit网段到所连路由器的开销为0。
如果在候选列表中出现两个端点ID一样但是到根端点的开销不一样的端 点,则删除到根端点的开销大的端点。
将候选列表中到根端点的开销最小的端点移动到最短路径树上,本例 中,将3.3.3.3移到最短路径树上。
检查LS ID为最新添加节点的端点ID的LSA,本例中检查LS ID为3.3.3.3 的LSA。
本例中,没有新端点被添加到候选列表中。
将候选列表中到根端点的开销最小的端点移动到最短路径树上,本例 中,将4.4.4.4移到最短路径树上
检查LS ID为最新添加节点的端点ID的LSA,本例中检查LS ID为4.4.4.4 的LSA。
本例中,没有新端点被添加到候选列表中。
如果在此时候选列表为空,则计算最短路径树的第一阶段结束。
检查每个路由器端点的Router-LSA,计算Stub网段。
本例中,首先检查RTA的Router-LSA,共有三个Stub网段。
二、OSPF区域间防环
Type-3 LSA及Type-4 LSA的防环
1) OSPF要求所有的非0区域必须与骨干区域直接相连,区域间路由需经由骨干区域中转。
OSPF要求所有的非0区域必须与骨干区域直接相连,区域间(Inter-Area Route)路由需经 由骨干区域中转。这个要求使得区域间的路由传递不能发生在两个非0的区域之间,这在很 大程度上规避了区域间路由环路的发生,也使得OSPF的区域架构在逻辑上形成了一个类似 星型的拓扑,如下图所示。
2) ABR只能够将其所连接的区域的区域内部路由注入到Area0,但是可以将区域内部路由及 区域间的路由注入到非0常规区域。ABR从非骨干区域收到的Type-3 LSA不能用于区域间路 由的计算。
OSPF对ABR有着严苛的要求,区域间的路由传递的关键点在于ABR对Summary LSA的处理。
在上图中,如果R3是一台普通的OSPF路由器(不是ABR),例如当它与R2没有OSPF邻居关系 时,它会根据R4在Area2中泛洪的Type-3 LSA计算出1.1.1.0/24路由并将路由加载进路由表 中。但是当R3与R2建立起OSPF邻接关系后,R3在Area0中就有了一个活跃的全毗邻连接,此 时如果它把描述1.1.1.0/24路由的Type-3 LSA再注入回Area0,那么就会带来潜在环路的风 险,如下图所示:
因此当一台ABR在非Area0的区域中收到Type-3 LSA时,虽然它会将其装载进LSDB,但是该 路由器不会使用这些Type-3 LSA进行路由计算,当然它更不会将这些Type-3 LSA再注入回 Area0中。
这里有一个有意思的细节,就是如果R3连接R2的接口虽然激活了OSPF(而且属于Area0), 但是不与R2形成邻接关系(例如R2连接R3的接口不激活OSPF),那么此时R3其实并不算是 严格意义上的ABR(虽然它产生的Type-1 LSA中B-bit会被置位,但是它在Area0中并没有全 毗邻的邻居),因此它会将Area2内收到的Type-3 LSA用于区域间路由的计算,所以在R3的 路由表中能看到1.1.1.0/24的区域间路由(下一跳为R4),但是一旦R2-R3之间的邻接关系 建立起来,R3将不能再使用R4下发的Type-3 LSA计算路由,而仅能使用从Area0中收到 的、R 2下发的Type-3 LSA进行区域间路由计算,所以此时R3路由表中1.1.1.0/ 24路由的 下一跳为R2,而且即使这条路径的Cost要比从R4走更大(例如将R3连接R 2的接口Cost调 大),R3也始终不会走R4到达1.1.1.0/24,除非R2挂掉,或者R2-R3丢失邻接关系。这个现 象在思科、华为的真机上验证过了,两者均是如此实现。
3) ABR不会将描述一个Area内部的路由信息的Type-3 LSA再注入回该区域中。
实际上,OSPF区域间路由的传递行为,很有点距离矢量路由协议的味道。以下图为例,在 Area1中,R1及R2都会泛洪Type-1 LSA、Type-2 LSA,两台路由器都能够根据这些LSA计算 区域内路由,而R2作为ABR还担负着另一个责任,就是向Area0通告区域间的路由,实际上 它是向Area0中注入用于描述Area1内路由的Type-3 LSA,而这些Type-3 LSA是不会发回 Area1的——是的,类似水平分割行为对吧?接下来R3利用这些Type-3 LSA计算出了区域间 的路由,并且为Area2注入新的Type-3 LSA用于描述区域间的路由,而这些Type-3 LSA同样 的不会被注入回Area0。
R2在向Area0通告Type-3 LSA,为每条区域间路由携带上Cost值,这个值就是它自己到达各 个目标网段的Cost,而R3收到这些Type-3 LSA并计算路由时,路由的Cost就是在R2所通告 的Cost值的基础上,加上R3自己到R2的Cost值,然后,R3向R4通告这些区域间的路由时也 携带者自己到达目标网段的Cost,而R4到达目标网段的Cost则是在R3的通告值基础上累加 自己到R3的Cost——典型的距离矢量行为。
Type-4 LSA实际上与Type-3 LSA都是Summary LSA,只不过一个是Network Summary LSA——用于描述网段路由,另一个则是ASBR Summary LSA——用于描述ASBR,他们使用的 防环机制是一致的。
三、OSPF域外防环
利用type-4 LSA防环
当一台OSPF路由器将外部路由引入OSPF域后,它就成为了一台 ASBR,被引入的外部路由以Type-5 LSA在整个OSPF域内泛洪。一台 路由器使用Type-5 LSA计算出路由的前提是两个,其一是要收到 Type-5 LSA,其二是要知道产生这个Type-5 LSA的ASBR在哪里。与 ASBR接入同一个区域的路由器能够根据该区域内泛洪的Type-1 LSA 及Type-2 LSA计算出到达该ASBR的最短路径,从而计算出外部路 由。而其他区域的路由器就没有这么幸运了,因为ASBR产生的 Type-1 LSA只能在其所在的区域内泛洪,所以才需要Type-4 LSA。 因此其他区域的路由器在获取Type-4 LSA后便能计算出到达ASBR的 最短路径,进而利用该ASBR产生的Type-5 LSA计算出外部路 由。Type-5 LSA将会被泛洪到整个OSPF域,表面上看,它本身并不 具有什么防环的能力,但是实际上,它并不需要,因为它可以依赖 Type-1 LSA及Type-4 LSA来实现防环。