写点什么

OSPF 邻居状态详解

发布于: 2021 年 03 月 16 日

OSPF 邻居路由器之间之所以要建立邻接关系,是为了相互交换路由信息。在广播网络环境中,并非每台邻居路由器之间都要建立“齐备的” OSPF 邻接关系。OSPF 邻居路由器之间会通过 Hello 协议(互发 Hello 数据包),来建立和维持邻接关系。


路由器会从所有参与 OSPF 进程的接口定期外发 Hello 数据包。当本路由器(的 Router-ID)被邻居路由器列入其 Hello 数据包的邻居路由器字段时,则表明建立起了双向( two-way)通信。在广播和 NBMA 网络环境中,OSPF 路由器之间还会利用 Hello 数据包来选举 DR/BDR。


与邻居路由器建立起 two-way 通信(关系)之后,本 OSPF 路由器会做出是否与其建立邻接关系的决定。建不建立邻接关系,则要视邻居路由器的状态和 OSPF 网络类型而定。若(用来连接 OSPF 邻居关系的路由器接口的)OSPF 网络类型为 broadcast 或 nonbroadcast,则 OSPF 路由器只会跟 DR 及 BDR 建立邻接关系。而若 OSPF 网络类型为其他任意类型,则 OSPF 邻居路由器之间会两两建立起 OSPF 邻接关系。


完成数据库的同步,是建立 OSPF 邻接关系的第一步。为此,每台路由器都会互发 DBD 数据包,包中的内容是对路由器本身所掌握的链路状态数据库信息的简要描述。也就是说,OSPF 邻居路由器之间只会交换 LSA 包头。在数据库的交换过程中,还会发生“主/从”路由器的选举。每台路由器会对自己在 DBD 交换过程中收到的 LSA 包头进行记录。在 DBD 交换的最后阶段,OSPF 路由器会发送 LSR 数据包,向邻居路由器请求相关 LSA,这些 LSA 的包头则在 DBD 交换过程中获知。邻居路由器会回复以 LSU 数据包,其中会包含其所请求的 LSA 的完整内容。收到 LSU 数据包之后,OSPF 路由器会发送 LSack 数据包进行确认。至此,OSPF 邻居双方将自己所掌握的数据库信息相互交换完毕,邻接关系也将进入 Full 状态。


OSPF 路由器可与邻居路由器维系多种邻居状态,如下所列:


· Down 状态;


· Attempt 状态;


· Init 状态;


· 2-way 状态;


· Exstart 状态;


· Exchange 状态;


· Loading 状态;


· Full 状态。


OSPF Down 状态


如图所示,R1 和 R2 都运行 OSPF。邻居状态显示为 Down 状态,表明 OSPF 路由器尚未从邻居路由器收到任何 OSPF 协议数据包。



OSPF Attempt 状态


只有在 NBMA 网络环境中,才会出现 Attempt 状态。若一台 OSPF 路由器将其邻居路由器显示为 Attempt 状态,则表示未从该邻居路由器收到任何 OSPF 协议数据包,但自己已“尽其所能”地(serious effort)“联络”过该邻居路由器。“尽其所能”意谓:此 OSPF 路由器会定期(按 Hello 数据包中 Hello interval 字段所指明的时间值)连续发出 Hello 数据包,来“联络”邻居路由器。如图所示,R1 发出了 Hello 数据包,表明自己既未发现其他路由器,也不知 DR 何在。



OSPF Init 状态


Init 状态表示有一方收到了 Hello 数据包。如图所示,R1 发出了 Hello 数据包。收到此 Hello 数据包之后,由于 R2 在其所含邻居路由器字段中未发现自己的 Router-ID,因此邻居双方会步入单向(接收)状态。



OSPF 2-way 状态


当 OSPF 邻居双方都收到了对方发出的 Hello 数据包之后,就会建立起 2-way 状态,这也就拉开了 OSPF 邻接关系建立的序幕。在 2-way 状态的建立过程中,会选举出了 DR 和 BDR。如图所示,R2 所发 Hello 数据包的邻居路由器字段中包含了 R1 的 Router-ID,收到此包之后,R1 就知道 R2 已经收到了自己先前发出的 Hello 数据包。由于 R2 的 Router-ID 更高,因此会在此 Hello 数据包的指定路由器字段中填入自己的 Router-ID,表明自己的 DR 身份。



OSPF Exstart 状态


在此状态下,OSPF 邻居双方会发起数据库同步过程。此外,还会选举出主/从路由器。为 DBD 交换所用的第一个序列号也会在 Exstart 状态下确定。如图所示,R1 和 R2 都发出了自己的第一个 DBD 数据包。Router-ID 最高的路由器被推举成为主路由器。本例,R2 的 Router-ID 更高,故成为主路由器。



OSPF Exchange 状态


在 Exchange 状态下,OSPF 邻居双方会互发描述本机所持完整链路状态数据库的 DBD 数据包。每个 DBD 数据包都必须明确得到确认。只允许存在一个未经确认的(在途)DBD 数据包。在此状态下,OSPF 路由器还会发出 LSR 数据包,来请求新的 LSA 实例。如图所示为 OSPF 邻居双方在 Exchange 状态下的“所作所为”。由下图可知,R1 和 R2 正交换各自的链路状态数据库信息。此外,还可获知 R2 将其发出的最后一个 DBD 数据包中的 M 位置 0(图中最后一个箭头),表明“主”路由器已无更多 DBD 数据包要发。在此情形, R1(“从”路由器)会发送其余的 DD 数据包,发完之后,也会顺带在最后一个 DD 数据包中将 M 位置 0。此时,便标志着 OSPF 邻居双方已经交换完描述各自链路状态数据库的完整信息了。



OSPF Loading 状态


在 Loading 状态下,OSPF 邻居双方会互发 LSR 数据包,以请求在 Exchange 状态下(由对方通过 DBD 数据包通告,但自己)未曾收到的 LSA 的最新实例。由图可知,R1 正处于 Loading 状态,且已发出 LSR 数据包,要求 R2 向其发出某条 LSA 的最新实例。



OSPF Full 状态


此状态表示 OSPF 邻居双方已经交换了完整的信息。如图所示,R1 和 R2 已经交换完了各自的链路状态数据库信息,且同处于 Full 状态。



OSPF 是一种链路状态路由协议。OSPF 协议数据包分 5 种—Hello 数据包、DBD 数据包、链路状态请求数据包、链路状态更新数据包和链路状态确认数据包。在 OSPF 邻居双方建立邻接关系的过程中,会随邻居关系状态的变迁来发送上述数据包。OSPF LSA 的类型也有数种,包括:路由器 LSA、网络 LSA、汇总 LSA、ASBR 汇总 LSA、外部 LSA 和 NSSA LSA 等。OSPF 支持多种区域类型,包括普通区域、stub 区域、 totally stub 区域、 NSSA 区域以及 totally NSSA 区域。可根据网络设计需求来构建上述区域。stub 区域受到的限制最多,只能依仗 ABR 以汇总 LSA 形式通告的默认路由,来转发目的网络在本区域之外的流量。


OSPF 可在多种介质上运行,包括:多路访问介质、点到点介质、NBMA 介质和按需电路。在部分互连的 NBMA 网络环境中,推荐使用的 OSPF 网络类型为 point-to-multipoint。


当介质不支持多播时,才建议使用 OSPF point-to-multipoint nonbroadcast 网络类型。在此情形,不会进行 DR 和 BDR 的选举。


OSPF 邻居双方在建立起邻接关系之前,要经历多个阶段。邻居关系为 Full 状态则表明邻接关系建立完毕,邻居路由器之间也已交换完了各自的链路状态数据库。广播介质网络环境中,OSPF 路由器只会与 DR 和 BDR 建立邻接关系,与其他所有邻居路由器维系 2-way 状态。这是为了简化网络中的 OSPF 邻接关系,降低 LSA 泛洪流量。


关注公众号:网络技术平台,回复 “ *资料* ” 获取视频、培训教程、实验手册、电子书。


评论

发布
暂无评论
OSPF邻居状态详解