一. OSPF简介

OSPF(Open Shortest Path First,开放最短路径优先)是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC 2328)。
OSPF具有如下特点:
    l 适应范围广——支持各种规模的网络,最多可支持几百台路由器。
    l 快速收敛——在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
    l 无自环——由于OSPF根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
    l 区域划分——允许自治系统的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
    l 等价路由——支持到同一目的地址的多条等价路由。
    l 路由分级——使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
    l 支持验证——支持基于接口的报文验证,以保证报文交互和路由计算的安全性。
    l 组播发送——在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。

1. OSPF的基本概念
    1) 自治系统(Autonomous System) 
        一组使用相同路由协议交换路由信息的路由器,缩写为AS。
    2) OSPF路由的计算过程
        同一个区域内,OSPF协议路由的计算过程可简单描述如下:
            l 每台OSPF路由器根据自己周围的网络拓扑结构生成LSA(Link State Advertisement,链路状态通告),并通过更新报文将LSA发送给网络中的其它OSPF路由器。
            l 每台OSPF路由器都会收集其它路由器通告的LSA,所有的LSA放在一起便组成了LSDB(Link State Database,链路状态数据库)。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。
            l OSPF路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。各个路由器得到的有向图是完全相同的。
            l 每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
    3) 路由器ID号
        一台运行OSPF协议路由器,每一个OSPF进程必须存在自己的Router ID(路由器ID)。Router ID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由器。
    4) OSPF的协议报文

        OSPF有五种类型的协议报文:
            l Hello报文:周期性发送,用来发现和维持OSPF邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)以及自己已知的邻居。
            l DD(Database Description,数据库描述)报文:描述了本地LSDB中每一条LSA的摘要信息,用于两台路由器进行数据库同步。
            l LSR(Link State Request,链路状态请求)报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。
            l LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的LSA。
            l LSAck(Link State Acknowledgment,链路状态确认)报文:用来对收到的LSA进行确认。内容是需要确认的LSA的Header(一个报文可对多个LSA进行确认)。
    5) LSA的类型
        OSPF中对链路状态信息的描述都是封装在LSA中发布出去,常用的LSA有以下几种类型:
            l Router LSA(Type1):由每个路由器产生,描述路由器的链路状态和开销,在其始发的区域内传播。
            l Network LSA(Type2):由DR产生,描述本网段所有路由器的链路状态,在其始发的区域内传播。
            l Network Summary LSA(Type3):由ABR(Area Border Router,区域边界路由器)产生,描述区域内某个网段的路由,并通告给其他区域。
            l ASBR Summary LSA(Type4):由ABR产生,描述到ASBR(Autonomous System Boundary Router,自治系统边界路由器)的路由,通告给相关区域。
            l AS External LSA(Type5):由ASBR产生,描述到AS(Autonomous System,自治系统)外部的路由,通告到所有的区域(除了Stub区域和NSSA区域)。
            l NSSA External LSA(Type7):由NSSA(Not-So-Stubby Area)区域内的ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。
            l Opaque LSA:是一个被提议的LSA类别,由标准的LSA头部后面跟随特殊应用的信息组成,可以直接由OSPF协议使用,或者由其它应用分发信息到整个OSPF域间接使用。Opaque LSA分为Type 9、Type10、Type11三种类型,泛洪区域不同;其中,Type 9的Opaque LSA仅在本地链路范围进行泛洪,Type 10的Opaque LSA仅在本地区域范围进行泛洪,Type 11的LSA可以在一个自治系统范围进行泛洪。
    6) 邻居和邻接
            l 在OSPF中,邻居(Neighbor)和邻接(Adjacency)是两个不同的概念。
            l OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文。收到Hello报文的OSPF路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。
            l 形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,交换LSA并达到LSDB的同步之后,才形成真正意义上的邻接关系。

2. OSPF区域
    1.  区域划分
        随着网络规模日益扩大,当一个大型网络中的路由器都运行OSPF路由协议时,路由器数量的增多会导致LSDB非常庞大,占用大量的存储空间,并使得运行SPF算法的复杂度增加,导致CPU负担很重。
        在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“振荡”之中,造成网络中会有大量的OSPF协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。
        OSPF协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。如图所示。
            a) OSPF区域划分

        区域的边界是路由器,而不是链路。一个路由器可以属于不同的区域,但是一个网段(链路)只能属于一个区域,或者说每个运行OSPF的接口必须指明属于哪一个区域。划分区域后,可以在区域边界路由器上进行路由聚合,以减少通告到其他区域的LSA数量,还可以将网络拓扑变化带来的影响最小化。

    2.  路由器的类型
        OSPF路由器根据在AS中的不同位置,可以分为以下四类:
            a) 区域内路由器(Internal Router)
                该类路由器的所有接口都属于同一个OSPF区域。
            b) 区域边界路由器ABR(Area Border Router)
                该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域(骨干区域的介绍请参见下一小节)。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
            c) 骨干路由器(Backbone Router)
                该类路由器至少有一个接口属于骨干区域。因此,所有的ABR和位于Area0的内部路由器都是骨干路由器。
            d) 自治系统边界路由器ASBR
                与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它有可能是区域内路由器,也有可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
            e) OSPF路由器的类型

    3.  骨干区域与虚连接
        (1) 骨干区域(Backbone Area)
            l OSPF划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:
                ▪ 所有非骨干区域必须与骨干区域保持连通;
                ▪ 骨干区域自身也必须保持连通。
            l 但在实际应用中,可能会因为各方面条件的限制,无法满足这个要求。这时可以通过配置OSPF虚连接(Virtual Link)予以解决。
        (2) 虚连接(Virtual Link)
            虚连接是指在两台ABR之间通过一个非骨干区域而建立的一条逻辑上的连接通道。它的两端必须是ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)。
            在中,Area2与骨干区域之间没有直接相连的物理链路,但可以在ABR上配置虚连接,使Area2通过一条逻辑链路与骨干区域保持连通。
                a) 虚连接示意图之一

            虚连接的另外一个应用是提供冗余的备份链路,当骨干区域因链路故障不能保持连通时,通过虚连接仍然可以保证骨干区域在逻辑上的连通性。如图所示。
                i) 虚连接示意图之二

            虚连接相当于在两个ABR之间形成了一个点到点的连接,因此,在这个连接上,和物理接口一样可以配置接口的各参数,如发送Hello报文间隔等。
            两台ABR之间直接传递OSPF报文信息,它们之间的OSPF路由器只是起到一个转发报文的作用。由于协议报文的目的地址不是中间这些路由器,所以这些报文对于它们而言是透明的,只是当作普通的IP报文来转发。
    4.  Stub区域
        Stub区域是一些特定的区域,Stub区域的ABR不允许注入Type5 LSA,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
        为了进一步减少Stub区域中路由器的路由表规模以及路由信息传递的数量,可以将该区域配置为Totally Stub(完全Stub)区域,该区域的ABR不会将区域间的路由信息和外部路由信息传递到本区域。
        (Totally)Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,(Totally)Stub区域位于自治系统的边界。
        为保证到本自治系统的其他区域或者自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由,并发布给本区域中的其他非ABR路由器。
        配置(Totally)Stub区域时需要注意下列几点:
            l 骨干区域不能配置成(Totally)Stub区域。
            l 如果要将一个区域配置成Stub区域,则该区域中的所有路由器必须都要配置stub命令。
            l 如果要将一个区域配置成Totally Stub区域,该区域中的所有路由器必须配置stub命令,该区域的ABR路由器需要配置stub [ no-summary ]命令。
            l (Totally)Stub区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
            l 虚连接不能穿过(Totally)Stub区域。

    5.  NSSA区域
        NSSA(Not-So-Stubby Area)区域是Stub区域的变形,与Stub区域有许多相似的地方。NSSA区域也不允许Type5 LSA注入,但可以允许Type7 LSA注入。Type7 LSA由NSSA区域的ASBR产生,在NSSA区域内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,传播到其他区域。
        如图所示,运行OSPF协议的自治系统包括3个区域:区域1、区域2和区域0,另外两个自治系统运行RIP协议。区域1被定义为NSSA区域,区域1接收的RIP路由传播到NSSA ASBR后,由NSSA ASBR产生Type7 LSA在区域1内传播,当Type7 LSA到达NSSA ABR后,转换成Type5 LSA传播到区域0和区域2。
        另一方面,运行RIP的自治系统的RIP路由通过区域2的ASBR产生Type5 LSA在OSPF自治系统中传播。但由于区域1是NSSA区域,所以Type5 LSA不会到达区域1。
        与Stub区域一样,虚连接也不能穿过NSSA区域。
            a) NSSA区域

    6.  路由类型
        OSPF将路由分为四类,按照优先级从高到低的顺序依次为:
            l 区域内路由(Intra Area)
            l 区域间路由(Inter Area)
            l 第一类外部路由(Type1 External)
            l 第二类外部路由(Type2 External)
        区域内和区域间路由描述的是AS内部的网络结构,外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为两类:Type1和Type2。
        第一类外部路由是指接收的是IGP(Interior Gateway Protocol,内部网关协议)路由(例如静态路由和RIP路由)。由于这类路由的可信程度较高,并且和OSPF自身路由的开销具有可比性,所以到第一类外部路由的开销等于本路由器到相应的ASBR的开销与ASBR到该路由目的地址的开销之和。
        第二类外部路由是指接收的是EGP(Exterior Gateway Protocol,外部网关协议)路由。由于这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。所以计算路由开销时将主要考虑前者,即到第二类外部路由的开销等于ASBR到该路由目的地址的开销。如果计算出开销值相等的两条路由,再考虑本路由器到相应的ASBR的开销。

3. OSPF的网络类型
    1) OSPF的4种网络类型
        OSPF根据链路层协议类型将网络分为下列四种类型:
            l 广播(Broadcast)类型:当链路层协议是Ethernet、FDDI时,OSPF缺省认为网络类型是Broadcast。在该类型的网络中,通常以组播形式(224.0.0.5和224.0.0.6)发送协议报文。
            l NBMA(Non-Broadcast Multi-Access,非广播多点可达网络)类型:当链路层协议是帧中继、ATM或X.25时,OSPF缺省认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文。
            l P2MP(Point-to-MultiPoint,点到多点)类型:没有一种链路层协议会被缺省的认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将NBMA改为点到多点的网络。在该类型的网络中,缺省情况下,以组播形式(224.0.0.5)发送协议报文。可以根据用户需要,以单播形式发送协议报文。
            l P2P(Point-to-Point,点到点)类型:当链路层协议是PPP、HDLC时,OSPF缺省认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文。

    2) NBMA网络的配置原则
        NBMA网络是指非广播、多点可达的网络,比较典型的有ATM和帧中继网络。
        对于接口的网络类型为NBMA的网络需要进行一些特殊的配置。由于无法通过广播Hello报文的形式发现相邻路由器,必须手工为该接口指定相邻路由器的IP地址,以及该相邻路由器是否有DR选举权等。
        NBMA网络必须是全连通的,即网络中任意两台路由器之间都必须有一条虚电路直接可达。如果部分路由器之间没有直接可达的链路时,应将接口配置成P2MP类型。如果路由器在NBMA网络中只有一个对端,也可将接口类型配置为P2P类型。

        NBMA与P2MP网络之间的区别如下:
            ▪ NBMA网络是指那些全连通的、非广播、多点可达网络。而P2MP网络,则并不需要一定是全连通的。
            ▪ 在NBMA网络中需要选举DR与BDR,而在P2MP网络中没有DR与BDR。
            ▪ NBMA是一种缺省的网络类型,而P2MP网络必须是由其它的网络强制更改的。最常见的做法是将NBMA网络改为P2MP网络。
            ▪ NBMA网络采用单播发送报文,需要手工配置邻居。P2MP网络采用组播方式发送报文。

4. DR/BDR
    1) DR/BDR简介
        在广播网和NBMA网络中,任意两台路由器之间都要交换路由信息。如果网络中有n台路由器,则需要建立n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了指定路由器DR(Designated Router),所有路由器都只将信息发送给DR,由DR将网络链路状态发送出去。
        如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,再与新的DR同步。这需要较长的时间,在这段时间内,路由的计算是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router,备份指定路由器)的概念。
        BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的。当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
        运行OSPF进程的网络中,既不是DR也不是BDR的路由器为DR Other。DR Other
        仅与DR和BDR之间建立邻接关系,DR Other之间不交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量,同时减少网络流量,节约了带宽资源。
        如图所示,用实线代表以太网物理连接,虚线代表建立的邻接关系。可以看到,采用DR/BDR机制后,5台路由器之间只需要建立7个邻接关系就可以了。
        DR和BDR示意图

    2) DR/BDR选举过程
        DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选举资格。
        进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
        需要注意的是:
            ▪ 只有在广播或NBMA类型接口才会选举DR,在点到点或点到多点类型的接口上不需要选举DR。
            ▪ DR是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。
            ▪ 路由器的优先级可以影响DR/BDR的选举过程,但是当DR/BDR已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经存在的DR/BDR成为新的DR/BDR。
            ▪ DR并不一定就是路由器优先级最高的路由器接口;同理,BDR也并不一定就是路由器优先级次高的路由器接口。
5. OSPF的协议报文
    OSPF报文直接封装为IP报文协议报文,协议号为89。一个比较完整的OSPF报文(以LSU报文为例)结构如图所示。
        1) OSPF报文结构

        2) OSPF报文头
            OSPF有五种报文类型,它们有相同的报文头。如图所示。
            OSPF报文头格式

                主要字段的解释如下:
                    ▪ Version:OSPF的版本号。对于OSPFv2来说,其值为2。
                    ▪ Type:OSPF报文的类型。数值从1到5,分别对应Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
                    ▪ Packet length:OSPF报文的总长度,包括报文头在内,单位为字节。
                    ▪ Router ID:始发该LSA的路由器的ID。
                    ▪ Area ID:始发LSA的路由器所在的区域ID。
                    ▪ Checksum:对整个报文的校验和。
                    ▪ AuType:验证类型。可分为不验证、简单(明文)口令验证和MD5验证,其值分别为0、1、2。
                    ▪ Authentication:其数值根据验证类型而定。当验证类型为0时未作定义,为1时此字段为密码信息,类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。
                    MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
        3) Hello报文(Hello Packet)
            最常用的一种报文,周期性的发送给邻居路由器用来维持邻居关系以及DR/BDR的选举,内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。Hello报文格式如图所示。
            i) Hello报文格式

                主要字段解释如下:
                    ▪ Network mask:发送Hello报文的接口所在网络的掩码,如果相邻两台路由器的网络掩码不同,则不能建立邻居关系。
                    ▪ HelloInterval:发送Hello报文的时间间隔。如果相邻两台路由器的Hello间隔时间不同,则不能建立邻居关系。
                    ▪ Rtr Pri:路由器优先级。如果设置为0,则该路由器接口不能成为DR/BDR。
                    ▪ RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。如果相邻两台路由器的失效时间不同,则不能建立邻居关系。
                    ▪ Designated router:指定路由器的接口的IP地址。
                    ▪ Backup designated router:备份指定路由器的接口的IP地址。
                    ▪ Neighbor:邻居路由器的Router ID。
        4) DD报文(Database Description Packet)
            两台路由器进行数据库同步时,用DD报文来描述自己的LSDB,内容包括LSDB中每一条LSA的摘要(摘要是指LSA的Header,通过该Header可以唯一标识一条LSA)。这样做是为了减少路由器之间传递信息的量,因为LSA的Header只占一条LSA的整个数据量的一小部分,根据Header,对端路由器就可以判断出是否已有这条LSA。
            i) DD报文格式

                主要字段的解释如下:
                     Interface MTU:在不分片的情况下,此接口最大可发出的IP报文长度。
                     I(Initial):当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
                     M(More):当连续发送多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。
                     MS(Master/Slave):当两台OSPF路由器交换DD报文时,首先需要确定双方的主(Master)从(Slave)关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
                     DD Sequence Number:DD报文序列号,由Master方规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
        5) LSR报文(Link State Request Packet)
            两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。
            i) LSR报文格式

                主要字段解释如下:
                     LS type:LSA的类型号。例如Type1表示Router LSA。
                     Link State ID:链路状态标识,根据LSA的类型而定。
                     Advertising Router:产生此LSA的路由器的Router ID。
        6) LSU报文(Link State Update Packet)
            LSU报文用来向对端路由器发送它所需要的LSA,内容是多条LSA(全部内容)的集合。LSU报文格式如图所示。
            i) LSU报文格式

                主要字段解释如下:
                     Number of LSAs:该报文包含的LSA的数量。
                     LSA:该报文包含的LSA。
        7) LSAck报文(Link State Acknowledgment Packet)
            LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。一个LSAck报文可对多个LSA进行确认。报文格式如图所示。
            i) LSAck报文格式

                主要字段解释如下:
                LSA Headers:该报文包含的LSA头部。
        8) LSA头格式
            所有的LSA都有相同的报文头,其格式如图所示。
            1) LSA的头格式

                主要字段的解释如下:
                     LS age:LSA产生后所经过的时间,以秒为单位。LSA在本路由器的链路状态数据库(LSDB)中会随时间老化(每秒钟加1),但在网络的传输过程中却不会。
                     LS type:LSA的类型。
                     Link State ID:具体数值根据LSA的类型而定。
                     Advertising Router:始发LSA的路由器的ID。
                     LS sequence number:LSA的序列号,其他路由器根据这个值可以判断哪个LSA是最新的。
                     LS checksum:除了LS age字段外,关于LSA的全部信息的校验和。
                     length:LSA的总长度,包括LSA Header,以字节为单位。
        9) LSA类型
            i) Router LSA
                Router LSA格式

                主要字段的解释如下:
                     Link State ID:产生此LSA的路由器的Router ID。
                     V(Virtual Link):如果产生此LSA的路由器是虚连接的端点,则置为1。
                     E(External):如果产生此LSA的路由器是ASBR,则置为1。
                     B(Border):如果产生此LSA的路由器是ABR,则置为1。
                     # Links:LSA中所描述的链路信息的数量,包括路由器上处于某区域中的所有链路和接口。
                     Link ID:链路标识,具体的数值根据链路类型而定。
                     Link data:链路数据,具体的数值根据链路类型而定。
                     Type:链路类型,取值为1表示通过点对点链路与另一路由器相连,取值为2表示连接到传送网络,取值为3表示连接到Stub网络,取值为4表示虚连接。
                     #TOS:描述链路的不同方式的数量。
                     Metric:链路的开销。
                     TOS:服务类型。
                     TOS metric:指定服务类型的链路的开销。
            ii) Network LSA
                Network LSA由广播网或NBMA网络中的DR发出,LSA中记录了这一网段上所有路由器的Router ID。
                Network LSA格式

                主要字段的解释如下:
                     Link State ID:DR的IP地址。
                     Network mask:广播网或NBMA网络地址的掩码。
                     Attached router:连接在同一个网段上的所有与DR形成了完全邻接关系的路由器的Router ID,也包括DR自身的Router ID。
            iii) Summary LSA
                Network Summary LSA(Type3 LSA)和ASBR Summary LSA(Type4 LSA)除Link State ID字段有所不同外,有着相同的格式,它们都是由ABR产生。
                Summary LSA格式

                主要字段的解释如下:
                     Link State ID:对于Type3 LSA来说,它是所通告的区域外的网络地址;对于Type4来说,它是所通告区域外的ASBR的Router ID。
                     Network mask:Type3 LSA的网络地址掩码。对于Type4 LSA来说没有意义,设置为0.0.0.0。
                     Metric:到目的地址的路由开销。
                Type3的LSA可以用来通告缺省路由,此时Link State ID和Network Mask都设置为0.0.0.0。
            iv) AS External LSA
                由ASBR产生,描述到AS外部的路由信息。
                AS External LSA格式

                主要字段的解释如下:
                     Link State ID:所要通告的其他外部AS的目的地址,如果通告的是一条缺省路由,那么链路状态ID(Link State ID)和网络掩码(Network Mask)字段都将设置为0.0.0.0。
                     Network mask:所通告的目的地址的掩码。
                     E(External Metric):外部度量值的类型。如果是第2类外部路由就设置为1,如果是第1类外部路由则设置为0。
                     Metirc:路由开销。
                     Forwarding Address:到所通告的目的地址的报文将被转发到的地址。
                     External Route Tag:添加到外部路由上的标记。OSPF本身并不使用这个字段,它可以用来对外部路由进行管理。
            v) NSSA External LSA
                由NSSA区域内的ASBR产生,且只能在NSSA区域内传播。其格式与AS External LSA相同,如图所示。
                NSSA External LSA格式

6. 系统支持的OSPF特性
    1) 多进程
        OSPF支持多进程,在同一台路由器上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。支持多个OSPF进程公用一个RID。
        路由器的一个接口只能属于某一个OSPF进程。
    2) 验证
        OSPF支持报文验证功能,只有通过验证的OSPF报文才能接收,否则将不能正常建立邻居关系。
        一个区域中所有的接口的验证类型(不支持验证、支持明文验证或者支持MD5密文验证)必须一致。一个网段中所有接口的验证字口令必须一致。
    3) 热备份
        分布式结构的路由器支持OSPF热备份(Hot Standby,HSB)特性。OSPF将会把主用主控板(Active Main Board,AMB)上必要的信息备份到备用主控板(Standby Main Board,SMB)上。当AMB发生故障时,SMB将会取代它的功能,使OSPF可以不受任何影响地正常运行。
        OSPF支持两种热备份方式:
             备份所有OSPF数据,一旦发生AMB和SMB切换,OSPF能够马上恢复正常运行。
             只备份OSPF配置信息,发生AMB和SMB切换时,OSPF进行Graceful Restart(GR),从邻居那里获得邻接关系,并对LSDB进行同步。
        GR是平缓重启路由器的一种功能,主要用于HA(High Availability,高可靠性),不会对其他路由器造成影响。
        一台路由器上的OSPF进程重启后,它的邻居路由器就会把它从邻居列表中删除,并通知给其他路由器,这样就要重新计算SPF。如果路由器关闭的时间很短,可能只是几秒钟,就没有必要影响整个网络的拓扑结构。几秒钟之后路由器恢复工作,又需要重新建立邻接关系并计算SPF。
        为了避免不必要的SPF计算,当一台路由器重启时,会通知与它相邻的路由器它只是暂时断开,马上就会恢复正常。这样,邻居路由器就不会将进行GR操作的路由器从邻居列表中删除,其他路由器也不会知道有路由器重启。
        重启的路由器恢复工作之后,将会通过GR相关的同步机制重新从邻居路由器处同步LSDB。
    4) OSPF GR
        基于OSPF的GR Restarter进行协议重启后,为了与其OSPF邻居重新同步链路状态数据库,它必须完成下列两项任务:
             在不改变邻接关系的前提下,重新获取网络中的有效OSPF邻居信息;
             重新获取网络链路状态数据库的内容。
        在OSPF协议重启前,GR Restarter与GR Helper协商GR能力,如果GR Restarter发生重启,在重启过程中,GR Helper宣告与GR Restarter的邻接状态不变。
        OSPF协议重启完毕后,GR Restarter会立即向其邻接的GR Helper发送一个OSPF GR信号。这样,OSPF邻居就不会复位与其的邻居关系。在收到其OSPF邻居的响应后,GR Restarter会重新恢复与其的邻居关系列表。
        邻居关系重新建立后,GR Restarter与其所有具备GR感知能力的OSPF邻居之间同步数据库,并交换路由信息。交换完成后,GR Restarter根据新的路由转发信息更新路由表和转发表,删除失效的路由,完成OSPF协议收敛。
    5) TE与DS-TE
        OSPF TE(Traffic Engineering,流量工程)支持建立和维护TE的LSP(Label Switch Path,标签交换路径)。
        MPLS(MultiProtocol Label Switching,多协议标签交换)在构建CR LSP(Constraint-based Routed LSP,基于约束路由的LSP)时,需要了解本区域中所有链路的流量属性信息。它通过OSPF来获取链路的流量工程信息。
        OSPF支持Opaque LSA,可以用来承载流量工程信息。
        DS-TE(DiffServ Aware TE)主要用于优化和分配网络传输资源、对流进行分类、指定每条流在链路带宽中所占的比例。流量工程是基于划分后的类(细粒度聚合类)实现的,而不是聚合的类(粗粒度聚合类)。这一点改善了性能和带宽的利用率。
        为了支持MPLS中DS-TE的应用,OSPF支持子TLV(Local Overbooking Multiplier TLV)和BC(Bandwidth Constraint,带宽约束)TLV。
    6) IGP Shortcut和Forwarding Adjacency
        OSPF支持IGP Shortcut和Forwarding Adjacency特性,这两个特性允许OSPF使用LSP作为到达某个目的地址的出接口。否则,即使存在到达某个目的地址的LSP,OSPF也不能使用它作为出接口。
             IGP Shortcut和Forwarding Adjacency的区别在于:
             如果仅使能了Forwarding Adjacency特性,OSPF也可以使用LSP到达目的地址;
             如果仅使能了IGP Shortcut,则只有使能此特性的路由器才可以在路由中使用LSP。
    7) OSPF支持多实例
        OSPF支持多实例,可以运行在×××网络中的PE上。
        在BGP MPLS ×××网络中,属于同一个×××的多个Site可以使用OSPF作为内部路由协议。然而,它们会被看作属于不同的自治系统来处理。这样,在一个节点学到的OSPF路由,将被作为外部路由传送给另一节点。这种处理方式导致了比较高的OSPF路由协议流量,并带来了一些原本可以避免的网络管理问题。
        目前,可以在PE上通过配置域ID来区分Site所在的×××。属于同一个×××的不同Site之间彼此看做是直接相连的。这样,PE路由器之间交换OSPF路由信息时就好象是通过一条专线相连,改善了网络管理并使OSPF的应用更为有效。
    8) OSPF伪连接
        OSPF伪连接(sham link)是MPLS ×××骨干网上两个PE路由器之间的点到点链路。
        通常情况下,BGP对等体之间通过BGP扩展团体属性在MPLS ×××骨干网上承载路由信息。另一端PE上运行的OSPF可利用这些信息来生成PE到CE的Type3 LSA,这些路由是区域间路由。
        但是,如果路由器和它同一区域内的PE路由器相连,且建立到达特定目的地址的内部区域路由(后门路由),那么×××流量就将总是穿越这条后门路由,而不是骨干路由。这是因为在路由表中建立的OSPF内部区域路由的优先级较高。为了避免这一异常现象,可以在PE路由器之间配置一条unnumbered的点到点伪连接。这样,就可以通过一条低开销的内部区域路由到达PE路由器。

二. 配置OSPF

1. OSPF基本功能配置
    1) 启动OSPF进程
        [Router]ospf process-id 
    2) 配置OSPF区域
        [Router-ospf-1]area area-id
    3) 配置区域所包含的网段并在指定网段的接口上使能OSPF
        [Router-ospf-1-area-0.0.0.0]network network-address wildcard-mask 
    4) 配置设备的Router ID
        [Router]router id router-id
    5) 配置OSPF协议的Router ID
        [Router]ospf process-id router-id router-id
2. OSPF高级配置
    1) 配置OSPF虚链接
        [Router-ospf-1-area-0.0.0.1] vlink-peer router-id [ hello seconds | retransmit seconds | trans-delay seconds | dead seconds] 
    2) STUB区域配置
        [Router-ospf-1-area-0.0.0.1] stub 
    3) Totally Stub区域配置
        [Router-ospf-1-area-0.0.0.1] stub no-summary 
    4) NSSA区域配置 
        [Router-ospf-1-area-0.0.0.1]nssa 
    5) Totally Nssa区域配置
        [Router-ospf-1-area-0.0.0.1]nssa  no-summary 
    6) ABR上配置路由聚合
        abr-summary ip-address { mask | mask-length } [ advertise | not-advertise ] [ cost cost ]
    7) ASBR上配置路由聚合
        asbr-summary ip-address { mask | mask-length } [ tag tag | not-advertise | cost cost ] 
    8) 禁止端口发送OSPF报文
        silent-interface { all | interface-type interface-number }
    9) 配置OSPF对计算出的路由进行过滤
        [Router-ospf-1] filter-policy { acl-number | ip-prefix ip-prefix-name | gateway ip-prefix-name } import
    10) 配置对Type3 LSA进行过滤
        [Router-ospf-1-area-0.0.0.0] filter { acl-number | ip-prefix ip-prefix-name } { import | export }
3. OSPF验证
    1) 配置OSPF区域的验证模式
        [Router-ospf-1-area-0.0.0.1] authentication-mode { simple | md5 }
    2) 配置OSPF接口的验证模式(简单验证)
        [Router-GigabitEthernet0/0] ospf authentication-mode simple [ plain | cipher ] password
    3) 配置OSPF接口的验证模式(MD5验证)
        [Router-GigabitEthernet0/0] ospf authentication-mode { md5 | hmac-md5 } key-id [ plain | cipher ] password
4. 优化OSPF网络
    1) 配置OSPF接口的网络类型
        [Router-GigabitEthernet0/0] ospf network-type { broadcast | nbma | p2mp | p2p }
    2) 配置OSPF接口的路由器优先级
        [Router-GigabitEthernet0/0] ospf dr-priority priority
    3) 配置NBMA网络的邻居
        [Router-ospf-1] peer ip-address [ dr-priority dr-priority ]
5. 配置OSPF接口开销
    1) 配置OSPF接口的开销值
        [Router-GigabitEthernet0/0] ospf cost value
    2) 配置OSPF接口的参考带宽
        [Router-ospf-1] bandwidth-reference value
6. 配置OSPF报文定时器
    1) 配置OSPF的Hello定时器
        [Router- ospf-1] ospf timer hello seconds
    2) 配置OSPF的邻居失效时间
        [Router-ospf-1] ospf timer dead seconds
7. OSPF显示与调试
    a. 显示OSPF邻居信息
        [Router]display ospf peer
    b. 显示OSPF接口信息
        [Router]display ospf interface
    c. 显示OSPF路由信息 
        [Router]display ospf routing
    d. 显示OSPF摘要信息
        display ospf brief    
    e. 显示OSPF统计信息
        display ospf cumulative
    f. 显示OSPF的错误信息
        display ospf error
    g. 显示OSPF的LSDB信息
        display ospf lsdb
    h. OSPF链路状态通告调试信息
        debugging ospf lsa
    i. OSPF报文调试信息
        debugging ospf packet
    j. OSPF路由计算调试信息
        debugging ospf spf
    k. OSPF进程调试信息
        <Router>debugging ospf INTEGER<1-65535>