跳到主要内容

1. 引言 (Introduction)

  1. 引言 (Introduction)

    本文档是 Open Shortest Path First (OSPF) TCP/IP internet 路由协议的规范。OSPF 被归类为 Interior Gateway Protocol (IGP,内部网关协议)。这意味着它在属于同一个 Autonomous System (AS,自治系统) 的路由器之间分发路由信息。OSPF 协议基于链路状态 (link-state) 或 SPF 技术。这不同于传统 TCP/IP internet 路由协议所使用的 Bellman-Ford 基础。

    OSPF 协议由 Internet Engineering Task Force (IETF) 的 OSPF 工作组开发。它专门为 TCP/IP internet 环境设计,包括对 CIDR (无类域间路由) 的显式支持,以及对外部派生路由信息加标签 (tagging)。OSPF 还支持路由更新认证 (authentication),并在发送/接收更新时使用 IP 多播 (multicast)。此外,为了产生一种能快速响应拓扑变化、同时只产生少量路由协议流量的协议,已经进行了大量工作。

    1.1. 协议概述 (Protocol overview)

    OSPF 仅根据 IP 报文头部中的目的 IP 地址来路由 IP 报文。IP 报文按 "as is" (原样) 方式转发,在穿越 Autonomous System 时不会再封装到任何其他协议头部中。OSPF 是动态路由协议。它能快速检测 AS 中的拓扑变化,例如路由器接口故障,并在一段收敛期 (convergence) 后计算出新的无环路 (loop-free) 路由。该收敛期很短,且只涉及最少的路由流量。

    在链路状态路由协议中,每台路由器都维护一个描述 Autonomous System 拓扑的数据库。该数据库称为链路状态数据库 (link-state database)。每台参与路由器都拥有完全相同的数据库。该数据库中的每个单独数据项都是某台路由器的本地状态 (local state),例如路由器可用接口和可达邻居。路由器通过泛洪 (flooding) 将其本地状态分发到整个 Autonomous System。

    所有路由器并行运行完全相同的算法。每台路由器以其自身为根,从链路状态数据库构造一棵最短路径树 (shortest-path tree)。这棵最短路径树给出了到达 Autonomous System 中每个目的地的路由。外部派生的路由信息作为叶子 (leaves) 出现在树上。

    当存在多条到同一目的地的等价 (equal-cost) 路由时,流量会在它们之间进行均等分发。一条路由的代价 (cost) 由一个单一的、无量纲 (dimensionless) 的度量 (metric) 来描述。

    OSPF 允许将一组网络分组在一起。这样的一个分组称为区域 (area)。一个区域的拓扑对 Autonomous System 的其余部分隐藏。这种信息隐藏 (information hiding) 使得路由流量显著减少。此外,区域内的路由仅由该区域自身的拓扑决定,从而赋予该区域免受不良路由数据影响的能力。区域是 IP 子网化网络 (subnetted network) 的一种泛化。

    OSPF 支持灵活的 IP 子网配置。OSPF 分发的每条路由都有一个目的地和掩码 (mask)。同一 IP 网络号的两个不同子网可以具有不同的大小(即不同的掩码)。这通常被称为变长子网划分 (variable length subnetting)。报文被路由到最佳(即最长或最具体)匹配。主机路由 (host routes) 被视为掩码为 "全 1"(0xffffffff)的子网。

    OSPF 的所有协议交换都经过认证。这意味着只有受信任的路由器才能参与 Autonomous System 的路由。可以使用多种认证方案;事实上,可以为每个 IP 子网配置独立的认证方案。

    外部派生的路由数据(例如,从 Exterior Gateway Protocol 如 BGP 学习到的路由;参见 [Ref23])会被通告到整个 Autonomous System。这种外部派生数据与 OSPF 协议的链路状态数据保持分离。每条外部路由也可以由通告路由器打上标签 (tagged),从而能够在 Autonomous System 边界上的路由器之间传递额外信息。

    1.2. 常用术语定义 (Definitions of commonly used terms)

    本节为 OSPF 协议中具有特定含义、并在全文使用的术语提供定义。不熟悉 Internet Protocol Suite 的读者可参阅 [Ref13] 以了解 IP 简介。
    
    Router (路由器)
        一个三层 (level three) Internet Protocol 报文交换机。在大量 IP 文献中以前称为 gateway (网关)。
    
    Autonomous System (自治系统)
        一组通过公共路由协议交换路由信息的路由器。缩写为 AS。
    
    Interior Gateway Protocol (内部网关协议)
        属于某个 Autonomous System 的路由器所使用的路由协议。缩写为 IGP。每个 Autonomous System 有且仅有一个 IGP。不同的 Autonomous System 可能运行不同的 IGP。
    
    Router ID (路由器 ID)
        分配给每台运行 OSPF 协议的路由器的 32 位数值。该数值在 Autonomous System 内唯一标识该路由器。
    
    Network (网络)
        在本备忘录中,指一个 IP 网络/子网/超网 (network/subnet/supernet)。一个物理网络有可能被分配多个 IP 网络/子网号。我们将这些视为独立的网络。点到点 (point-to-point) 物理网络是一个例外——无论分配给它们的 IP 网络/子网号有多少个(如果有的话),它们都被视为单一网络。
    
    Network mask (网络掩码)
        一个 32 位数值,指示驻留在单一 IP 网络/子网/超网上的 IP 地址范围。本规范以十六进制数显示网络掩码。
    
        例如,一个 C 类 IP 网络的网络掩码显示为 0xffffff00。这样的掩码在文献的其他地方常显示为 255.255.255.0。
    
    Point-to-point networks (点到点网络)
        仅连接一对路由器的网络。一条 56Kb 串行线路就是点到点网络的一个例子。
    
    Broadcast networks (广播网络)
        支持多个(多于两个)附加路由器,并且能够将单一物理报文寻址到所有附加路由器(广播,broadcast)的网络。在这些网络上,相邻路由器 (neighboring routers) 通过 OSPF 的 Hello 协议 (Hello Protocol) 动态发现。Hello 协议本身利用了广播能力。如果存在多播能力,OSPF 协议会进一步加以利用。假定广播网络上的每一对路由器都能直接通信。以太网 (ethernet) 是广播网络的一个例子。
    
    Non-broadcast networks (非广播网络)
        支持多个(多于两个)路由器、但不具备广播能力的网络。在这些网络上,相邻路由器通过 OSPF 的 Hello 协议维护。然而,由于缺乏广播能力,可能需要一些配置信息来辅助发现邻居。在非广播网络上,通常多播发送的 OSPF 协议报文需要依次发送到每个相邻路由器。X.25 公用数据网 (PDN) 是非广播网络的一个例子。
    
        OSPF 在非广播网络上以两种模式之一运行。第一种模式称为非广播多路访问 (non-broadcast multi-access, NBMA),模拟 OSPF 在广播网络上的运行。第二种模式称为 Point-to-MultiPoint (点到多点),将非广播网络视为一组点到点链路。根据 OSPF 在该网络上的运行模式,非广播网络被称为 NBMA 网络或 Point-to-MultiPoint 网络。
    
    Interface (接口)
        路由器与其某个附加网络之间的连接。一个接口关联有状态信息,这些信息得自底层低级协议以及路由协议本身。到一个网络的接口关联有单一的 IP 地址和掩码(除非该网络是无编号 (unnumbered) 的点到点网络)。接口有时也被称为链路 (link)。
    
    Neighboring routers (相邻路由器)
        两个拥有到同一公共网络接口的路由器。邻居关系由 OSPF 的 Hello 协议维护,并且通常是动态发现的。
    
    Adjacency (邻接)
        为了交换路由信息,在选定的相邻路由器之间形成的一种关系。并非每一对相邻路由器都会成为邻接。
    
    Link state advertisement (链路状态通告)
        描述路由器或网络的本地状态的数据单元。对于路由器而言,这包括路由器接口和邻接的状态。每个链路状态通告都被泛洪到整个路由域 (routing domain)。所有路由器和网络的链路状态通告汇总起来,形成了协议的链路状态数据库。在本备忘录中,link state advertisement 缩写为 LSA。
    
    Hello Protocol (Hello 协议)
        OSPF 协议中用于建立和维护邻居关系的部分。在广播网络上,Hello 协议还可以动态发现相邻路由器。
    
    Flooding (泛洪)
        OSPF 协议中用于在 OSPF 路由器之间分发和同步链路状态数据库的部分。
    
    Designated Router (指定路由器)
        每个拥有至少两个附加路由器的广播网络和 NBMA 网络都有一个 Designated Router (指定路由器)。Designated Router 为网络生成 LSA,并在协议运行过程中承担其他特殊职责。Designated Router 由 Hello 协议选举产生。
    
        Designated Router 概念减少了广播或 NBMA 网络上所需的邻接数量。这进而减少了路由协议流量以及链路状态数据库的大小。
    
    Lower-level protocols (低级协议)
        为 Internet Protocol、进而为 OSPF 协议提供服务的底层网络访问协议。例如,X.25 PDN 的 X.25 分组层 (packet level) 和帧层 (frame level),以及以太网的以太网数据链路层 (data link layer)。
    

    1.3. 链路状态路由技术的简史 (Brief history of link-state routing technology)

    OSPF 是一种链路状态路由协议。这类协议在文献中也称为基于 SPF 的 (SPF-based) 或分布式数据库 (distributed-database) 协议。本节简要描述影响了 OSPF 协议的链路状态技术的发展。

    第一个链路状态路由协议是为 ARPANET 分组交换网络开发的。该协议在 [Ref3] 中描述。它构成了所有其他链路状态协议的起点。同构的 ARPANET 环境,即由同步串行线路连接的单一厂商分组交换机,简化了原始协议的设计与实现。

    [Ref4] 中提出了对该协议的修改。这些修改涉及通过(除其他手段外)为 LSA 增加校验和 (checksum)(从而检测数据库损坏)来提高路由协议的容错能力。该论文还包括减少链路状态协议中路由流量开销的方法。这是通过引入一些机制实现的,这些机制使得 LSA 始发间隔 (LSA origination interval) 能够增加一个数量级。

    还有一种链路状态算法被提议用作 ISO IS-IS 路由协议。该协议在 [Ref2] 中描述。该协议包括在广播网络运行时减少数据和路由流量的方法。这是通过为每个广播网络选举一个 Designated Router 来实现的,该 Designated Router 随后为网络始发 LSA。

    IETF 的 OSPF 工作组在开发 OSPF 协议的过程中扩展了这项工作。Designated Router 概念得到了极大增强,以进一步减少所需的路由流量。多播能力被用于进一步减少路由带宽。开发了一种区域路由方案 (area routing scheme),实现了信息隐藏/保护/减少。最后,这些算法被调整以在 TCP/IP internet 中高效运行。

    1.4. 本文档的组织结构 (Organization of this document)

    本规范的前三节给出协议能力与功能的总体概述。第 4–16 节详细解释协议的机制。报文格式、协议常量以及配置项在附录中指定。

    正文中遇到的如 HelloInterval 之类的标签指的是协议常量。它们可能是、也可能不是可配置的。体系结构常量 (Architectural constants) 在 Appendix B 中汇总。可配置常量 (Configurable constants) 在 Appendix C 中汇总。

    协议的详细规范以数据结构 (data structures) 的形式呈现。这样做是为了使说明更精确。协议的实现必须支持所描述的功能,但不必使用本备忘录中出现的精确数据结构。

    1.5. 致谢 (Acknowledgments)

    作者要感谢 Ran Atkinson、Fred Baker、Jeffrey Burgan、Rob Coltun、Dino Farinacci、Vince Fuller、Phanindra Jujjavarapu、Milo Medin、Tom Pusateri、Kannan Varadhan、Zhaohui Zhang 以及 OSPF 工作组的其余成员,感谢他们为这个项目提供的想法和支持。

    OSPF 的 Point-to-MultiPoint 接口基于 Fred Baker 所做的工作。

    OSPF 的密码学认证 (Cryptographic Authentication) 选项由 Fred Baker 和 Ran Atkinson 开发。