OSPF是目前应用最广泛的动态路由协议之一,其采用链路状态(LS)算法,以及开放最短路径优先(OPEN SHORTEST PATH FIRST)的路由选择算法。在网络拓扑发生变化时,OSPF能够快速更新路由表,从而保证网络的高可用性和高性能。接下来,本文将从多个角度分析OSPF建立的过程。
一、OSPF协议
OSPF是一种链路状态路由协议,我们通过分析它的协议格式来了解OSPF报文中各个字段的作用。OSPF报文主要分为以下8个类型:
类型 | 名称 | 描述
-------|-------------|-----------
1 | Hello | 邻接关系的建立
2 | DBD | 数据库更新
3 | LSR | 链路状态请求
4 | LSU | 链路状态更新
5 | LSAck | 确认报文
6 | 预留 | -
7 | NSSA | 非标准区域
其中,Hello报文主要用于邻接关系的建立,也就是寻找相邻的OSPF路由器;DBD报文用于在邻接状态下进行数据库对比,以决定LSA的交换和同步;LSR报文用于发现已知LSA的缺失或错误情况,以向其它OSPF路由器请求特定的LSA;LSU报文用于向其它路由器发送LSA,以分享链路状态信息;LSAck报文用于确认其它类型的LSA报文。
二、OSPF的邻接建立
邻接关系的建立是OSPF协议中最为基本也是相对简单的一个部分。在一个OSPF域内,每个OSPF路由器都要通过Hello报文与相邻路由器进行通信,以建立邻接关系。邻接建立的过程如下:
1. 初始化状态
在路由器启动时,首先会初始化路由表,进入Init状态。
2. 搜索相邻路由器
路由器将Hello消息发送到它能直接到达的所有邻居,等待它们的响应。若在Hello消息的固定周期内收到响应,则双方开始建立邻接关系。
3. 确定邻居状态
然后,通过Hello消息的确定参数,如Dead Interval和Neighbor Priority等,确定邻居之间的状态,如:Down、Attempt、Init和Full等。只有Full状态的邻居才能与其他路由器交换LSA信息。
4. 形成邻接关系
在确认完邻居状态之后,若判断可达,就建立邻接关系,在此基础上,就可以进一步互相交换网络拓扑信息。
三、OSPF的路由计算
OSPF协议在收到邻居发送过来的路由信息后,会根据设定的算法,来进行路由计算。OSPF中采用开放最短路径优先算法,即OSPF借鉴了Dijkstra算法的思想,采用以SPF(Shortest Path First)为重要特征。具体路由计算过程如下:
1. 建立LSA数据库
路由器之间的邻接关系建立后,将建立起LSA数据库(链路状态数据库)。
2. 生成SPF树
接着,路由器在LSA数据库中搜索并选择出直接相连的最短路径,并建立一棵SPF树。
3. 计算最短路径
根据已经生成的SPF树,计算从当前路由器到达目的网络或主机的最短路径,从而选择出最佳路径。
4. 写入路由表
计算出最佳路径后,将其写入路由表。
四、OSPF的故障恢复
在OSPF网络拓扑发生较大变化时,如某网络被禁用或路由失败,路由器之间的LSA库也会推迟更新。为了保证网络拓扑和路由表的及时更新,OSPF采用了故障恢复的机制,具体过程如下:
1. 发送LSU报文
发生路由故障后,该路由器会
向相邻路由器发送LSU(链路状态更新)报文。
2. 更新LSA数据库
相邻路由器收到更新的LSA后,会更新自己的LSA数据库,并向相邻路由器转发广播。
3. 抑制洪泛
当LSA产生环路时,为了避免路由器因LSA数据库更新而浪费大量的网络资源,OSPF采用了抑制洪泛的方式,即OSPF路由器通过LSA的序列号来更新自己的LSA,以避免洪泛发生。
综上所述,OSPF的建立过程包括邻接关系的建立、路由计算和故障恢复。每一个过程都是很复杂的,只有了解基本的原理和工作方式,才能正确运用OSPF协议实现网络拓扑构建、路由选择和网络故障恢复。