OSPF的特点
每台路由器都通过链路状态数据库**LSDB(Link State DataBase)**掌握全网的拓扑结构。如图所示,每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。
路由器根据最短路径优先**(Shortest Path First)**算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息。
OSPF的运行机制
1.通过交互Hello报文形成邻居关系
路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。
2.通过泛洪LSA通告链路状态信息
形成邻接关系的路由器之间可以交互LSA。LSA描述了路由器所有的链路、接口、邻居及链路状态等信息。路由器通过交互这些链路信息来了解整个网络的拓扑信息。*由于链路的多样性,OSPF协议定义了多种LSA类型*。
3.通过组建LSDB形成带权有向图
通过LSA的泛洪,路由器会把收到的LSA汇总记录在LSDB中。最终,所有路由器都会形成同样的****LSDB。LSA是对路由器周围网络拓扑结构的描述,而LSDB则是对整个自治系统的网络拓扑结构的描述,LSDB是LSA的汇总。
4.通过SPF算法计算并形成路由
当LSDB同步完成之后,每一台路由器都将以其自身为根,使用SPF算法来计算一个无环路的拓扑图来描述它所知道的到达每一个目的地的最短路径(最小的路径代价)。这个拓扑图就是最短路径树,有了这棵树,路由器就能知道到达自治系统中各个节点的最优路径。
5.维护和更新路由表
根据SPF算法得出最短路径树后,每台路由器将计算得出的最短路径加载到OSPF路由表形成指导数据转发的路由表项,并且实时更新。同时,邻居之间交互Hello报文进行保活,维持邻居关系或邻接关系,并且周期性地重传LSA。
OSPF支持的网络类型
广播类型(Broadcast)
当链路层协议是Ethernet或FDDI(Fiber Distributed Digital Interface)时,缺省情况下,OSPF认为网络类型是Broadcast。
通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为DR/BDR的预留IP组播地址。
以单播形式发送DD报文和LSR报文。
NBMA类型(Non-Broadcast Multi-Access)
当链路层协议是帧中继或X.25时,缺省情况下,OSPF认为网络类型是NBMA。
在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
点到点P2P类型(Point-to-Point)
当链路层协议是PPP、HDLC或LAPB时,缺省情况下,OSPF认为网络类型是P2P。
在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
点到多点P2MP类型(Point-to-Multipoint)
没有一种链路层协议会被缺省的认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。
以组播形式(224.0.0.5)发送Hello报文。
以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
DR和BDR的选举
Router ID
Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的。在实际网络部署中,考虑到协议的稳定,推荐使用路由器上Loopback接口的IP地址做为路由器的Router ID。
Router ID的选取有两种方式:通过命令行手动配置和设备自动设定。
如果没有手动配置Router ID,设备会从当前接口的IP地址中自动选取一个作为Router ID。其选择顺序是:
优先从Loopback地址中选择最大的IP地址作为Router ID。
如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为Router ID。
只有重新配置系统的Router ID或OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。
DR和BDR选举的原因
在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。
为解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。
为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
DR和BDR选举的原则
选举制
当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
终身制
终身制也叫非抢占制。
继承制
网络中无法选举出DR和BDR时
在以上配置的基础上,如果在R1的接口GE1/0/1上执行ospf dr-priority命令将接口的DR优先级配置为0,则R1也失去DR、BDR的选举资格。此时该网络中将没有任何路由器具备DR和BDR的选举资格。
此时所有的邻居状态都只停留在2-Way的状态,网络不能建立邻接关系,各个路由器之间不能完成路由信息的交互
OSPF的接口状态机
OSPF接口共有以下七种状态:
Down:接口的初始状态。表明此时接口不可用,不能用于收发流量。
Loopback:设备到网络的接口处于环回状态。环回接口不能用于正常的数据传输,但可以通过Router-LSA进行通告。因此,进行连通性测试时能够发现到达这个接口的路径。
Waiting:设备正在判定网络上的DR和BDR。在设备参与DR和BDR选举前,接口上会启动Waiting定时器。在这个定时器超时前,设备发送的Hello报文不包含DR和BDR信息,设备不能被选举为DR或BDR。这样可以避免不必要地改变链路中已存在的DR和BDR。仅NBMA网络、广播网络有此状态。
P-2-P:接口连接到物理点对点网络或者是虚拟链路,这个时候设备会与链路连接的另一端设备建立邻接关系。仅P2P、P2MP网络有此状态。
DROther:设备没有被选为DR或BDR,但连接到广播网络或NBMA网络上的其他设备被选举为DR。它会与DR和BDR建立邻接关系。
BDR:设备是相连的网络中的BDR,并将在当前的DR失效时成为DR。该设备与接入该网络的所有其他设备建立邻接关系。
DR:设备是相连的网络中的DR。该设备与接入该网络的所有其他设备建立邻接关系。
OSPF邻居状态机
OSPF邻居共有以下八种状态:
Down:邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。除了NBMA网络OSPF路由器会每隔PollInterval时间对外轮询发送Hello报文,包括向处于Down状态的邻居路由器(即失效的邻居路由器)发送之外,其他网络是不会向失效的邻居路由器发送Hello报文的。
Attempt:这种状态适用于NBMA网络,邻居路由器是手工配置的。邻居关系处于本状态时,路由器会每隔HelloInterval时间向自己手工配置的邻居发送Hello报文,尝试建立邻居关系。
Init:本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文,收到的Hello报文的邻居列表并没有包含本端的Router ID,双向通信仍然没有建立。
2-Way:互为邻居。本状态表示双方互相收到了对端发送的Hello报文,报文中的邻居列表也包含本端的Router ID,邻居关系建立。如果不形成邻接关系则邻居状态机就停留在此状态,否则进入ExStart状态。DR和BDR只有在邻居状态处于这个状态或者更高的状态才会被选举出来。
ExStart:协商主从关系。建立主从关系主要是为了保证在后续的DD报文交换中能够有序的发送。邻居间从此时才开始正式建立邻接关系。
Exchange:交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。
Loading:正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。
Full:建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了完全的邻接关系。
OSPF邻居状态的切换
广播网络中邻接关系的建立过程
NBMA网络中邻接关系的建立过程
点到点网络和点到多点网络
点到点网络、点到多点网络中OSPF邻接关系建立的过程与广播网络相似。不同的是,在点到点、点到多点网络中不需要选举DR和BDR,且点到点网络中的DD报文是单播发送的。
Stub区域和Totally Stub区域
从网络优化的角度考虑,通常在保证网络可达性的同时应尽量减小路由表项的规模,减少网络中LSA报文的泛洪。Area 2如果作为一个常规区域,那么可能存在Type1、Type2、Type3、Type4、Type5共计5中类型的LSA。对于Area 2中的路由器,无论想到达区域外的哪个网络,都必须首先到达到ABR路由器,也就是说这个时候Area 2中的其他路由器并不需要了解外部网络的细节。这种情况下,就产生了OSPF的Stub区域。
Stub区域是一种特殊的区域。Stub区域的ABR不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,Stub区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。
为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器。
配置Stub区域时需要注意下列几点:
骨干区域不能配置成Stub区域。
如果要将一个区域配置成Stub区域,则该区域中的所有路由器都要配置Stub区域属性。
Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
虚连接不能穿过Stub区域。
对于Area 2中的路由器来说,其实区域间的明细路由也没必要都了解,仅保留一个出口让Area 2中的路由器的数据包能够出去就足够了,这就产生了OSPF的Totally Stub区域。Totally Stub区域中,既不允许自治系统外部的路由在区域内传播,也不允许区域间路由在区域内传播,这样就进一步减少了区域内LSA的数量。
NSSA区域和Totally NSSA区域
相比于Stub区域,NSSA区域能够将自治系统外部路由引入并传播到整个OSPF自治系统中,同时又不会学习来自OSPF网络其它区域的路由。
在NSSA区域中,为保证到自治系统外的路由可达,NSSA区域的ABR将生成一条缺省路由,并发布给NSSA区域中的其他路由器。
配置NSSA区域时需要注意下列几点:
骨干区域不能配置成NSSA区域。
如果要将一个区域配置成NSSA区域,则该区域中的所有路由器都要配置NSSA区域属性。
虚连接不能穿过NSSA区域。
在NSSA区域中,可能同时存在多个ABR,为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。
与Totally Stub区域类似,为了进一步减少NSSA区域中LSA的数量,OSPF还定义了Totally NSSA区域。
OSPF区域间环路及防环方法
OSPF在区域内部运行的是SPF算法,这个算法能够保证区域内部的路由不会成环。然而划分区域后,区域之间的路由传递实际上是一种类似距离矢量算法的方式,这种方式容易产生环路。
为了避免区域间的环路,OSPF规定直接在两个非骨干区域之间发布路由信息是不允许的,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。因此,每个ABR都必须连接到骨干区域。
假设OSPF允许非骨干区域之间直接传递路由,则可能会导致区域间环路。如图5所示,骨干区连接到其他网络的路由信息会传递至Area 1。假设非骨干区之间允许直接传递路由信息,那么这条路由信息最终又被传递回去,形成区域间的路由环路。为了防止这种区域间环路,OSPF禁止Area 1和Area 3,以及Area 2和Area 3之间直接进行路由交互,而必须通过骨干区域进行路由交互。这样就能防止区域间环路的产生。
OSPF缺省路由
缺省路由是指目的地址和掩码都是0的路由。当设备无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5或Type7路由。
OSPF缺省路由通常应用于下面两种情况:
由区域边界路由器(ABR)发布Type3缺省Summary LSA,用来指导区域内设备进行区域之间报文的转发。
由自治系统边界路由器(ASBR)发布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用来指导自治系统(AS)内设备进行自治系统外报文的转发。
OSPF缺省路由的发布原则如下:
OSPF路由器只有具有对区域外的出口时,才能够发布缺省路由LSA。
如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型缺省路由。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
OSPF LSA类型
Router-LSA
Router-LSA是一种最基本的LSA,即Type1 LSA。
OSPF网络里的每一台路由设备都会发布Type1 LSA。这种类型的LSA用于描述设备的链路状态和开销,在路由器所属的区域内传播。
Network-LSA
Network-LSA,也就是Type2 LSA,由**DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播**。如图所示,R3向R2发送一条Network-LSA,列出了所有与DR形成完全邻接关系的路由器的Router ID。
Network-summary-LSA
Network-summary-LSA,也叫Type3 LSA,由ABR发布,用来描述区域间的路由信息。ABR将Network-summary-LSA发布到一个区域,通告该区域到其他区域的目的地址。实际上,ABR是将区域内部的Type1和Type2的信息收集起来并汇总之后扩散出去,这就是Summary的含义。如图所示,R2作为ABR,将Area 0和Area 1中的路由信息分别发布对方区域。
ASBR-Summary-LSA
ASBR-summary-LSA,也叫Type4 LSA,由ABR发布,描述到ASBR的路由信息,并通告给除ASBR所在区域的其他相关区域。如图所示,R3作为ABR通告ASBR-summary-LSA到Area 0中。
AS-external-LSA
AS-external-LSA,也叫Type5 LSA,由ASBR产生,描述到AS外部的路由,通告到除Stub区域和NSSA区域以外所有的区域。如图所示,R4作为ASBR发布了一条OSPF AS到外部目的网络的路由信息。
NSSA LSA
除了上述几种LSA之外,还有一种比较特殊的LSA,NSSA LSA,也叫Type7 LSA。NSSA LSA由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。NSSA区域的ABR收到NSSA LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
LSA在各区域中传播的支持情况
OSPF快速收敛
OSPF快速收敛是为了提高路由的收敛速度而做的扩展特性。包括:
OSPF按优先级收敛
OSPF按优先级收敛是指在大量路由情况下,能够让某些特定的路由优先收敛的一种技术。通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。因此,用户可以把和关键业务相关的路由配置成相对较高的优先级,使这些路由更快的收敛,从而使关键的业务受到的影响减小。PRC(Partial Route Calculation)部分路由计算
当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。
通过智能定时器控制LSA的生成与接收,达到对低频变化快速响应,又能对高频变化起到有效抑制的目的。
RFC2328通过如下两个规定来避免网络连接或者路由频繁动荡引起的过多占用设备资源:
同一条LSA在1秒内不能再次生成,即LSA的更新时间间隔5秒。
LSA被接收的时间间隔为1秒。
在网络相对稳定、对路由收敛时间要求较高的组网环境中,可以通过智能定时器指定LSA的更新、被接收的时间间隔为0,使得拓扑或者路由的变化可以通过LSA发布到网络中,或者立即被感知到,从而加快路由的收敛。
通过智能定时器控制路由计算
当网络发生变化时,OSPF需要重新进行路由计算,为避免频繁的网络变化对设备造成的冲击,标准RFC2328规定路由计算时要使用延迟定时器,定时器超时后才进行路由计算。但标准协议中,该定时器定时间隔固定,无法做到既能快速响应又能抑制震荡。
通过智能定时器来控制路由计算的延迟时间,达到对低频率变化快速响应,又能对高频率变化起到有效抑制的目的。
OSPF虚连接
虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。
根据RFC 2328,在部署OSPF时,要求所有的非骨干区域与骨干区域相连,否则会出现有的区域不可达的问题。但是在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求,此时可以通过配置OSPF虚连接来解决这个问题。
Area 2没有连接到骨干区Area 0,所以RouterA不能作为ABR向Area 2生成Area 0中Network1的路由信息,所以RouterB上没有到达Network1的路由。此时可以考虑部署虚连接来解决这个问题。
通过虚连接,两台ABR之间直接传递OSPF报文信息,两者之间的OSPF设备只是起到一个转发报文的作用。由于OSPF协议报文的目的地址不是这些设备,所以这些报文对于两者而言是透明的,只是当作普通的IP报文来转发。
虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,虚连接的两端和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区域(Transit Area)。配置虚连接时,必须在两端同时配置方可生效。
然而,虚连接的存在增加了网络的复杂程度,而且使故障的排除更加困难。因此,在网络规划中应该尽量避免使用虚连接。虚连接仅是作为修复无法避免的网络拓扑问题的一种临时手段。虚链路可以看作是一个标明网络的某个部分是否需要重新规划设计的标志。
OSPF路由聚合
路由聚合是指ABR可以将具有相同前缀的路由信息聚合到一起,只发布一条路由到其它区域。
区域间通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高设备的性能。
OSPF有两种路由聚合方式:
ABR聚合
ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。ASBR聚合
配置路由聚合后,如果本地设备是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。
如果本地设备既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。
OSPF路由过滤
OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
OSPF可以使用的路由策略包括route-policy、访问控制列表(access-list)和地址前缀列表(prefix-list)。
OSPF路由过滤可以应用于以下几个方面:
路由引入
OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。引入路由发布
OSPF引入了路由后会向其它邻居发布引入的路由信息。
可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效。路由学习
通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自治系统外部的路由进行过滤。
该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。区域间LSA学习
通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。
区域间LSA学习和路由学习之间的差异在于:区域间LSA学习直接对进入区域的LSA进行过滤;路由学习不是对LSA进行过滤而是对LSA计算出来的路由是否添加本地路由表进行过滤,学习到的LSA是完整的。区域间LSA发布
通过命令可以在ABR上配置对本区域出方向的Summary LSA进行过滤。该配置只在ABR上配置有效。
OSPF多进程
OSPF支持多进程,在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。
路由器的一个接口只能属于某一个OSPF进程。
OSPF多进程的一个典型应用就是在VPN场景中PE和CE之间运行OSPF协议,同时VPN骨干网上的IGP也采用OSPF。在PE上,这两个OSPF进程互不影响。
最后是一张整理的OSPF思维导图!
文章整理自华为官方文档!