跳到主要内容

4. 功能摘要 (Functional Summary)

  1. 功能摘要 (Functional Summary)

    OSPF 的基本路由算法在每个区域中各运行一份独立副本. 接口连接到多个区域的路由器会运行该算法的多个副本. 下面简要概述该路由算法.

    当路由器启动时, 它首先初始化路由协议数据结构. 然后路由器等待低层协议指示其接口已经可用.

    随后, 路由器使用 OSPF 的 Hello Protocol 来获得邻居. 路由器向邻居发送 Hello 报文, 同时也接收它们的 Hello 报文. 在广播网络和点到点网络上, 路由器通过把 Hello 报文发送到多播地址 AllSPFRouters, 动态检测相邻路由器. 在非广播网络上, 为了发现邻居, 可能需要某些配置信息. 在广播网络和 NBMA 网络上, Hello Protocol 还会为该网络选举一个 Designated Router.

    路由器会尝试与新获得的部分邻居形成邻接关系 (adjacency). 链路状态数据库 (link-state database) 会在成对的相邻路由器之间同步. 在广播网络和 NBMA 网络上, Designated Router 决定哪些路由器应成为邻接.

    邻接关系控制路由信息的分发. 路由更新只在邻接关系上发送和接收.

    路由器会周期性通告自己的状态, 该状态也称为 link state. 当路由器状态变化时, 也会通告链路状态. 路由器的邻接关系会反映在其 LSA 内容中. 邻接关系与链路状态之间的这种关系, 使协议能够及时检测失效路由器.

    LSA 会在整个区域中泛洪. 泛洪算法是可靠的, 确保一个区域中的所有路由器都拥有完全相同的链路状态数据库. 该数据库由属于该区域的每台路由器所产生的 LSA 集合构成. 每台路由器都从该数据库计算一棵以自身为根的最短路径树. 这棵最短路径树继而为协议生成路由表.

    4.1. 跨区域路由 (Inter-area routing)

    前一节描述了协议在单一区域内的运行方式. 对于区域内路由, 不需要其他路由信息. 为了能够路由到区域外的目的地, 区域边界路由器会向区域注入额外的路由信息. 这些额外信息是对 Autonomous System 其余拓扑的提炼.

    这种提炼按如下方式完成: 按定义, 每台区域边界路由器都连接到 backbone. 每台区域边界路由器都会汇总其所连接的非 backbone 区域的拓扑, 用于在 backbone 上传输, 并因此传给所有其他区域边界路由器. 然后, 区域边界路由器就拥有关于 backbone 的完整拓扑信息, 以及来自其他每台区域边界路由器的区域汇总信息. 根据这些信息, 路由器计算到所有跨区域目的地的路径. 随后路由器把这些路径通告到其连接的区域中. 这使区域内部路由器在转发发往跨区域目的地的流量时, 能够选择最佳出口路由器.

    4.2. AS 外部路由 (AS external routes)

    拥有其他 Autonomous Systems 相关信息的路由器可以在整个 AS 中泛洪这些信息. 这些外部路由信息会原样分发给每台参与路由器. 有一个例外: 外部路由信息不会被泛洪到 "stub" 区域中 (见 Section 3.6).

    为了使用外部路由信息, 整个 AS 中必须知道到所有通告外部信息的路由器的路径, stub 区域除外. 因此, 这些 AS boundary routers 的位置会由非 stub 的区域边界路由器进行汇总.

    4.3. 路由协议报文 (Routing protocol packets)

    OSPF 协议直接运行在 IP 之上, 使用 IP protocol 89. OSPF 不提供任何显式的分片/重组支持. 当需要分片时, 使用 IP 分片/重组. OSPF 协议报文经过设计, 使大型协议报文通常可以拆分为若干较小的协议报文. 建议采用这种做法; 应尽可能避免 IP 分片.

    路由协议报文发送时, IP TOS 字段应始终设置为 0. 如果可能, 无论发送还是接收, 路由协议报文都应优先于普通 IP 数据流量处理. 为帮助实现这一点, OSPF 协议报文的 IP precedence 字段应设置为 Internetwork Control 值 (见 [Ref5]).

    所有 OSPF 协议报文共享一个公共协议头部, 该头部在 Appendix A 中描述. OSPF 报文类型列在下面的 Table 8 中. 它们的格式也在 Appendix A 中描述.



    Type Packet name Protocol function
    __________________________________________________________
    1 Hello Discover/maintain neighbors
    2 Database Description Summarize database contents
    3 Link State Request Database download
    4 Link State Update Database update
    5 Link State Ack Flooding acknowledgment


    Table 8: OSPF 报文类型.


    OSPF 的 Hello protocol 使用 Hello 报文来发现并维护邻居关系. Database Description 和 Link State Request 报文用于形成邻接关系. OSPF 的可靠更新机制由 Link State Update 和 Link State Acknowledgment 报文实现.

    每个 Link State Update 报文都会把一组新的 link state advertisements (LSA) 从其起源点再向外传送一跳. 单个 Link State Update 报文可以包含多台路由器的 LSA. 每个 LSA 都带有起源路由器的 ID, 以及其链路状态内容的校验和. 每个 LSA 还有一个类型字段; 不同类型的 OSPF LSA 列在下面的 Table 9 中.

    除 Hello 外, OSPF 路由报文只通过邻接关系发送. 这意味着, 除通过虚邻接发送的报文外, 所有 OSPF 协议报文都只经过一个 IP 跳. OSPF 协议报文的 IP 源地址是路由器邻接关系的一端, IP 目的地址则是邻接关系的另一端或一个 IP 多播地址.

    4.4. 基本实现要求 (Basic implementation requirements)

    OSPF 的实现需要以下系统支持:


    Timers
    需要两类定时器. 第一类称为 "single shot timers", 只触发一次并导致处理一个协议事件. 第二类称为 "interval timers", 按连续间隔触发. 它们用于按固定间隔发送报文. 一个典型例子是定期广播 Hello 报文. 两类定时器的粒度都是一秒.

    interval timers 的实现应避免漂移. 在某些路由器实现中, 报文处理可能影响定时器执行. 当多个路由器连接到同一个网络并都在进行广播时, 这可能导致路由报文同步, 而这种情况应避免. 如果定时器无法实现为避免漂移, 则每次触发时应向 interval timer 增加或减少一个小的随机量.








    LS LSA LSA description
    type name
    ________________________________________________________
    1 Router-LSAs 由所有路由器产生.
    该 LSA 描述路由器到某个
    区域的接口状态集合.
    仅在单一区域内泛洪.
    ________________________________________________________
    2 Network-LSAs 由 Designated Router 为广播
    网络和 NBMA 网络产生.
    该 LSA 包含连接到该网络的
    路由器列表. 仅在单一区域内泛洪.
    ________________________________________________________
    3,4 Summary-LSAs 由区域边界路由器产生, 并在
    LSA 关联的区域中泛洪.
    每个 summary-LSA 描述一条到
    区域外但仍在 AS 内部目的地的
    路由, 即跨区域路由.
    Type 3 summary-LSAs 描述
    到网络的路由. Type 4
    summary-LSAs 描述到
    AS boundary routers 的路由.
    ________________________________________________________
    5 AS-external-LSAs 由 AS boundary routers 产生,
    并在整个 AS 中泛洪.
    每个 AS-external-LSA 描述一条
    到另一个 Autonomous System 中
    目的地的路由. AS 的默认路由
    也可由 AS-external-LSAs 描述.






    Table 9: OSPF 链路状态通告 (LSA).



    IP multicast
    某些 OSPF 报文采用 IP 多播数据报形式. 必须支持接收和发送 IP 多播数据报, 并具备相应的低层协议支持. OSPF 使用的 IP 多播数据报绝不会超过一跳. 因此, 不要求具备转发 IP 多播数据报的能力. 有关 IP 多播的信息, 见 [Ref7].

    Variable-length subnet support
    路由器的 IP 协议支持必须包括将单个 IP class A, B 或 C 网络号划分为许多不同大小子网的能力. 这通常称为 variable-length subnetting; 细节见 Section 3.5.

    IP supernetting support
    路由器的 IP 协议支持必须包括将连续的 IP class A, B 和 C 网络集合聚合为称作 supernets 的更大数量的能力. Supernetting 被提出作为改善全球 Internet 中 IP 路由可扩展性的一种方式. 有关 IP supernetting 的更多信息, 见 [Ref10].

    Lower-level protocol support
    这里提到的低层协议是网络接入协议, 例如 Ethernet 数据链路层. 当网络接口上线或下线时, 必须从这些协议向 OSPF 传递指示. 例如, 在 Ethernet 上, 如果能知道 Ethernet 收发器电缆何时被拔出, 将很有价值.

    Non-broadcast lower-level protocol support
    在非广播网络上, 当尝试向一个失效或不存在的路由器发送报文时, 如果能提供指示, 将有助于 OSPF Hello Protocol. 例如, 在 X.25 PDN 上, 收到带有适当 cause 和 diagnostic 的 X.25 clear 可能表明相邻路由器已失效, 该信息会传递给 OSPF.

    List manipulation primitives
    OSPF 的许多功能都以其对 LSA 列表的操作来描述. 例如, 将重传给相邻路由器直到收到确认为止的 LSA 集合被描述为一个列表. 任意特定 LSA 可能同时位于多个此类列表中. OSPF 实现需要能够操作这些列表, 按需添加和删除其中的 LSA.

    Tasking support
    本规范中描述的某些过程会调用其他过程. 有时, 这些其他过程应以内联方式执行, 即在当前过程完成之前执行. 文中通过执行某过程的指令来表示这一点. 其他时候, 这些过程只有在当前过程完成后才执行. 文中通过调度任务的指令来表示这一点.

    4.5. 可选 OSPF 能力 (Optional OSPF capabilities)

    OSPF 协议定义了若干可选能力. 路由器会在其 OSPF Hello 报文、Database Description 报文以及 LSA 中指示它支持的可选能力. 这使支持不同可选能力组合的路由器能够共存于单个 Autonomous System 中.

    某些能力必须由连接到特定区域的所有路由器共同支持. 在这种情况下, 除非报告的能力匹配, 否则路由器不会接受邻居的 Hello Packet, 即能力不匹配会阻止邻居关系形成. ExternalRoutingCapability (见下文) 就是一个例子.

    其他能力可以在 Database Exchange 过程中协商. 这是通过在 Database Description 报文中指定可选能力完成的. 在这种情况下, 与邻居的能力不匹配将导致两个邻居之间只交换链路状态数据库的一个子集.

    路由表构建过程也可能受到可选能力存在与否的影响. 例如, 由于可选能力在 LSA 中报告, 构建最短路径树时可以避开不具备某些功能的路由器.

    本备忘录定义的 OSPF 可选能力列在下面. 更多信息见 Section A.2.


    ExternalRoutingCapability
    整个 OSPF 区域可以配置为 "stubs" (见 Section 3.6). AS-external-LSAs 不会被泛洪到 stub 区域中. 该能力由 OSPF Options 字段中的 E-bit 表示 (见 Section A.2). 为确保 stub 区域配置一致, 所有连接到这种区域的路由器, 在其 Hello 报文中都必须清除 E-bit (见 Sections 9.5 and 10.5).