资料摘自华为官方网站:http://support.huawei.com/carrier/docview!docview?nid=SC0000808981#11
目 录
10 OSPF
10.1 介绍
10.2 原理描述
10.2.1 OSPF基础
OSPF协议具有以下特点:
- OSPF把自治系统划分成逻辑意义上的一个或多个区域。
- OSPF通过LSA(Link State Advertisement)的形式发布路由。
- OSPF依靠在OSPF区域内各路由器间交互OSPF报文来达到路由信息的统一。
- OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。
- 支持OSPF接口使能特性,方便用户通过网管软件管理OSPF。
- 支持Router-id冲突检测并修复功能,实现当OSPF检测到Router-id冲突后选择新的Router-id,从而避免路由震荡。
OSPF报文类型
报文类型 | 报文作用 |
---|---|
Hello报文 | 周期性发送,用来发现和维持OSPF邻居关系。 |
DD报文(Database Description packet) | 描述本地LSDB的摘要信息,用于两台路由器进行数据库同步。 |
LSR报文(Link State Request packet) | 用于向对方请求所需的LSA。 路由器只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU报文(Link State Update packet) | 用于向对方发送其所需要的LSA。 |
LSAck报文(Link State Acknowledgment packet) | 用来对收到的LSA进行确认。 |
LSA类型
LSA类型 | LSA作用 |
---|---|
Router-LSA(Type1) | 每个路由器都会产生,描述了路由器的链路状态和开销,在发布路由器所属的区域内传播。 |
Network-LSA(Type2) | 由DR(Designated Router)产生,描述本网段的链路状态,在DR所属的区域内传播。 |
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的扩展的通用机制。其中:
|
路由器类型
OSPF协议中常用到的路由器类型如图10-1所示。
路由器类型 | 含义 |
---|---|
区域内路由器(Internal Router) | 该类路由器的所有接口都属于同一个OSPF区域。 |
区域边界路由器ABR(Area Border Router) | 该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
骨干路由器(Backbone Router) | 该类路由器至少有一个接口属于骨干区域。 所有的ABR和位于Area0的内部路由器都是骨干路由器。 |
自治系统边界路由器ASBR(AS Boundary Router) | 与其他AS交换路由信息的路由器称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。 |
OSPF路由类型
AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。
表10-4中按优先级从高到低顺序列出了路由类型。
路由类型 | 含义 |
---|---|
Intra Area | 区域内路由。 |
Inter Area | 区域间路由。 |
第一类外部路由(Type1 External) | 这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。 到第一类外部路由的开销=本路由器到相应的ASBR的开销+ASBR到该路由目的地址的开销。 |
第二类外部路由(Type2 External) | 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。 所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。 |
OSPF支持的网络类型
OSPF根据链路层协议类型,将网络分为如表10-6所列四种类型。
网络类型 | 含义 |
---|---|
广播类型(Broadcast) | 当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。 在该类型的网络中:
|
NBMA类型(Non-broadcast multiple access) | 当链路层协议是ATM时,缺省情况下,OSPF认为网络类型是NBMA。 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 |
点到多点P2MP类型(Point-to-Multipoint) | 没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。 在该类型的网络中:
|
点到点P2P类型(point-to-point) | 当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。 在该类型的网络中:
|
Stub区域
Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,Stub区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。
为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器。
配置Stub区域时需要注意下列几点:
-
骨干区域不能配置成Stub区域。
-
如果要将一个区域配置成Stub区域,则该区域中的所有路由器都要配置Stub区域属性。
-
Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
-
虚连接不能穿过Stub区域。
OSPF路由聚合
路由聚合是指将具有相同前缀的路由信息聚合在一起,只发布一条路由到其它区域。
通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高路由器的性能。
OSPF有两种路由聚合方式:
-
ABR聚合
ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。
-
ASBR聚合
配置引入路由聚合后,如果本地路由器是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。
如果本地路由器既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。
OSPF缺省路由
缺省路由是指目的地址和掩码都是0的路由。当路由器无精确匹配的路由时,就可以通过缺省路由进行报文转发。
OSPF缺省路由通常应用于下面两种情况:
-
由区域边界路由器(ABR)发布Type3缺省Summary LSA,用来指导区域内路由器进行区域之间报文的转发。
-
由自治系统边界路由器(ASBR)发布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用来指导自治系统(AS)内路由器进行自治系统外报文的转发。
当路由器无精确匹配的路由时,就可以通过缺省路由进行报文转发。由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5/7路由。
OSPF缺省路由的发布原则如下:
- OSPF路由器只有具有对外的出口时,才能够发布缺省路由LSA。
- 如果OSPF路由器已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型缺省路由。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
- 外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
- 路由器发布缺省路由时是会检查区域0是否有状态为full的邻居,仅有状态为full的邻居时缺省路由才会发布。因为区域0没有状态为full的邻居,说明骨干区域没有转发能力,发布缺省路由没有实际意义。
不同区域缺省路由发布原则如表10-7所示。
区域类型 | 缺省路由发布原则 |
---|---|
普通区域 | 缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。 当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治域中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治域中。 如果ASBR上没有缺省路由,则路由器不会通告缺省路由。 |
Stub Area | Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统的外部路由就可以通过ABR到达。 |
Totally Stub Area | Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA Area | NSSA区域允许引入少量通过本区域的ASBR到达的外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。ABR自动产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,除了某少部分路由通过NSSA的ASBR到达,其它路由都可以通过NSSA的ABR到达。在ASBR上手动通过命令进行配置,使ASBR产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,外部路由也可以通过本区域NSSA的ASBR到达。 Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。 |
Totally NSSA Area | Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生缺省的Type7 LSA通告到整个NSSA区域内。这样,其他区域的外部路由和区域间路由都可以通过ABR在区域内传播。 |
OSPF路由过滤
OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
OSPF使用的路由策略包括Route-Policy,访问控制列表(ACL),地址前缀列表(IP-Prefix List),具体策略的详细描述请参见《VRP 特性描述-路由策略》。
OSPF路由过滤可以应用于以下几个方面:
-
路由引入
OSPF可以引入其它路由协议学习到的路由。在引入时可以通过配置路由策略来过滤路由,只引入满足条件的路由。
-
引入路由发布
OSPF引入了路由后会向其它邻居发布引入的路由信息。
可以通过配置过滤规则来过滤向邻居发布的路由信息。该过滤规则只在ASBR上配置才有效(只有ASBR才能引入路由)。
-
路由学习
通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自制系统外部的路由进行过滤。
该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。
-
区域间LSA学习
通过命令可以在ABR上配置对进入本区域的Summary LSA进行过滤。该配置只在ABR上有效(只有ABR才能发布Summary LSA)。
-
区域间LSA发布
通过命令可以在ABR上配置对本区域出方向的Summary LSA进行过滤。该配置只在ABR上配置有效。
OSPF虚连接
虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。
-
虚连接必须在两端同时配置方可生效。
-
为虚连接两端提供一条非骨干区域内部路由的区域称为传输区域(Transit Area)。
按照RFC2328的建议,在部署OSPF时,要求所有的非骨干区域与骨干区域相连。否则会出现有的区域不可达的问题。
如图10-2中所示,Area2没有连接到骨干区Area0,RouterA不是ABR,因此不会向Area2生成Area0中Network1的路由信息,所以RouterB上没有到达Network1的路由。
在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求。这时可以通过配置OSPF虚连接予以解决。
虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,虚连接的两端和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。
如图10-3所示,通过虚连接,两台ABR之间直接传递OSPF报文信息,他们之间的OSPF路由器只是起到一个转发报文的作用。由于OSPF协议报文的目的地址不是这些路由器,所以这些报文对于他们而言是透明的,只是当作普通的IP报文来转发。
10.2.2 OSPF协议基本概念
Router ID
一台路由器如果要运行OSPF协议,必须存在Router ID。Router ID是一个32比特无符号整数,是一台路由器在自治系统中的唯一标识。
Router ID的选取有两种方式:
-
通过命令行手动配置。
-
路由器自动设定。
如果没有手动配置Router ID,路由器会从当前接口的IP地址中自动选取一个作为Router ID。其选择顺序是:
- 优先从Loopback地址中选择最大的IP地址作为Router ID。
- 如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为Router ID。
只有重新配置系统的Router ID或OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。
区域
随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,路由器数量的增多会导致链路状态数据库LSDB(Link-State Database)非常庞大,占用大量的存储空间,并使得运行SPF算法的复杂度增加,导致路由器负担很重。在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“动荡”之中,造成网络中会有大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
OSPF协议通过将自治系统划分成不同的区域解决LSDB频繁更新的问题,提高网络的利用率。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。
OSPF的区域类型包括普通区域、Stub区域、NSSA区域,如表10-9所示。
区域类型 | 作用 | 说明 |
---|---|---|
普通区域 | 缺省情况下,OSPF区域被定义为普通区域。普通区域包括: |
|
Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,因此这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。一般情况下,Stub区域位于自治系统的边界,是只有一个ABR的非骨干区域,为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器。 Totally Stub区域允许ABR发布的Type3缺省路由,不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 |
| |
NSSA是Stub区域的一个变形,它和Stub区域有许多相似的地方。NSSA区域不允许存在Type5 LSA。NSSA区域允许引入自治系统外部路由,携带这些外部路由信息的Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,泛洪到整个OSPF域中。 Totally NSSA区域不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 |
|
路由器类型
根据在自治系统AS中的不同位置,路由器可以分为以下几类。请参见图10-4和表10-10。
路由器类型 | 含义 |
---|---|
区域内路由器(Internal Router) | 该类路由器的所有接口都属于同一个OSPF区域。 |
该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 | |
骨干路由器(Backbone Router) | 该类路由器至少有一个接口属于骨干区域。 所有的ABR和位于骨干区域Area0内部的路由器都是骨干路由器。 |
与其他AS交换路由信息的路由器称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。 |
LSA
OSPF中对路由信息的描述都是封装在链路状态通告LSA(Link State Advertisement)中发布出去的,常用的LSA如表10-11所示。
LSA类型 | LSA作用 |
---|---|
Router-LSA(Type1) | 每个路由器都会产生,描述了路由器的链路状态和开销,在发布路由器所属的区域内传播。 |
Network-LSA(Type2) | 由DR产生,描述本网段的链路状态,在DR所属的区域内传播。 |
Network-summary-LSA(Type3) | 由ABR产生,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally Stub或NSSA区域。 |
ASBR-summary-LSA(Type4) | 由ABR产生,描述本区域到其他区域中的ASBR的路由,通告给除ASBR所在区域的其他区域。 |
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。 | |
Opaque LSA(Type9/Type10/Type11) | Opaque LSA提供用于OSPF的扩展的通用机制。其中:
|
报文类型
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文,如表10-12所示。
路由类型
自治系统AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。
表10-13中按优先级从高到低顺序列出了路由类型。
路由类型 | 含义 |
---|---|
Intra Area | 区域内路由。 |
Inter Area | 区域间路由。 |
第一类外部路由(Type1 External) | 这类路由的可信程度高一些。 到第一类外部路由的开销=本路由器到相应的ASBR的开销+ASBR到该路由目的地址的开销。 存在多个ASBR时,每条路径的开销值分别按照“第一类外部路由的开销=本路由器到相应的ASBR的开销+ASBR到该路由目的地址的开销”计算,得到的开销值用于路由选路。 |
第二类外部路由(Type2 External) | 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。 所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。 存在多个ASBR时,先比较引入路由的开销值,选取开销值最小的ASBR路径进行路由引入。如果引入路由的开销值相同,再比较本路由器到相应的ASBR的开销值,选取开销值最小的路径进行路由引入。无论选择哪条路径引入路由,第二类外部路由的开销都等于ASBR到该路由目的地址的开销。 |
OSPF支持的网络类型
OSPF根据链路层协议类型,将网络分为如表10-14所列四种类型。
网络类型 | 链路层协议 | 报文发送形式 | 图示 |
---|---|---|---|
广播类型(Broadcast) |
| ||
NBMA类型(Non-broadcast multiple access):非广播且多点可达的网络 |
| 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。 | |
点到多点P2MP类型(Point-to-Multipoint) | 没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。 |
| |
点到点P2P类型(point-to-point) |
|
|
DR和BDR
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如图10-5所示,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF定义了指定路由器DR和备份指定路由器BDR。通过选举产生DR(Designated Router)后,所有路由器都只将信息发送给DR,由DR将网络链路状态LSA广播出去。除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,并与新的DR同步。这需要较长的时间,在这段时间内,路由的计算有可能是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router)的概念。BDR是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系已建立,所以这个过程非常短暂,这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格。本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文。每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
OSPF多进程
OSPF支持多进程,在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。路由器的一个接口只能属于某一个OSPF进程。
OSPF多进程的一个典型应用就是在VPN场景中PE和CE之间运行OSPF协议,同时VPN骨干网上的IGP也采用OSPF。在PE上,这两个OSPF进程互不影响。
OSPF缺省路由
缺省路由是指目的地址和掩码都是0的路由。当路由器无精确匹配的路由时,就可以通过缺省路由进行报文转发。
OSPF缺省路由通常应用于下面两种情况:
-
由区域边界路由器(ABR)发布Type3缺省Summary LSA,用来指导区域内路由器进行区域之间报文的转发。
-
由自治系统边界路由器(ASBR)发布Type5外部缺省ASE LSA,或者Type7外部缺省NSSA LSA,用来指导自治系统(AS)内路由器进行自治系统外报文的转发。
由于OSPF路由的分级管理,Type3缺省路由的优先级高于Type5和Type7路由。
OSPF缺省路由的发布原则如下:
- OSPF设备只有具有对外的出口时,才能够发布缺省路由LSA。
- 如果OSPF设备已经发布了缺省路由LSA,那么不再学习其它路由器发布的相同类型缺省路由。即路由计算时不再计算其它路由器发布的相同类型的缺省路由LSA,但数据库中存有对应LSA。
- 外部缺省路由的发布如果要依赖于其它路由,那么被依赖的路由不能是本OSPF路由域内的路由,即不是本进程OSPF学习到的路由。因为外部缺省路由的作用是用于指导报文的域外转发,而本OSPF路由域的路由的下一跳都指向了域内,不能满足指导报文域外转发的要求。
- 路由器发布缺省路由时会检查区域0是否有状态为full的邻居,当区域0仅有状态为full的邻居时,缺省路由才会发布。因为区域0没有状态为full的邻居,说明骨干区域没有转发能力,发布缺省路由没有实际意义。
不同区域缺省路由发布原则如表10-15所示。
区域类型 | 缺省路由发布原则 |
---|---|
普通区域 | 缺省情况下,普通OSPF区域内的OSPF设备是不会产生缺省路由的,即使它有缺省路由。 当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治域中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治域中。 如果ASBR上没有缺省路由,则路由器不会通告缺省路由。 |
Stub Area | Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统的外部路由就可以通过ABR到达。 |
Totally Stub Area | Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Totally Stub区域内。这样,自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA Area | NSSA区域允许引入少量通过本区域的ASBR到达的外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。ABR自动产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,除了某少部分路由通过NSSA的ASBR到达,其它路由都可以通过NSSA的ABR到达。在ASBR上手动通过命令进行配置,使ASBR产生一条缺省的NSSA LSA(Type7 LSA),通告到整个NSSA区域内。这样,外部路由也可以通过本区域NSSA的ASBR到达。 Type7 LSA缺省路由不会在ABR上转换成Type5 LSA缺省路由泛洪到整个OSPF域。 |
Totally NSSA Area | Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生缺省的Type3 LSA和Type7 LSA通告到整个Totally NSSA区域内。这样,自治系统外部路由和区域间路由都可以通过ABR到达。 |
10.2.3 OSPF协议基本原理
OSPF协议路由的计算过程可简单描述如下:
-
建立邻接关系,过程如下:
- 本端设备通过接口向外发送Hello报文与对端设备建立邻居关系。
- 两端设备进行主/从关系协商和DD报文交换。
- 两端设备通过更新LSA完成链路数据库LSDB的同步。
此时,邻接关系建立成功。
-
OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。
OSPF邻居状态机
在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念:
- 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
- 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。
邻居和邻接状态是通过OSPF状态机表现的,OSPF共有8种邻居状态机,分别是Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full,如图10-6所示。Down、2-way、Full是稳定状态,Attempt、Init、Exstart、Exchange、Loading是不稳定状态。不稳定状态是在转换过程中瞬间存在的状态,一般不会超过几分钟。
状态机 | 含义 |
---|---|
Down | 邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。 |
Attempt | 处于本状态时,定期向手工配置的邻居发送Hello报文。
说明:
Attempt状态只适用于NBMA类型的接口。
|
Init | 本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文。 |
2-way | 互为邻居。本状态表示双方互相收到了对端发送的Hello报文,建立了邻居关系。 如果不形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。 |
Exstart | 协商主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。 |
Exchange | 交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。 |
Loading | 正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。 |
Full | 建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。 |
建立邻接关系
在上述邻居状态机的变化中,有两处决定是否建立邻接关系:
-
当与邻居的双向通讯初次建立时。
-
当网段中的DR和BDR发生变化时。
OSPF在不同网络类型中,OSPF邻接关系建立的过程不同,分为广播网络,NBMA网络,点到点/点到多点网络。
在广播网络中建立OSPF邻接关系
广播链路邻接关系建立过程如图10-7所示。
在广播网络中,DR、BDR和网段内的每一台路由器都形成邻接关系,但DR other之间只形成邻居关系。
如图10-7所示,在广播网络中建立OSPF邻接关系的过程如下:
-
建立邻居关系
-
RouterA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由器(Neighbors Seen=0)。
-
RouterB收到RouterA发送的Hello报文后,发送一个Hello报文回应给RouterA,并且在报文中的Neighbors Seen字段中填入RouterA的Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR路由器是RouterB(DR=2.2.2.2),然后RouterB的邻居状态机置为Init。
-
RouterA收到RouterB回应的Hello报文后,将邻居状态机置为Exstart状态,下一步双方开始发送各自的链路状态数据库。
说明:
在广播网络中,两个接口状态是DR Other的 路由器之间将停留在此步骤。 -
-
主/从关系协商、DD报文交换
-
RouterA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=X。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以惟一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
-
RouterB在收到RouterA的DD报文后,将RouterA的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。
-
RouterA收到报文后,同意了RouterB为Master,并将RouterB的邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=Y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RouterA将MS=0,说明自己是Slave。
-
RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。
上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。
-
-
LSDB同步(LSA请求、LSA传输、LSA应答)
-
RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。
-
RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。
上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。
-
在NBMA网络中建立OSPF邻接关系
NBMA网络和广播网络的邻接关系建立过程只在交换DD报文前不一致,如图10-8中的蓝色标记。
在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。
如图10-8所示,在NBMA网络中建立OSPF邻接关系的过程如下:
-
建立邻居关系
-
RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR路由器(DR=2.2.2.2),但不确定邻居是哪台路由器(Neighbors Seen=0)。
-
RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR路由器(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居路由器的Router ID(Neighbors Seen=2.2.2.2)。
说明:
在NBMA网络中,两个接口状态是DR Other的 路由器之间将停留在此步骤。 -
-
主/从关系协商、DD报文交换过程同广播网络的邻接关系建立过程。
-
LSDB同步(LSA请求、LSA传输、LSA应答)过程同广播网络的邻接关系建立过程。
在点到点/点到多点网络中建立OSPF邻接关系
在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文是组播发送的。
路由计算
OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。
OSPF协议使用链路状态通告LSA描述网络拓扑,即有向图。Router LSA描述路由器之间的链接和链路的属性。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的。如图10-9所示。
每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。如图10-10所示。
当OSPF的链路状态数据库LSDB发生改变时,需要重新计算最短路径,如果每次改变都立即计算最短路径,将占用大量资源,并会影响路由器的效率,通过调节SPF的计算间隔时间,可以抑制由于网络频繁变化带来的占用过多资源。缺省情况下,SPF时间间隔为5秒钟。
具体的计算过程如下:
-
计算区域内路由。
Router LSA和Network LSA可以精确的描述出整个区域内部的网络拓扑,根据SPF算法,可以计算出到各个路由器的最短路径。根据Router LSA描述的与路由器的网段情况,得到了到达各个网段的具体路径。
说明:
在计算过程中,如果有多条等价路由,SPF算法会将所有等价路径都保留在LSDB中。 -
计算区域外路由。
从一个区域内部看,相邻区域的路由对应的网段好像是直接连接在ABR上,而到ABR的最短路径已经在上一过程中计算完毕,所以直接检查Network Summary LSA,就可以很容易得到这些网段的最短路径。另外,ASBR也可以看成是连接在ABR上,所以ASBR的最短路径也可以在这个阶段计算出来。
说明:
如果进行SPF计算的 路由器是ABR,那么只需要检查骨干区域的Network Summary LSA。 -
计算自治系统外路由。
由于自治系统外部的路由可以看成是直接连接在ASBR上,而到ASBR的最短路径在上一过程中已经计算完毕,所以逐条检查AS External LSA就可以得到到达各个外部网络的最短路径。
10.2.4 OSPF路由控制
通过下面几种方法可以控制OSPF路由信息的发布与接收,引入其他协议的路由,满足网络规划和流量管理的需求。
-
路由聚合是将具有相同前缀的路由信息聚合在一起,只发布一条路由到其它区域。通过路由聚合,可以减少路由信息,从而减小路由表的规模,提高路由器的性能。
-
OSPF支持使用路由策略对路由信息进行过滤。缺省情况下,OSPF不进行路由过滤。
-
Smart-discover特性可以使路由器不需要等待Hello Timer超时就可以主动向邻居发送Hello报文,加快邻居关系的建立。
-
通过设置LSDB中External LSA的最大条目数,可以动态限制OSPF数据库的规模,解决OSPF数据库超限引发的问题。
-
OSPF Mesh-Group是将并行链路场景中的链路分组,从而泛洪时从群组中选取代表链路进行泛洪,避免重复泛洪而造成不必要的系统压力。缺省情况下,OSPF不使能Mesh-Group功能。
路由聚合
当大规模部署OSPF网络时,为了避免OSPF路由表中条目过多而降低路由查找速度的现象以及降低管理的复杂度,可以配置路由聚合,减小路由表的规模。此外,如果被聚合的IP地址范围内的某条链路状态频繁在Up和Down之间切换,该变化并不会通告到被聚合的IP地址范围外的设备。因此,可以避免网络中的路由振荡,在一定程度上提高了网络的稳定性。
OSPF有两种路由聚合方式:
-
ABR聚合
ABR向其它区域发送路由信息时,以网段为单位生成Type3 LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段聚合成一个网段。这样ABR只发送一条聚合后的LSA,所有属于命令指定的聚合网段范围的LSA将不会再被单独发送出去。
-
ASBR聚合
配置引入路由聚合后,如果本地路由器是自治系统边界路由器ASBR,将对引入的聚合地址范围内的Type5 LSA进行聚合。当配置了NSSA区域时,还要对引入的聚合地址范围内的Type7 LSA进行聚合。
如果本地路由器既是ASBR又是ABR,则对由Type7 LSA转化成的Type5 LSA进行聚合处理。
路由过滤
OSPF使用的路由策略包括Route-Policy,访问控制列表(ACL),地址前缀列表(IP-Prefix List),具体策略的详细描述请参见《VRP 特性描述-路由策略》。
OSPF路由过滤应用于以下几个方面:
-
路由引入
OSPF可以引入其它路由协议学习到的路由。在引入时通过配置路由策略来过滤路由,只引入满足条件的路由。由于只有ASBR才能引入路由,因此该过滤规则只在ASBR上配置才有效。
-
引入路由发布
OSPF引入了路由后会向其它邻居发布引入的路由信息。由于只有ASBR才能引入路由,因此该过滤规则只在ASBR上配置才有效。
-
路由学习
通过配置过滤规则,可以设置OSPF对接收到的区域内、区域间和自治系统外部的路由进行过滤。该过滤只作用于路由表项的添加与否,即只有通过过滤的路由才被添加到本地路由表中,但所有的路由仍可以在OSPF路由表中被发布出去。
路由学习中的过滤不对LSA进行过滤,只针对LSA计算出来的路由是否添加路由表进行过滤,因此学习到的LSA是完整的。
-
区域间LSA学习
在ABR上配置对进入本区域的Summary LSA进行过滤。由于ABR只能发布Summary LSA,因此区域间LSA学习只在ABR上有效。
区域间LSA学习是直接对进入区域的LSA进行过滤的。
-
区域间LSA发布
在ABR上配置对本区域出方向的Summary LSA进行过滤。由于ABR只能发布Summary LSA,因此区域间LSA发布只在ABR上有效。
Smart-discover
通常情况下,路由器会周期性地在运行OSPF协议的接口上发送Hello报文,这个周期被称为Hello Interval。OSPF通过Hello Timer定时器控制Hello报文的发送。因此,路由器必须等待Hello Timer超时才能再次发送Hello报文,两次报文发送间隔为Hello Interval,在这期间邻居一直在等待接收报文。这种按固定周期发送报文的方式减缓了OSPF邻居关系的建立,使能Smart-discover特性可以解决这个问题。
使能Smart-discover特性后,路由器不需要等待Hello Timer超时就可以主动向邻居发送Hello报文,这样邻居就可以很快的收到报文并迅速进行状态迁移。
OSPF邻居状态处于下面两种情况时,建议需要使能Smart-discover特性:
- 当邻居状态首次到达2-way状态。
- 当邻居状态从2-way或更高状态迁移到Init状态。
Database Overflow
OSPF协议要求同一个区域中的路由器保存相同的链路状态数据库LSDB(Link-State Database)。随着网络上路由数量不断增加,一些路由器由于系统资源有限,不能再承载如此多的路由信息,这种状态就被称为OSPF数据库超限(OSPF Database Overflow)。
对于路由信息不断增加导致路由器系统资源耗尽而失效的问题,可以通过配置Stub或NSSA区域来解决,但Stub或NSSA区域的方案不能解决动态路由增长导致的OSPF数据库超限问题。为了解决这个问题,通过设置LSDB中External LSA的最大条目数,可以动态限制OSPF数据库的规模。通过设置路由器上非缺省外部路由数量的上限,来避免OSPF数据库超限。OSPF网络中所有路由器都必须配置相同的上限值。这样,只要路由器上外部路由的数量达到该上限,路由器就进入Overflow状态,并同时启动超限状态定时器(默认超时时间为5秒),路由器在定时器超过5秒后自动退出超限状态。如表10-17所示。
Mesh-Group
当OSPF进程收到一个LSA或者新产生一个LSA时,会进行泛洪操作。并行链路场景下,OSPF会对每一条链路泛洪LSA,发送Update报文。这样,如果有2000条并行链路,则每个LSA泛洪都要发送2000次,然而只有一次泛洪是有效的,其他1999次泛洪为重复泛洪。为了避免这种重复泛洪而造成的系统压力,使能Mesh Group特性,可以将并行链路进行归组,选取代表链路进行泛洪。当路由器和邻居存在多条并行链路时,通过OSPF Mesh-Group特性,可以明显减轻链路的压力。
如图10-11所示,RouterA和RouterB建立OSPF邻居关系,通过三条链路相连。当RouterA从interface 4接收到新的LSA后,会将该LSA通过interface 1、interface 2、interface 3接口泛洪到RouterB。这种泛洪方式会造成并行链路的压力,因为对于存在多条并行链路的邻居来说,只需要选取一条主链路进行泛洪LSA即可。
使能了OSPF Mesh-Group特性的设备和邻居存在多条并行链路时,当其收到LSA后,会选取一条主链路进行泛洪,如图10-12所示。当主链路上接口状态低于Exchange时,OSPF会在并行链路中重新选取主链路,并继续泛洪LSA,这是因为,OSPF协议规定,只有当邻居状态达到Exchange时,才能泛洪LSA。并且,当RouterB收到来自interface 1所在的链路泛洪的LSA后,不会再将该LSA从interface 2和interface 3所在的链路反向泛洪给RouterA。
Mesh-Group以邻居的Router ID唯一标识一个群组,接口状态大于Exchange且与同一个邻居相连的接口属于同一个Mesh-Group。如图10-13所示,RouterA在区域0中有一个群组,分别是interface 1和interface 2所在的链路。由于interface 3所在的链路为广播链路,邻居数超过一个,所以不能加入到群组中。
路由器使能Mesh-Group后,若其直连的邻居路由器Router ID配置重复,会引起全网LSDB不同步、路由计算不正确的情况,需要重新配置邻居路由器的Router ID。
10.2.5 OSPF虚连接
产生原因
按照RFC 2328的建议,在部署OSPF时,要求所有的非骨干区域与骨干区域相连,否则会出现有的区域不可达的问题。
如图10-14中所示,Area2没有连接到骨干区Area0,RouterA不是ABR,因此不会向Area2生成Area0中Network1的路由信息,所以RouterB上没有到达Network1的路由。
在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求,此时可以通过配置OSPF虚连接来解决这个问题。
相关概念
虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。
-
虚连接必须在两端同时配置方可生效。
-
为虚连接两端提供一条非骨干区域内部路由的区域称为传输区域(Transit Area)。
虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,虚连接的两端和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。
实现原理
如图10-15所示,通过虚连接,两台ABR之间直接传递OSPF报文信息,两者之间的OSPF设备只是起到一个转发报文的作用。由于OSPF协议报文的目的地址不是这些设备,所以这些报文对于两者而言是透明的,只是当作普通的IP报文来转发。
10.2.6 OSPF TE
OSPF TE(OSPF Traffic Engineering,即OSPF流量工程)是为了支持MPLS流量工程(MPLS TE),支持建立和维护TE的标签交换路径LSP(Label Switch Path)而在OSPF协议基础上扩展的新特性。在MPLS TE架构中(请参看特性描述MPLS部分)OSPF扮演了信息发布组件的角色,负责收集扩散MPLS流量工程信息。
除了网络的拓扑信息外,流量工程还需要知道网络的约束信息(包括带宽、TE度量值、管理组和亲和属性等)。但OSPF现有的功能不足以满足这些要求。因此需要对现有的OSPF进行扩展,通过引入新类型的LSA来发布这些信息,CSPF算法利用这些信息就可以计算出满足各种约束条件的路径。
OSPF在MPLS-TE中的作用
在MPLS-TE体系结构中OSPF起到了信息发布组件的作用:
-
收集TE相关信息。
-
在同一个区域中的各路由器间扩散TE信息。
-
把同步收集到的TE信息组成流量工程数据库TEDB(TE DataBase)提供给CSPF计算。
除此之外,OSPF并不关心信息具体是什么以及MPLS如何使用这些信息。
TE LSA
OSPF通过新增Type10 Opaque LSA来实现收集和发布流量工程信息的目的。这种LSA中包含了流量工程所需要的链路状态信息,包括最大链路带宽、最大可预留带宽、当前预留带宽、链路颜色等信息。Type10 Opaque LSA利用OSPF泛洪机制在一个区域内的路由器间同步这些信息,最终形成统一的TEDB,为路径计算做好准备。TE LSA的结构如图10-17所示。
TE LSA使用TLV结构来携带需要的信息。目前只定义了两种TLV:
-
Router Address TLV:唯一标识一个MPLS节点,在CSPF中相当于OSPF中的Router ID的作用;
-
Link TLV:携带了一条使能了MPLS TE的链路的属性。其中,Link TLV中可携带的sub-TLV请参见表10-18。
sub-TLV | 说明 |
---|---|
Type1:Link Type(Value域长度为1字节) |
链路类型
|
Type2:Link ID(Value域长度为4字节) |
链路标识,IP地址格式
|
Type3:Local IP Address(Value域长度为4N字节) | 本地接口的IP地址,可以包含多个本地接口的IP地址,每个4字节 |
Type4:Remote IP Address(Value域长度为4N字节) |
对端接口的IP地址,可以包含多个对端接口的IP地址,每个4字节
|
Type5:Traffic Engineering Metric(Value域长度为4字节) | 在TE链路上配置的TE Metric。ULONG数据格式 |
Type6:Maximum Bandwidth(Value域长度为4字节) | 链路上的最大带宽。以四个字节存储的浮点数据格式 |
Type7:Maximum Reservable Bandwidth(4字节) | 链路上的最大可预留带宽。以四个字节存储的浮点数据格式 |
Type8:Unreserved Bandwidth(Value域长度为32字节) | 链路上的8个优先级的可预留带宽。每个优先级都是以四个字节存储的浮点数据格式 |
Type9:Administrative Group(Value域长度为4字节) | 链路管理组属性 |
IGP Shortcut和邻接转发
OSPF支持IGP Shortcut和邻接转发(Forwarding Adjacency)特性,这两个特性允许OSPF使用隧道接口(Tunnel接口)作为到达某个目的地址的出接口。
IGP Shortcut和邻接转发的区别在于:
-
使能IGP Shortcut特性的路由器使用隧道接口作为出接口,但不将这个隧道接口链路发布给邻居路由器,因此,其他路由器不能使用此隧道。
-
使能邻接转发特性的路由器在使用隧道接口作为出接口的同时,也将这个隧道接口发布给邻居路由器,因此,其他路由器能够使用此隧道。
-
IGP Shortcut是单向的,只需要在使用该特性的路由器上配置即可。
-
邻接转发是双向的,需要在隧道两端的路由器上都进行配置。
10.2.7 OSPF VPN
定义
OSPF VPN多实例特性是为了支持在VPN场景中PE(Provider Edge routers)和CE(Customer Edge devices)之间能够运行OSPF协议、使用OSPF进行路由的学习和发布而在OSPF基础协议上进行的扩展。
目的
OSPF是一种应用广泛的IGP协议,很多情况下,VPN用户内部网络运行OSPF。如果能够在PE-CE之间使用OSPF,PE通过OSPF向CE发布VPN路由,则CE上就不需要为到PE的连接支持其它路由协议,从而简化CE的管理和配置。
PE-CE间运行OSPF
BGP/MPLS VPN中,PE之间使用MP-BGP传递路由信息,而PE-CE间则广泛使用OSPF进行路由学习和传递。
PE-CE间使用OSPF有如下优势:
-
通常在一个Site内部使用OSPF学习路由。如果PE-CE间也使用OSPF则可以减少CE设备所支持的协议种类,降低对CE设备的要求。
-
Site内部和PE-CE间都使用OSPF可以降低网络管理人员的工作复杂度,不必要求管理人员对多种协议熟练掌握。
-
对于在骨干网上使用OSPF而不使用VPN的网络,将其转换为使用BGP/MPLS VPN时,由于PE-CE间继续使用OSPF,从而降低了转换的难度。
如图10-18所示,CE1、CE3和CE4都属于VPN1,图中OSPF之后的数字表示PE设备上运行的OSPF多实例进程号。
CE1上的路由发布给CE3和CE4过程可以描述为:
-
PE1将CE1上的OSPF路由引入到BGP中,形成BGP VPNv4路由。
-
PE1通过MP-BGP将这些BGP VPNv4路由发布给PE2。
-
PE2将BGP VPNv4路由引入到OSPF,再发布给CE3和CE4。
同理,CE4和CE3上的路由发布给CE1的过程类似。
PE-CE间OSPF区域配置
PE与CE之间的OSPF区域可以是非骨干区域,也可以是骨干区域(区域0),并且PE永远是ABR(Area Border Router)。
- 使用过滤策略过滤LSA或路由。
- 为每一个链路配置2个VPN实例,通过RT来控制两者之间的互通。
在OSPF VPN扩展应用中,MPLS VPN骨干网被看作是Area0。由于OSPF要求Area 0连续,因此,所有VPN Site的Area0必须与MPLS VPN骨干网相连。如果VPN Site中存在OSPF Area0,则CE接入的PE必须通过Area0与这个VPN Site的骨干区域相连(可以通过Virtual-link实现逻辑连通),如图10-19所示。
PE-CE间配置为非骨干区域1,而Site1内配置了骨干区域0,此时Site1的骨干区域就与VPN骨干区域分离了,所以在CE1与PE1间配置虚连接(Virtual link)来保持骨干区域连续。
OSPF Domain ID
本地OSPF区域和VPN远端的OSPF区域间如果相互发布区域间路由(Inter-area routes),则认为这些区域属于同一个OSPF域(OSPF Domain)。
-
域标识符(Domain ID)用来标识和区分不同的域。
-
每一个OSPF域都有一个或多个域标识符,其中有一个是主标识符,其它为从标识符。
-
如果OSPF实例没有明确域标识符,则认为它的标识符为NULL。
PE把BGP传来的远端路由向CE发布时,需要根据域标识符的情况选择向CE发布3类或5类的OSPF路由。
-
如果本地的域标识符与BGP路由信息中携带的远端域标识符相等或相互兼容,则发布3类路由;
-
否则,发布5类路由。
路由环路预防
PE和CE之间,如果OSPF与BGP的路由相互学习,则有可能导致路由环路问题。
如图10-20所示,PE1上OSPF引入了目的地址为10.1.1.1/32的BGP路由,产生5类或7类LSA发布给CE1,CE1上学到一条目的地址为10.1.1.1/32,下一跳为PE1的OSPF路由,并发布给PE2,这样PE2上就学到一条目的地址为10.1.1.1/32,下一跳为CE1的OSPF路由。
同理,CE1上也会学到一条目的地址为10.1.1.1/32,下一跳为PE2的OSPF路由,并发布给PE1,这样PE1上就学到一条目的地址为10.1.1.1/32,下一跳为CE1的OSPF路由。
此时,CE1上存在两条等价路由,分别指向PE1和PE2,而PE1和PE2上到10.1.1.1/32的下一跳也都指向CE1,环路就产生了。
同时,由于OSPF路由的优先级高于BGP路由,PE1和PE2上到10.1.1.1/32的BGP路由被OSPF路由所替代,也就是说,PE1和PE2的路由表中活跃的是到10.1.1.1/32,下一跳为CE1的OSPF路由。
既然BGP路由转为不活跃状态,之前OSPF引入这条BGP路由时所产生的LSA就会被删除,而这样又会导致OSPF路由被撤消。路由表中没有了OSPF路由,BGP路由又变为活跃状态,继续重复之前的循环,导致路由振荡。
OSPF VPN特性专门针对这种情况提供了解决方案,如表10-20所列。
特性名 | 定义 | 作用 |
---|---|---|
DN-bit | 为了防止路由环路,OSPF多实例进程使用一个bit位作为标志位,称为DN位。 | 配置了OSPF多实例的路由器(一般是PE或者MCE)在生成Type3、Type5或Type7 LSA时,都会将DN位置位(值为1),其他类型LSA的DN位不置位(值为0)。 路由器的OSPF多实例进程在进行计算时,会进行DN位检查,忽略DN位置位的LSA。这样就防止了PE(或MCE)发出的LSA经过CE设备,再次回到PE(或MCE)而引起的路由环路。如图10-20所示,PE1在生成Type3、Type5或Type7 LSA发布给CE时,都将DN位置位(值为1)。CE再将该LSA发给PE2,PE2接收到该LSA后,会进行DN位检查,发现该LSA的DN位是1,因而忽略该LSA,避免了环路的产生。 |
VPN Route Tag | VPN路由标记(VPN Route Tag),PE根据收到的BGP的私网路由产生的5/7类LSA中必须包含这个参数。 VPN路由标记不在BGP的扩展团体属性中传递,只是本地概念,只在收到BGP路由并且产生OSPF LSA的PE设备上有意义。 | 当PE发现LSA的VPN路由标记(LSA的Tag值)和自己的一样,就会忽略这条LSA,因此避免了环路。 |
缺省路由 | 目的地址和掩码全为0的路由。 | PE不计算缺省路由。 缺省路由用于转发源自CE和CE所在Site的流量到VPN骨干网。 |
伪连接Sham link
OSPF伪连接(Sham link)是MPLS VPN骨干网上两个PE设备之间的点到点链路,这些链路使用借用(Unnumbered)的地址。
通常情况下,BGP对等体之间通过BGP扩展团体属性在MPLS VPN骨干网上承载路由信息。另一端PE上运行的OSPF可利用这些信息来生成PE到CE的区域间路由。
如图10-21所示,如果本地CE所在网段和远端CE所在网段间存在一条区域内OSPF链路,这种情况下经过区域内OSPF链路的路由是区域内路由,其优先级要高于经过MPLS VPN骨干网的区域间路由,这将导致VPN流量总是通过这条路由转发,而不走骨干网。为了避免这一问题,可以在PE设备之间建立OSPF伪连接(Sham link),使经过MPLS VPN骨干网的路由也成为OSPF区域内路由,并且被优选。
-
Sham link被看成是两个VPN实例之间的链路,每个VPN实例中必须有一个Sham link的端点地址,它是PE设备上VPN地址空间中的一个有32位掩码的Loopback接口地址。
-
Sham link在两个PE之间建立起来后,这两个PE将成为Sham link邻居,交互路由信息。
-
Sham link作为区域内的一条点到点链路,用户可以通过调整度量值在Sham link和区域内OSPF链路之间进行选路。
Multi-VPN-Instance CE
OSPF多实例通常运行在PE设备上,在用户局域网内部运行OSPF多实例的路由器称为Multi-VPN-Instance CE(MCE),即多实例CE。
与PE上的OSPF多实例相比:
-
Multi-VPN-Instance CE不需要支持BGP/OSPF互操作功能。
-
Multi-VPN-Instance CE通过为不同的业务建立各自的OSPF实例,相当于不同的业务使用不同的虚拟CE设备,从而以较低的成本解决局域网的安全问题。
-
Multi-VPN-Instance CE在同一台CE设备上实现不同的OSPF多实例。其实现的关键在于禁止路由环路的检查,直接进行路由计算。也就是说,MCE设备收到了带有DN-bit的LSA也会用于路由计算。
10.2.8 OSPF NSSA
产生原因
OSPF规定Stub区域是不能引入外部路由的,这样可以避免大量外部路由对Stub区域路由器带宽和存储资源的消耗。对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,Stub区域就不再满足需求了。因此产生了NSSA区域。
OSPF NSSA区域(Not-So-Stubby Area)是OSPF新增的一类特殊的区域类型。NSSA区域和Stub区域有许多相似的地方。两者的差别在于,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中,同时又不会学习来自OSPF网络其它区域的外部路由。
相关概念
-
N-bit
一个区域内所有路由器上配置的区域类型必须保持一致。OSPF在Hello报文中使用N-bit来标识路由器支持的区域类型,区域类型选择不一致的路由器不能建立OSPF邻居关系。有些厂商在OSPF DD报文中将N-bit置位,为了和这些厂商互通,VRP的实现方式是可以通过配置来兼容。
-
Type7 LSA
Type7 LSA由NSSA区域的自治域边界路由器(ASBR)产生,其扩散范围仅限于ASBR所在的NSSA区域。Type7 LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述引入的外部路由信息。NSSA区域的区域边界路由器(ABR)收到Type7 LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
实现原理
为了将NSSA区域引入的外部路由发布到其它区域,需要把Type7 LSA转化为Type5 LSA以便在整个OSPF网络中通告。如图10-22所示。
-
P-bit(Propagate bit)用于告知转化路由器该条Type7 LSA是否需要转化。
-
缺省情况下,转换路由器的是NSSA区域中Router ID最大的区域边界路由器(ABR)。
-
只有P-bit置位并且FA(Forwarding Address)不为0的Type7 LSA才能转化为Type5 LSA。FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。
说明:
FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。
FA地址首先优选区域内Loopback接口的地址,若不存在Loopback接口,则在区域内接口状态为Up的接口中选择逻辑索引大的地址作为FA地址。
-
区域边界路由器产生的Type7 LSA不会置位P-bit。
使用价值
缺省路由环路预防,在NSSA区域中,可能同时存在多个ABR,为了防止路由环路产生,边界路由器之间不计算对方发布的缺省路由。
10.2.9 OSPF本地MT
产生原因
网络中同时部署了组播和MPLS TE-Tunnel,且TE-Tunnel使能了IGP Shortcut,IGP计算出来的路由的出接口可能不再是实际的物理接口,而是TE-Tunnel接口。路由器根据到达组播源地址的单播路由,从TE-Tunnel接口发送组播加入报文,这样,被TE-Tunnel跨越的路由器就无法感知到组播加入报文,因而不会建立组播转发表项。
为了解决上述问题,可以使能OSPF本地MT(Local Multicast-Topology)特性,建立正确的组播路由表并指导组播报文的转发。
实现原理
网络中同时部署了组播和MPLS TE-Tunnel,且TE-Tunnel使能了IGP Shortcut。如图10-23所示,RouterB被TE-Tunnel跨越从而不会建立组播转发表项。
由于TE-Tunnel是单向的,从组播源发出的组播数据会直接通过物理接口发送到这些被跨越的路由器,但因为这些路由器上并没有组播转发表项,导致组播数据报文丢弃,从而造成业务不可用。
使能本地MT特性后,如果计算出来的路由出接口为IGP-Shortcut类型的TE-Tunnel,路由管理模块会为组播协议创建单独的MIGP路由表,并为该路由计算出实际的物理出接口,将其加入到MIGP路由表中。组播利用MIGP路由表中的路由进行转发。
图10-23中请求加入组播组的报文到达RouterA后会通过接口interface 1发给RouterB,这样RouterB就能正确建立组播转发表。
10.2.10 BFD for OSPF
定义
双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测机制。
BFD对两个系统间的、同一路径上的同一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道。
BFD for OSPF就是将BFD和OSPF协议关联起来,将BFD对链路故障的快速感应通知OSPF协议,从而加快OSPF协议对于网络拓扑变化的响应。
目的
网络上的链路故障或拓扑变化都会导致路由器重新进行路由计算,所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。
由于链路故障是无法完全避免的,因此,加快故障感知速度并将故障快速通告给路由协议是一种可行的方案。BFD和路由协议相关联,一旦链路出现故障,BFD的快速性能够加快路由协议的收敛速度。
原理
BFD for OSPF的原理如图10-24所示:
-
三台设备间建立OSPF邻居关系。
-
邻居状态到达Full状态时通知BFD建立BFD会话。
-
RouterA到RouterB的路由出接口为GE2/0/0,当这两台设备间的链路出现故障后,BFD首先感知到并通知RouterA。
-
RouterA处理邻居Down事件,重新进行路由计算,新的路由出接口为GE1/0/0,经过RouterC到达RouterB。
10.2.11 OSPF GTSM
定义
GTSM(Generalized TTL Security Mechanism),即通用TTL安全保护机制。GTSM通过检查IP报文头中的TTL值是否在一个预先定义好的范围内,对IP层以上业务进行保护。
目的
网络上存在一些“有效报文”攻击,可能通过对一台路由器不断发送报文,使路由器收到这些发送给本机的报文后,不辨别其“合法性”,直接由转发层面上送控制层面处理,导致路由器因为处理这些“合法”报文,系统异常繁忙,CPU占用率高。GTSM特性可以解决这个问题。
在实际应用中,GTSM特性主要用于保护建立在TCP/IP基础上的控制层面(路由协议等)免受CPU利用(CPU-utilization)类型的攻击,如CPU过载(CPU overload)。
原理
使能了GTSM特性的设备会对收到的所有报文进行策略检查。对于没有通过策略的报文丢弃或者上送控制平面,从而达到防治攻击的目的。策略内容包括:
-
发送给本机IP报文的源地址。
-
报文所属的VPN实例。
-
IP报文的协议号(OSPF是89,BGP是6)。
-
TCP/UDP之上协议的协议源端口号、目的端口号。
-
有效TTL范围。
GTSM的实现手段如下:
-
对于直连的协议邻居:将需要发出的协议报文的TTL值设定为255。
-
对于多跳的邻居:可以定义一个合理的TTL范围。
GTSM的应用范围是:
-
GTSM对单播报文有效,对组播报文无效。这是因为组播报文本身具有TTL值为255的限制,不需要使用GTSM进行保护。
-
GTSM不支持基于Tunnel的邻居。
-
OSPF GTSM主要应用于NBMA网络,Virtual Link和Sham link场景。
10.2.12 OSPF Smart-discover
10.2.13 OSPF-BGP联动
目的
在存在备份链路的情况下,BGP在链路回切时,由于路由收敛速度滞后于OSPF路由收敛速度,从而造成流量丢失。
如图10-25所示,四台设备RouterA、RouterB、RouterC、RouterD之间运行OSPF协议,并建立IBGP连接。RouterC为RouterB的备份设备。当网络环境稳定时,BGP与OSPF在设备上是完全收敛的。
正常情况下,从RouterA到10.3.1.0/30的流量会途经RouterB。当RouterB发生故障后,流量切换到RouterC。RouterB故障恢复以后,流量回切到RouterB,此时会有流量丢失。
这是因为,在流量回切到RouterB的过程中,IGP收敛速度比BGP快,因此OSPF先收敛,BGP还没有完成收敛,导致RouterB不知如何到达10.3.1.0/30。
这样,当从RouterA去往10.3.1.0/30的流量被发送给RouterB时,由于没有必要的路由选择信息,这些流量就会被丢弃。
原理
使能了OSPF-BGP联动特性的路由器会在设定的联动时间内保持为Stub路由器,也就是说,该路由器发布的LSA中的链路度量值为最大值(65535),从而告知其它OSPF设备不要使用这个Stub路由器来转发数据,由此保证该路由器不会被用作穿越路由器。
图10-25中,在RouterB上使能OSPF-BGP联动,这样,在BGP收敛完成前,RouterA不把流量转发到RouterB上,而是继续使用备份链路RouterC,直到RouterB上的BGP路由完成收敛。
10.2.14 OSPF快速收敛
OSPF快速收敛是为了提高路由的收敛速度而做的扩展特性。包括:
-
I-SPF(Incremental SPF)
增量最短路径优先算法,是指当网络拓扑改变的时候,只对受影响的节点进行路由计算,而不是对全部节点重新进行路由计算,从而加快了路由的计算。
-
PRC(Partial Route Calculation)
部分路由计算,是指当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。
-
智能定时器
OSPF智能定时器可以根据用户的配置和触发事件(如路由计算)的频率动态调整时间间隔,使网络快速稳定。
OSPF智能定时器使用了指数衰减(Exponential Backoffs)技术,用户的配置可以精确到毫秒。
I-SPF
在ISO10589中定义使用Dijkstra算法进行路由计算。当网络拓扑中有一个节点发生变化时,这种算法需要重新计算网络中的所有节点,计算时间长,占用过多的CPU资源,影响整个网络的收敛速度。
I-SPF改进了这个算法,除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。
PRC
PRC的原理与I-SPF相同,都是只对发生变化的路由进行重新计算。不同的是,PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新路由。
- SPT变化,PRC处理变化节点上的所有叶子的路由信息。
- SPT没有变化,PRC不会处理节点的路由信息。
- 叶子变化,PRC处理变化的叶子的路由信息。
- 叶子没有变化,PRC不会处理叶子的路由信息。
比如一个节点使能一个OSPF接口,则整个网络拓扑的SPT是不变的,这时PRC只更新这个节点的接口路由,从而节省CPU占用率。
PRC和I-SPF配合使用可以将网络的收敛性能进一步提高,它是原始SPF算法的改进,所以已经代替了原有的算法。
智能定时器
网络不稳定时,可能会频繁进行路由计算,造成系统CPU消耗过大。尤其是在不稳定网络中,经常会产生和传播描述不稳定拓扑的LSA,频繁处理这样的LSA,不利于整个网络的快速稳定。
OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。
OSPF智能定时器可以通过以下两种方式来加速网络收敛:
-
在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。
-
在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。
缺省情况下,OSPF智能定时器已经打开并且配置了缺省值。
10.2.15 按优先级收敛
OSPF按优先级收敛是指在大量路由情况下,能够让某些特定的路由优先收敛的一种技术。通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。
OSPF按优先级收敛能够让某些特定的路由优先收敛,因此用户可以把和关键业务相关的路由配置成相对较高的优先级,使这些路由更快的收敛,从而使关键的业务受到的影响减小。
10.2.17 OSPF认证
OSPF认证是基于网络安全性的要求而实现的一种加密手段,通过在OSPF报文中增加认证字段对报文进行加密。当本地设备接收到远端设备发送过来的OSPF报文,如果发现认证密码不匹配,则将收到的报文进行丢弃,达到自我保护的目的。
根据报文的种类,认证可以分为以下两类:
-
区域认证
在OSPF区域视图下配置,对本区域的所有接口下的报文进行认证。
-
接口认证
在接口视图下配置,对本接口的所有报文进行认证。
根据报文的认证方式,可以分为:
-
空认证
不进行认证。
-
明文认证
这是一种简单的加密方式,将配置的密码直接加入报文中,这种加密方式安全性不高。
-
MD5认证
通过将配置的密码进行MD5等加密算法之后再加入报文中,这样提高了密码的安全性。目前支持MD5/HMAC-MD5。
-
Keychain认证
Keychain由多个认证密钥组成,每个密钥包含一个ID和密码。密钥存在生命期,通过密钥的生命期可以在Keychain中滚动选择不同的认证密钥。Keychain可以滚动选择认证密钥来增强防攻击性。
Keychain为OSPF提供了认证保护,Keychain通过动态的更改认证算法和密钥,提高了OSPF的安全性。应用Keychain认证,除了可以对OSPF协议报文进行认证之外,还可以对TCP建立连接的过程进行认证。
-
HMAC-SHA256认证
通过将配置的密码进行HMAC-SHA256算法加密之后再加入报文中,提高密码的安全性。
OSPF通过在报文中携带认证信息,在报文头部携带认证类型,在报文尾部携带认证信息。
认证类型包括:
-
0:空认证
-
1:明文认证
-
2:密文认证