OSPF基础

2018年7月6日22:39:10

OSPF基础

OSPF协议具有以下特点:

  • OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域;
  • OSPF通过LSA(Link State Advertisement)的形式发布路由;
  • OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
  • OSPF报文封装在IP报文内,可以采用单播或组播的形式发送
  • 报文类型

    表1 报文类型
    报文类型 报文作用
    Hello报文 周期性发送,用来发现和维持OSPF邻居关系。
    DD报文(Database Description packet) 描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。
    LSR报文(Link State Request packet) 用于向对方请求所需的LSA。

    设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。

    LSU报文(Link State Update packet) 用于向对方发送其所需要的LSA。
    LSAck报文(Link State Acknowledgment packet) 用来对收到的LSA进行确认。

    LSA类型

    表2 LSA类型
    LSA类型 LSA作用
    Router-LSA(Type1) 每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。
    Network-LSA(Type2) 由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。
    Network-summary-LSA(Type3) 由ABR产生,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally STUB或NSSA区域。
    ASBR-summary-LSA(Type4) 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
    AS-external-LSA(Type5) 由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了STUB区域和NSSA区域)。
    NSSA LSA(Type7) 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
    Opaque LSA(Type9/Type10/Type11) Opaque LSA提供用于OSPF的扩展的通用机制。其中:

    • Type9 LSA仅在接口所在网段范围内传播。用于支持GR的Grace LSA就是Type9 LSA的一种。
    • Type10 LSA在区域内传播。用于支持TE的LSA就是Type10 LSA的一种。
    • Type11 LSA在自治域内传播,目前还没有实际应用的例子。

    路由器类型

    OSPF协议中常用到的路由器类型如表3所示。

    表3 路由器类型
    路由器类型 含义
    区域内路由器(Internal Router) 该类设备的所有接口都属于同一个OSPF区域。
    区域边界路由器ABR(Area Border Router) 该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域。

    ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。

    骨干路由器(Backbone Router) 该类设备至少有一个接口属于骨干区域。

    所有的ABR和位于Area0的内部设备都是骨干路由器。

    自治系统边界路由器ASBR(AS Boundary Router) 与其他AS交换路由信息的设备称为ASBR。

    ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。

    路由类型

    AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。

    表4中按优先级从高到低顺序列出了路由类型。

    表4 路由类型
    路由类型 含义
    Intra Area 区域内路由。
    Inter Area 区域间路由。
    第一类外部路由(Type1 External) 这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。

    到第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销。

    第二类外部路由(Type2 External) 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。

    所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。

    区域类型

    表5 区域类型
    区域类型 作用
    普通区域 缺省情况下,OSPF区域被定义为普通区域。普通区域包括标准区域和骨干区域。

    • 标准区域是最通用的区域,它传输区域内路由,区域间路由和外部路由。
    • 骨干区域是连接所有其他OSPF区域的中央区域。骨干区域通常用Area 0表示。
    STUB区域 不允许发布自治系统外部路由,只允许发布区域内路由和区域间的路由。

    在STUB区域中,路由器的路由表规模和路由信息传递的数量都会大大减少。

    为了保证到自治系统外的路由可达,由该区域的ABR发布Type3缺省路由传播到区域内,所有到自治系统外部的路由都必须通过ABR才能发布。

    Totally STUB区域 不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。

    在Totally STUB区域中,路由器的路由表规模和路由信息传递的数量都会大大减少。

    为了保证到自治系统外和其他区域的路由可达,由该区域的ABR发布Type3缺省路由传播到区域内,所有到自治系统外部和其他区域的路由都必须通过ABR才能发布。

    NSSA区域 NSSA区域允许引入自治系统外部路由,由ASBR发布Type7 LSA通告给本区域,这些Type7 LSA在ABR上转换成Type5 LSA,并且泛洪到整个OSPF域中。

    NSSA区域同时保留自治系统内的STUB区域的特征。

    该区域的ABR发布Type7缺省路由传播到区域内,所有域间路由都必须通过ABR才能发布。

    Totally NSSA区域 Totally NSSA区域允许引入自治系统外部路由,由ASBR发布Type7 LSA通告给本区域,这些Type7 LSA在ABR上转换成Type5 LSA,并且泛洪到整个OSPF域中。

    Totally NSSA区域同时保留自治系统内的Totally STUB Area区域的特征。

    该区域的ABR发布Type3和Type7缺省路由传播到区域内,所有域间路由都必须通过ABR才能发布。

    OSPF支持的网络类型

    OSPF根据链路层协议类型,将网络分为如表6所列四种类型。

    表6 OSPF网络类型
    网络类型 含义
    广播类型(Broadcast) 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。

    在该类型的网络中:

    • 通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR( Backup Designated Router)的预留IP组播地址。
    • 以单播形式发送DD报文和LSR报文。
    NBMA类型(Non-Broadcast Multi-Access) 当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。

    在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

    点到多点P2MP类型(Point-to-Multipoint) 没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。

    在该类型的网络中:

    • 以组播形式(224.0.0.5)发送Hello报文。
    • 以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
    点到点P2P类型(point-to-point) 当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。

    在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

    STUB区域

    STUB区域是一些特定的区域,STUB区域的ABR不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。

    STUB区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,STUB区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。

    为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由,并发布给STUB区域中的其他非ABR路由器。

    配置STUB区域时需要注意下列几点:

    • 骨干区域不能配置成STUB区域。
    • 如果要将一个区域配置成STUB区域,则该区域中的所有路由器都要配置STUB区域属性。
    • STUB区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
    • 虚连接不能穿过STUB区域。

    NSSA区域

    NSSA(Not-So-Stubby Area)区域是OSPF特殊的区域类型。NSSA区域与STUB区域有许多相似的地方,两者都不传播来自OSPF网络其它区域的外部路由。差别在于STUB区域是不能引入外部路由,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中。

    当区域配置为NSSA区域后,为保证到自治系统外的路由可达,NSSA区域的ABR将生成一条缺省路由,并发布给NSSA区域中的其他路由器。

    配置NSSA区域时需要注意下列几点:

    • 骨干区域不能配置成NSSA区域。
    • 如果要将一个区域配置成NSSA区域,则该区域中的所有路由器都要配置NSSA区域属性。
    • 虚连接不能穿过NSSA区域。

    邻居状态机

    在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。

    • 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
    • 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

    OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。

    • Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
    • Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时后仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
    • Init:收到Hello报文后状态为Init。
    • 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
    • Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
    • Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
    • Loading:DD报文交换完成即Exchange done,此时状态为Loading。
    • Full:LSR重传列表为空,此时状态为Full。

    OSPF报文认证

    OSPF支持报文验证功能,只有通过验证的OSPF报文才能接收,否则将不能正常建立邻居。

    路由器支持两种验证方式:

    • 区域验证方式
    • 接口验证方式

    当两种验证方式都存在时,优先使用接口验证方式。

    OSPF路由聚合

    路由聚合是指ABR可以将具有相同前缀的路由信息聚合到一起,只发布一条路由到其它区域。

    区域间通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高设备的性能。

    OSPF有两种路由聚合方式:

    • ABR聚合

      ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。

    • ASBR聚合

      配置路由聚合后,如果本地设备是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。

      如果本地设备既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。

    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路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。

    不同区域缺省路由发布原则如表7所示。

    表7 OSPF缺省路由发布原则
    区域类型 作用
    普通区域 缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。

    当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治域中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治域中。

    STUB区域 STUB区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。

    区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个STUB区域内。这样,到达自治系统的外部路由就可以通过ABR到达。

    Totally STUB区域 Totally STUB区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。

    区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally STUB区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个STUB区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。

    NSSA区域 NSSA区域允许引入通过本区域的ASBR到达的少量外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。即到达自治系统外部的路由只能通过本区域的ASBR到达。

    只配置了NSSA区域是不会自动产生缺省路由的。

    此时,有两种选择:

    • 如果希望到达自治系统外部的路由通过该区域的ASBR到达,而其它外部路由通过其它区域出去。此时,ABR会产生一条Type7 LSA的缺省路由,通告到整个NSSA区域内。这样,除了某少部分路由通过NSSA的ASBR到达,其它路由都可以通过NSSA的ABR到达其它区域的ASBR出去。
    • 如果希望所有的外部路由只通过本区域NSSA的ASBR到达。则必须在ASBR上手动通过命令进行配置,使ASBR产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,所有的外部路由就只能通过本区域NSSA的ASBR到达。

    上面两种情况的区别是:

    • 在ABR上无论路由表中是否存在缺省路由0.0.0.0,都会产生Type7 LSA的缺省路由。
    • 在ASBR上只有当路由表中存在缺省路由0.0.0.0时,才会产生Type7 LSA的缺省路由。

    因为缺省路由只是在本NSSA区域内泛洪,并没有泛洪到整个OSPF域中,所以本NSSA区域内的路由器在找不到路由之后可以从该NSSA的ASBR出去,但不能实现其他OSPF域的路由从这个出口出去。Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。

    Totally NSSA区域 Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。

    区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生一条缺省的Type3 LSA通告到整个NSSA区域内。这样,其他区域的外部路由和区域间路由都可以通过ABR在区域内传播。

    OSPF路由过滤

    OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。

    OSPF可以使用的路由策略包括route-policy,访问控制列表(access-list),地址前缀列表(prefix-list)。

    OSPF路由过滤可以应用于以下几个方面:

    • 路由引入

      OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。

    • 引入路由发布

      OSPF引入了路由后会向其它邻居发布引入的路由信息。

      可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效。

      当OSPF引入大量外部路由,并发布给路由容量较小的设备时,导致设备学习到的路由数量超过其容量而发生异常重启。为了避免这种情况发生,设置限制OSPF发布引入外部路由的数量,从而保证设备的稳定运行。

    • 路由学习

      通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自治系统外部的路由进行过滤。

      该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。

    • 区域间LSA学习

      通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。

      表8 区域间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 RFC1583兼容

    RFC1583是OSPFv2协议比较早的版本。

    OSPF在计算外部路由时,由于RFC2328和RFC1583的路由计算规则不一致,可能会导致路由环路。为了避免路由环路的发生,RFC2328中提出了RFC1583兼容特性。

    • 使能RFC1583兼容后,OSPF采用RFC1583的路由计算规则。
    • 不使能RFC1583兼容时,OSPF采用RFC2328的路由计算规则。
    OSPF是根据5类LSA来计算外部路由的。RFC1583兼容特性主要用于路由器收到5类LSA后:

    • 选择到达产生该LSA的ASBR或该LSA所描述的转发地址(Forwarding Address)的路径;
    • 选择到达相同目的地的外部路径。

    缺省情况下,OSPF兼容RFC1583。

    OSPF数据库超限(OSPF Database Overflow)

    OSPF协议要求同一个区域中的设备保存相同的链路状态数据库LSDB(Link-State Database)。随着网络上路由数量不断增加,一些设备由于系统资源有限,不能再承载如此多的路由信息,这种状态就被称为OSPF数据库超限(OSPF Database Overflow)。

    对于路由信息不断增加导致设备系统资源耗尽而失效的问题,可以通过配置Stub或NSSA区域来解决,但Stub或NSSA区域的方案不能解决动态的路由增长导致的OSPF数据库超限问题。为了解决这个问题,通过设置LSDB中外部路由的最大数量,动态限制OSPF数据库的规模。

    说明:

    在整个OSPF自治系统中,所有设备设置的LSDB中外部路由的最大数量必须一致。

     

    当LSDB中外部路由的数量达到最大数量时,设备进入超限状态(Overflow),同时启动超限状态定时器,设备在定时器超时后自动退出超限状态,详细描述如表9所示。

    表9 OSPF数据库超限状态详细描述
    阶段 OSPF处理流程
    超限状态 设备删除所有自己产生的非缺省的外部路由,不再发布非缺省的外部路由。

    丢弃新收到的非缺省的外部路由,不回复确认报文。

    如果超限状态定时器超时,则检查外部路由数量是否仍然超过最大数量:

    • 超过最大数量,则重启定时器。
    • 低于最大数量,则退出超限状态。
    退出超限状态 关闭超限状态定时器。

    发布非缺省的外部路由。


  • 更新时间:2018年7月6日22:39:10 ,共 8885 字。