OSPF将整个OSPF域划分为多个区域,区域内部通过拓扑信息计算路由,区域间传递路由信息,实现全网可达。OSPF防环机制主要是体现在域内防环和域间防环。
一、域间防环
-
OSPF的星型拓扑划分规则实际上就是一种防环手段。OSPF要求所有的非0区域必须与骨干区域直接相连,区域间路由需经由骨干区域中转。OSPF要求所有的非0区域必须与骨干区域直接相连, 区域间( Inter- - Area Route )路由需经由骨干区域中转。这个要求使得区域间的路由传递不能发生在两个非0的区域之间,这在很大程度上规避了区域间路由环路的发生,也使得OSPF的区域架构在逻辑上形成了一个类似星型的拓扑,如下图所示。
-
ABR从非骨干区域收到的Type-3 LSA不能用于区域间路由的计算。当一台 ABR 在非 Area0 的区域中收到 Type- - 3 LSA 时,虽然它会将其装载进 LSDB ,但是该路由器不会使用这些 Type- - 3 LSA 进行路由计算,当然它更不会将这些 Type- - 3 LSA 再注入回Area0 中。
-
区域之间存在水平分割机制,从某个区域学到的路由信息不会再通告到这个区域,这和距离适量协议的水平分割相似,区域水平分割可以概括为:从此区域出,不进此区域。
二、域内防环
OSPF基于一类二类LSA的洪泛收集区域内的拓扑信息,将这些拓扑信息转化为有向图,再用SPF算法将有向图转化为最短路径树,而树形结构是无环的,OSPF最后依据树形结构将路由加载到路由表中。
有向图转化
一类LSA描述了某个设备的接口信息,二类LSA只是一类LSA对MA网络的补充,通过查看一二类LSA可以画出单区域的有向图。
1、有向图的画法
- 一类LSA中有四种接口类型,这里我们不考虑virtual类型
Type | Link ID | Data |
---|---|---|
p-2-p | 邻居的RID | 该网段上本地接口的IP地址 |
TransNet | DR的接口的IP地址 | 该网段上本地接口的IP地址 |
StubNet | 该Stub网段的IP网络地址 | 该网段的网路掩码 |
Virtual | 虚连接邻居的RID | 去往该虚连接的本地接口IP |
- Stub网段表示该网段只有数据入口,例如一个Loopback接口就是一个Stub网段。转化为有向图时路由器为一个圈,stub网段也是一个圈,然后再画一条路由器指向stub网段的箭头,箭头上添上该接口的开销值,表示路由器到该网段的需要的开销值。
描述拓扑结构——路由器节点和Stub网段
- Transit网段即一个MA网段,从路由器到所连Transit网段的开销值就是连接到这个网段的接口所配
置的开销值。从一个Transit网段到连接到这个网段的路由器的开销为0。下图的N1也被称为伪节点。
描述拓扑结构——Transit网段
在描述点到点接口的Router-LSA中:
1、通告一个到邻居路由器的点到点链接,Link ID设置为对端的Router
ID,Data设置为本地接口的IP地址;
2、 通告一个到该点到点网段的Stub连接,Link ID设置为该点到点网段
的网络号,Data设置为该点到点网段的网络掩码;
3、上述两个连接的Cost值均为该点到点接口上的Cost值。
- 一类LSA在描述p2p网络时,由于点到点链路两端接口的网络号可能不一致,所以需要有两个link对其描述。
- 两接口处于不同网段的点到点网段的规则如下:两台路由器经由两条有向线段直接相连,每个方向一条。两个接口的网段被表示成Stub网段。每个路由器通告一个Stub连接到该路由器所连的网段
描述拓扑结构——点对点网段
- 两接口处于同一网段的点到点网段的规则如下:两台路由器经由两条有向线段直接相连,每个方向一条。连接两个接口的网段被表示成Stub网段。
描述点对点网段
2、示例:
计算最短路径树——物理拓扑
由LSDB描述的有向图
三、SPF算法
SPF算法每一个路由器都将自己作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF算法中,被称为最短路径树。OSPF计算阶段分为两个阶段:
第一阶段 | 计算Transit节点,忽略Stub节点,生成一个最短路径树 |
---|---|
第二阶段 | 只计算Stub节点,将Stub网段挂到最短路径树上去 |
计算过程中首先初始化最短路径树,RTA将自己做为根节点添加到最短路径树上
- RTA将自己添加到最短路径树上之后,检查自己生成的Router-LSA,对于该LSA中所描述的每一个连接,如果不是一个Stub连接,就把该连接添加到候选列表中,端点ID为Link ID,到根端点的开销为LSA中描述的Metric值。本例中,添加端点4.4.4.4和2.2.2.2。
- 将候选列表中到根端点开销最小的端点移到最短路径树上
- 当有新节点添加到最短路径树上的时候,则检查LS ID为新节点的link-idID的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网段。