4.2.2 路由 OSPF(OSPF的5种报文、8种状态机、邻居与邻接的形成)
目录
- OSPF的5种报文
- Hello报文
- 报文字段简介
- DD/DBD报文
- DD报文字段简介(首个DD报文)
- DD报文字段简介(非首个DD报文——携带简要路由信息)
- LSR报文
- LSR报文简介
- LSU报文
- LSU报文简要介绍
- LSACK报文
- LSACK报文简要介绍
- OSPF的8种状态机与邻居邻接关系建立
- 邻居建立过程
- 1、Down状态
- 2、Init状态
- 3、Attempt状态(NBMA)
- 4、2-way状态
- DR与BDR的作用如图:
- DR与BDR、DR-Other的关系:
- DR与BDR的选举流程:
- 邻居建立过程(图片)
- 邻接建立过程
- 5、Exstart状态
- 选举主从(图片)
- 6、Exchange状态
- DD报文交互过程(图片)
- 7、Loading状态
- LSR、LSU、LSA交互过程(图片)
- 8、Full状态
- OSPF的3种稳定状态
- 邻居与邻接的关系
OSPF的5种报文
OSPF设备之间交互并不是像Rip协议一般直接发送路由信息,而是先发送一些基础报文进行建立邻居。
邻居建立之后再进行交互LSA通过SPF选举出最优的路由加入到路由表中。
每种报文都有各自的作用,且在OSPF邻居与邻接建立过程中起到重要的作用。
在开始之前简单介绍LSA:LSA(链路状态通告) 是链接状态协议使用的一个分组,它包括有关邻居和通道成本的信息。
Hello报文
Hello报文,周期性发送,用于发现和维护OSPF邻居关系。
周期发送的时间受OSPF链路类型影响,如广播网络类型下的Hello发送间隔为10秒。
不同链路状态下的Hello报文发送方式不同,广播网络类型下的Hello报文以组播发送。
扩展了解可结合上一篇内容进行观看:路由 OSPF常见4种网络类型MA、P2P、NBMA、P2MP、OSPF报头字段信息简介。
报文字段简介
DD/DBD报文
DD(Database Description)数据库描述信息,建立邻居的基础上用于描述本地的路由摘要信息,主要用于数据库的同步。
DD报文中携带简要的路由信息。当对端邻居收到之后基于DD报文中的信息从而通过LSR进行请求所需的详细路由信息。
先描述后请求,减少了交换LSA的次数,提高网络的收敛速度。
如果没有DD报文,每次建立邻居后都要发送全部的LSA,如果对方已经有了大部分了,你还发一堆过去就产生了不必要的流量。
不同链路状态下的DD报文发送方式不同,广播网络类型下的DD报文以单播发送。
DD报文字段简介(首个DD报文)
DD报文字段简介(非首个DD报文——携带简要路由信息)
LSR报文
LSR(Link State Request)链路状态请求,用于请求DD报文中的详细路由信息。
不同链路状态下的LSR报文发送方式不同,广播网络类型下的LSR报文以单播发送。
LSR报文简介
LSU报文
LSU(Link State Update)链路状态更新,用于回复详细的LSR请求信息。
同时该LSU报文还用于在OSPF链路状态更新/拓扑变更时进行路由的更新通知。
即自动发送LSU报文,并不需要通过LSR请求后发送,主要为了让OSPF的网络更快的适应网络变更。不至于说当发现路由不通的时候再进行路由更新。
不同链路状态下的LSU报文发送方式不同,广播网络类型下的LSU报文以组播发送。
LSU报文简要介绍
LSACK报文
LSACK(Link State ACK)链路状态确认,用于对LSU报文内容进行确认。
回复LSACK可保障LSA传输的可靠性,不至于说发送LSU丢了也不知道。
不同链路状态下的LSACK报文发送方式不同,广播网络类型下的LSACK报文以组播发送。
LSACK报文简要介绍
OSPF的8种状态机与邻居邻接关系建立
OSPF在邻居与邻接建立的过程中会经过多个状态机的变化,状态机的出现不仅能让我们了解OSPF建立过程,也能在OSPF出现故障的时候通过状态机的状态来粗略判断问题的所在。
邻居建立过程
1、Down状态
启用了OSPF功能的链路默认成为down状态,并开始向外发送Hello报文(基于网络类型的不同发送方式也会不同,广播类型Hello为组播发送)
》报文发出之后,从Down状态转Init状态
值得注意的是OSPF的每条链路都会经历状态机,每条OSPF链路的状态机互不影响。
【简:启用OSPF的链路从Down状态开始,向外发送Hello报文后转为Init状态】
2、Init状态
OSPF设备接收到对端的Hello报文后,将再发送一个Hello报文,并在其它附上对端的router-id。
在Init状态下的链路,如果接收到传来的Hello包中含有自己的router-id,则表示对端已经发现了自己,此时链路就能成为2-way状态了。
【简:收到Hello回复Hello并携带邻居的router-id,如果Init链路收到Hello中有自己设备的router-id则转为2-way状态】
3、Attempt状态(NBMA)
该状态仅发生在NBMA网络中,表明该链路在发送Hello报文之后,到达了失效时间(dead interval)仍然没有收到对端回复Hello报文。
处于该状态下的链路仍然会向对端发送Hello报文。
4、2-way状态
链路处于该状态下,表明邻居建立成功。
》其它链路类型在成为2-way之后,发送第一个空DD报文后,进入Exstart状态。
(因为在其它网络类型中,DD报文通过单播发送,无法确认谁先发送DD报文,同时为了保障DD的可靠传递,需要进行选举主机设备)
》如果链路为P2P类型,则直接进入Exchange状态进行交互DD报文
(因为p2p类型链路所有报文交互都是组播,同时p2p是点到点网络,完全不需要担心LSA传递过程中丢失)
在邻居建立过程中,为了提高OSPF网络收敛的速度。在广播网络中建立邻居时,需要同时进行DR与BDR的选举。(2-way建立之前或之后就已经选举出DR与BDR了)
选举DR与BDR主要为了解决同网络中,报文信息相互发送造成网络中流量过大的问题。通过选举DR与BDR实现流量的统一整理与发送,减少网络中的OSPF报文过多,同时提高收敛的速度。
DR与BDR的作用如图:
DR与BDR、DR-Other的关系:
- 在一个广播网络中可以没有BDR,但必须存在一个DR设备。没有成为DR与BDR设备的其它OSPF设备称为DR-Other设备。
- 每条MA/NBMA链路中,都会独立选举DR、BDR。
- BDR是DR备份,DR失效之后,BDR成为DR,同时也将重新选举新的BDR。
- DR与BDR没有抢占性,当网络中出现新的更优先的路由器,也不会成为抢占现有网络中的DR身份。
- 接口优先级为0将不参与选举,如果此时为DR/BDR将立马失效,成为DRother。
1、DR、BDR、DR-Other的邻居与邻接关系:
-
DR、BDR、DR-Other都能相互建立邻居关系,因为能够交互Hello报文。
-
但建立邻接关系的只有DR、BDR、DR与DR-Other之间、BDR与DR-Other之间。
-
因为在广播网络中OSPF规定DR-Other之间不能直接交互DD报文、LSR、LSU、LSACK报文,所以DR-Other之间无法建立邻接关系。
2、DR、BDR、DR-Other之间的报文交互
-
DR-Other交互路由信息时,通过组播地址224.0.0.6向DR与BDR发送路由信息。
-
DR、BDR收到224.0.0.6传来的报文时,通过组播地址224.0.0.5向所有的OSPF发送信息。
-
如果DR-Other有路由更新的时候,DR-Other会向224.0.0.6发送LSU信息,再由DR向224.0.0.5发送LSU报文,通知所有的OSPF设备更新路由。
DR与BDR的选举流程:
1、优选广播域中接口优先级大的,默认接口优先级为1。
2、优先级相同,比较router-id,大的成为DR,次BDR、其它DRother。
注意:在配置OSPF的时候,第一台配置之后的40秒内,同一个广播域中如果没有遇到比自己更优先的设备,自己将成为DR,往后的其它设备将是这个广播网络中的BDR与DRother。
所以在配置OSPF的时候,先配置实际DR的设备,其它再配置BDR、DRother设备,这样能有效保障初始的正常选举。
当然也能通过reset ospf process的方式将的身份有误的OSPF设备进程注销,从而进行重新选举,但在实际环境中谨慎使用。
邻居建立过程(图片)
邻接建立过程
5、Exstart状态
OSPF为了保障LSA信息在传递过程中的可靠性,定义了OSPF主从身份(Master、Slave)。
OSPF为何设计如此复杂的交互机制?
1、OSPF基于IP层的协议,IP本身是一种不可靠、不安全的。
2、通过设置主从设备+序列号,让报文有序的进行交互,能有效提高OSPF传递报文的可靠性。
选举主从的方式:通过OSPF的第一个空DD报文,比较router-id,router-id大的成为主。
选举主从(图片)
6、Exchange状态
如何通过DD报文确定主从身份?
主从设备在Exchange状态下的工作过程:
(1)基于选出的主从,slave主动向master发送DD(LSA信息)报文描述本地LSDB数据库信息,此时报文序列号使用的是master的序列号。
(2)masterr收到DD信息之后序列号递增并回复自己的DD报文(携带自己的链路状态信息)
(3)slavev收到master回复的DD时,需要回复确认信息,序列号为master的序列号(slave不可递增序列号值)
DD报文交互过程(图片)
- 1、从设备向主设备发送序列号为Y的DD报文,携带自己的设备路由简要信息。
- 从设备发送的序列号Y为主设备的序列号,该序列号是在空DD报文主从选举时知道的。
- 2、主设备向从设备发送序列号为Y+1的DD报文,携带主设备路由简要信息。
- 序列号+1,对从设备发来的DD报文进行确认。同时也是作为下一个从设备DD报文的序列号。
- 3、从设备向主设备发送序列号为Y+1的空DD报文,用于确认收到主设备的DD报文。
- 仔细观察会发现与TCP协议报文交互相似,在给对端发送报文之后,对端会给予一个确认的回复报文。如此下来就能够有效提升OSPF报文交互的可靠性,这也就是主从机制的作用。
7、Loading状态
基于DD报文中的描述信息,OSPF设备按需求发出LSR与LSA、LSACK等报文。
LSR、LSU、LSA交互过程(图片)
- A设备主要向B设备发起LSR请求详细的LSA信息。
- B设备通过LSU回复A设备所需的详细LSA信息。
- A设备收到LSU确认无误之后,回复B设备LSACK。
- A设备与B设备在完成所有LSA交互之后,就能够进入Full状态了。
- 这里不需要应用到主从了嘛?
- 不需要,主从机制主要是在Exchange状态下保障DD报文的可靠传输。而在Loading状态下有LSACK保障可靠传输。
8、Full状态
该状态下表示链路LSA已经交互成功,邻接关系建立完成。
后继链路将定时发送Hello报文进行维持邻接关系,如果链路到达Dead死亡时间未能收到Hello报文,则邻接关系断开,成为Down状态重新进行建立。
Full状态下会将学习到的LSA信息加入到LSDB表中,通过SPF算法计算选举出最优的路由条目加入到路由表中。
OSPF的3种稳定状态
什么是稳定的状态?即链路状态会长时间所处的状态机。
在OSPF状态机中,有三个稳定的状态机状态:Down、2-way、Full
Down:启用OSPF功能的链路默认所处状态机 或者 邻居失效后的状态。
2-way:在交互了Hello报文建立邻居之后所处的状态,DR-Other与DR-Other之间所处的状态。
Full:在邻接建立成功之后的状态,也是OSPF的最终状态。
邻居与邻接的关系
邻居是通过Hello报文发现了彼此,但没有交互LSA信息。
邻接是基于邻居的基础,交互了LSA信息,相互了解了对方的路由信息。
DR-Other与DR-Other之间可以通过Hello报文发现彼此,但不能直接进行交互LSA信息,需要通过广播网络中的DR设备进行统一的发送LSA。故DR-Other与DR-Other之间只会建立邻居,不会建立邻接。