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