OSPF协议状态机以及邻居邻接关系的建立

OSPF协议基础

OSPF(Open Shortest Path Firs)最短路径优先路由协议是基于SPF(最短路径树)算法的IGP(内部网关协议)路由协议,应用在以太网组网中用来路由寻路,防环等作用。
在早期还有使用RIP(路由信息协议),RIP与OSPF都是IGB的动态路由协议,最主要不同的是RIP基于跳数来选路,而OSPF基于链路状态信息进行选路。同时RIP由于其协议本身巨大的限制使得RIP已被OSPF取代。

OSPF的特点:

无环路 基于SPF最短路径树算法在设计上就无环路,例如我们的STP协议也使用了SPF树状结构,同样作为防止环路的产生。OSPF还利用区域间的连接规则保证了区域之间无路由环路
收敛快 OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。而RIP在收敛上采用的逐跳收敛,上个设备收敛完后才会发送信息给下一个设备进行收敛。因此收敛速度完全弱于OSPF
扩展性好 可以将一个大的以太网环境划分成多个小区域,解决因网络扩容带来的负面效果,并且分区域后便于管理与维护,同时也减少了用于同步数据的流量(lsa)
支持认证 支持区域认证和接口认证,配置了认证的设备只能与同样配置了认证的且认证通过的设备建立OSPF关系。

OPSF的原理

OSPF工作过程
首先运行了OSPF协议的设备之间互相建立邻居和邻接关系,然后互相发送自己的链路状态信息(LSA),每个设备都组建并维护一个自己的链路状态数据库(LSDB)里面包含了单个OSPF区域内网络链路状态信息,并根据LSDB用SPF算法来构建一个最短路径树,将有效且最优的路由条目填入最终的IP路由表中。
一条LSA包含的信息有:

链路的类型
接口IP地址及掩码
链路上所连接的路由器
链路的带宽(开销)

OSPF报文种类

在讲解OSPF工作过程前先了解下OSPF的报文种类:
OSPF报文
OSPF被封装在IP报文内部,协议号为89
按照类型分为:

Hello报文 用作发现邻居以及维护邻居关系,在广播以及NBMA网络环境中还用于选定DR与BDR
DD(Database Description)报文 数据描述报文,用来描述自己的LSDB,DD报文中的每一条目都只包含了LSA的头部信息,这样就可以减少数据大小。
LSR(Link State Request)报文 在互相交换DD报文后,设备之间知道自己缺少的LSA条目,然后使用LSA请求报文LSR来请求缺失的LSA条目。
LSU(Link State Update)报文 设备收到LSR请求后,将LSA条目放入LSA更新报文LSU中发给对端。
LSACK(Link State Acknowledgment)报文 在收到LSU报文后,设备要发一个确认信息给对端,用来告诉对端我确实收到消息。

HELLO报文的字段格式:
在这里插入图片描述

Network Mask 发送Hello报文的接口的网络掩码。
Hello Interval 发送Hello报文的时间间隔,单位为秒。默认10s
Options 标识发送此报文的OSPF路由器所支持的可选功能。
Router Priority 发送Hello报文的接口的Router Priority,用于选举DR和BDR。
Router Dead Interval 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍Hello Interval即40s
Designated Router 发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
Backup Designated Router 发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
Neighbor 表示已知的邻居Router ID

Router ID用来标识设备在网络中的身份,可以手动配置,如果没有配置就会从接口中选择IP地址最大的IP地址作为自己的Router ID

邻居建立过程

然后来看下邻居与邻接关系的建立过程
在这里插入图片描述
这是设备运行OSPF后的状态情况

DOWN 表明设备刚运行OSPF的初始状态,没有收到任何HELLO报文。但自己会开始根据Hello Interval 10s间隔发送HELLO报文
ATTEMPT 该报文是在广播与NBMA网络环境中才使用的状态,表示设备已经发送了HELLO但是没有收到回应。
Init 表示设备收到了HELLO报文,但是邻居字段中没有自己。这时就会进入init状态并发送
2-Way 设备收到HELLO报文后发现邻居字段中有自己的Route ID就会进入2-Way状态,此状态表明邻居关系成功建立

在这里插入图片描述
邻居关系建立过程可以参考上图所示:
RTA配置OSPF后进入Down状态并按照Hello Interval间隔发送HELLO报文,并且HELLO报文中的邻居字段为空,RTB收到后进入Init状态,同时RTB也会发送HELLO报文,RTA收到后也同样进入了Init状态,当设备收到邻居为空的HELLO报文后在下一个HELLO报文中会将对端的Router ID填入自己的邻居字段中并发送出去,对端收到后会确认邻居字段,发现是自己的Route ID就进入2-Way 状态,双方都进入了2-Way状态后邻居建立完成

LSDB同步过程

ExStart 在建立完邻居关系后,会开始数据库的同步,ExStart阶段会互相发送DD报文用来确认设备的主从关系(master/slave)在此状态下设备不发送DD描述信息。
Exchange 设备会互相发送DD报文描述自己的LSDB数据库信息
Loading 在此状态下设备会互相请求LSA条目,发送LSR,LSU,LSACK报文
Full LSDB同步完成,设备之间形成了邻接关系

在这里插入图片描述

数据库同步过程如上图所示:
进入ExStart状态后RTA与RTB会互相发送DD报文,用来确认设备间的主从关系,并且刚开始大家都觉得自己是主设备,然后会互相比较Router ID,大的一方为主设备,小的为从,这时候RTB的RouterID要大,所以RTB称为了主设备,之后RTA发送DD描述信息报文用来描述自己的LSDB数据库信息,并且进入Exchange状态,RTB也同样会发送DD报文来描述自己LSDB,之后由于RTB为主,RTA为从,后续RTA不再会发送描述DD报文,但会对RTB发来的DD报文进行确认。

LSDB同步过后,会对自己缺失的LSA发起请求,而对端会发送更新报文LSU,本端收到后要回应LSACK报文,至此邻接关系也建立完成。

OSPF支持的网络类型:

OSPF支持的网络类型有:P2P,P2MP,NBMA和广播,默认情况下OSPF认为以太网的网络类型为广播,广域网的网络类型为P2P。

P2P网络 多用于广域网之间设备互连,使用PPP或HDLC数据链路层协议进行互连的网络
广播型网络 多用于局域网设备互连,通过以太网协议互连的网络
NBMA网络 非广播多路访问网络,通过全互连的帧中继链路相连的路由器网络,在现网中很少见
P2MP 多个P2P网络的集合

DR/BDR的选举

DR(Designated Router)指定路由器 一个OSPF区域内选举一个DR,用来与其他非DR设备进行邻接关系建立与数据库的同步
BDR(Backup Designated Router) 备份DR用来在DR出现故障时起来成为新的DR,其他设备要与DR和BDR分别建立邻接关系。
在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。优先级取值范围为0-255,值越高越优先。缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。

发布了8 篇原创文章 · 获赞 7 · 访问量 384

猜你喜欢

转载自blog.csdn.net/network_idiot/article/details/104538877