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区域,如表6-2所示。
区域类型 |
作用 |
说明 |
---|---|---|
普通区域 |
缺省情况下,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域中。 |
|
路由器类型
根据在自治系统AS中的不同位置,路由器可以分为以下几类。请参见图6-1和表6-3。
路由器类型 |
含义 |
---|---|
区域内路由器(Internal Router) |
该类路由器的所有接口都属于同一个OSPF区域。 |
该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。 ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
|
骨干路由器(Backbone Router) |
该类路由器至少有一个接口属于骨干区域。 所有的ABR和位于骨干区域的内部路由器都是骨干路由器。 |
与其他AS交换路由信息的路由器称为ASBR。 ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。 |
LSA
OSPF中对路由信息的描述都是封装在链路状态通告LSA(Link State Advertisement)中发布出去的,常用的LSA如表6-4所示。
LSA类型 |
LSA作用 |
---|---|
Router-LSA(Type1) |
每个路由器都会产生,描述了路由器的链路状态和开销,在发布路由器所属的区域内传播。 |
Network-LSA(Type2) |
由DR产生,描述本网段的链路状态,在DR所属的区域内传播。 |
Network-summary-LSA(Type3) |
由ABR产生,描述区域内某个网段的路由,并通告给其他区域(除了Totally Stub和Totally NSSA区域)。例如:ABR同时属于Area0和Area1,Area0内存在网段10.1.1.0,Area1内存在网段11.1.1.0,ABR为Area0生成到网段11.1.1.0的Type3 LSA;ABR为Area1生成到网段10.1.1.0的Type3 LSA。 |
ASBR-summary-LSA(Type4) |
由ABR产生,描述本区域到其他区域中的ASBR的路由,通告给除ASBR所在区域的其他区域(除了Stub区域、Totally Stub、NSSA区域和Totally NSSA区域)。 |
由ASBR产生,描述到AS外部的路由,通告到所有的区域(除了Stub区域、Totally Stub、NSSA区域和Totally NSSA区域)。 |
|
由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。 |
|
Opaque LSA(Type9/Type10/Type11) |
Opaque LSA提供用于OSPF的扩展的通用机制。其中:
|
LSA在各区域中传播的支持情况如表6-5所示。
报文类型
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文,如表6-6所示。
报文类型 |
报文作用 |
---|---|
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进行确认。 |
路由类型
自治系统AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。
表6-7中按优先级从高到低顺序列出了路由类型。
路由类型 |
含义 |
---|---|
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根据链路层协议类型,将网络分为如表6-8所列四种类型。
DR和BDR
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如图6-2所示,网络中有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的邻居,说明骨干区域没有转发能力,发布缺省路由没有实际意义。状态full的概念请参见OSPF邻居状态机。
不同区域缺省路由发布原则如表6-9所示。
区域类型 |
缺省路由发布原则 |
---|---|
普通区域 |
缺省情况下,普通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)(除了缺省的Type3 LSA之外)在区域内传播。 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Totally Stub区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA Area |
NSSA区域允许引入少量通过本区域的ASBR到达的外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。如果骨干区域中存在Full状态的邻居和Up状态的接口,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)(除了缺省的Type3 LSA之外)在区域内传播。 区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生缺省的Type3 LSA和Type7 LSA通告到整个Totally NSSA区域内。这样,自治系统外部路由和区域间路由都可以通过ABR在区域内传播。 |