4. 功能概述 (Functional Summary)
-
功能概述 (Functional Summary)
OSPF 的基本路由算法在每个区域都运行一个独立的副本。拥有到多个区域接口的路由器运行该算法的多个副本。以下简要概述该路由算法。
当一台路由器启动时,它首先初始化路由协议数据结构。然后路由器等待来自低级协议 (lower-level protocols) 的、表明其接口已可用的指示 (indications)。
路由器随后使用 OSPF 的 Hello 协议 (Hello Protocol) 来获取邻居。路由器向邻居发送 Hello 报文,并反过来接收它们的 Hello 报文。在广播 (broadcast) 和点到点 (point-to-point) 网络上,路由器通过将其 Hello 报文发送到多播 (multicast) 地址 AllSPFRouters 来动态发现其相邻路由器。在非广播 (non-broadcast) 网络上,可能需要一些配置信息以发现邻居。在广播和 NBMA 网络上,Hello 协议还为网络选举一个 Designated Router (指定路由器)。
路由器将尝试与其部分新获取的邻居建立邻接 (adjacencies)。链路状态数据库在成对的相邻路由器之间同步。在广播和 NBMA 网络上,由 Designated Router 决定哪些路由器应成为邻接。
邻接控制路由信息的分发。路由更新仅通过邻接发送和接收。
路由器周期性地通告其状态,这也称为链路状态 (link state)。当路由器状态发生变化时也会通告链路状态。路由器的邻接反映在其 LSA 的内容中。邻接与链路状态之间的这种关系使协议能够及时检测死路由器 (dead routers)。
LSA 被泛洪 (flooded) 到整个区域。泛洪算法是可靠的,确保区域中的所有路由器拥有完全相同的链路状态数据库。该数据库由属于该区域的每台路由器所始发的 LSA 的集合组成。每台路由器从该数据库计算一棵以自身为根的最短路径树 (shortest-path tree)。这棵最短路径树进而产生协议的路由表。
4.1. 区域内路由 (Intra-area routing)
上一节描述了协议在单一区域内的运行。对于区域内路由 (intra-area routing),没有其他路由信息是相关的。为了能够路由到区域外的目的地,区域边界路由器 (area border routers) 将额外的路由信息注入该区域。这一附加信息是对 Autonomous System 其余部分拓扑的提炼 (distillation)。
这一提炼如下完成:根据定义,每个区域边界路由器都连接到主干 (backbone)。每个区域边界路由器将其所连非主干区域的拓扑汇总,以便在主干上传输,进而传送到所有其他区域边界路由器。于是区域边界路由器拥有关于主干以及来自其他每个区域边界路由器的区域汇总的完整拓扑信息。从该信息出发,路由器计算出到所有区域间 (inter-area) 目的地的路径。路由器随后将这些路径通告进其所连区域。这使得该区域的内部路由器在转发到区域间目的地的流量时,能够选择最佳的出口路由器。4.2. AS 外部路由 (AS external routes)
拥有关于其他 Autonomous System 信息的路由器可以将该信息泛洪到整个 AS。该外部路由信息逐字 (verbatim) 分发给每个参与的路由器。有一个例外:外部路由信息不被泛洪进 "stub"(末梢)区域(参见 3.6 节)。
为了利用外部路由信息,到所有通告外部信息的路由器的路径必须在整个 AS 内可知(末梢区域除外)。因此,这些 AS 边界路由器 (AS boundary routers) 的位置由(非末梢)区域边界路由器汇总。4.3. 路由协议报文 (Routing protocol packets)
OSPF 协议直接在 IP 上运行,使用 IP 协议号 89。OSPF 不提供任何显式的分片/重组 (fragmentation/reassembly) 支持。当需要分片时,使用 IP 的分片/重组。OSPF 协议报文被设计成,大型协议报文通常可以被拆分为几个较小的协议报文。推荐这种做法;应尽可能避免 IP 分片。
路由协议报文应始终以 IP TOS 字段置为 0 发送。如有可能,路由协议报文在发送和接收时都应优先于常规 IP 数据流量。作为实现此目标的辅助手段,OSPF 协议报文的 IP 优先级 (precedence) 字段应设为 Internetwork Control 值(参见 [Ref5])。
所有 OSPF 协议报文共享一个公共协议头部,该头部在附录 A 中描述。OSPF 的报文类型在表 8 中列出。其格式也在附录 A 中描述。
Type 报文名称 协议功能
__________________________________________________________
1 Hello 发现/维护邻居
2 Database Description 汇总数据库内容
3 Link State Request 数据库下载
4 Link State Update 数据库更新
5 Link State Ack 泛洪确认
Table 8: OSPF 报文类型 (OSPF packet types).
OSPF 的 Hello 协议使用 Hello 报文来发现和维护邻居关系。Database Description 和 Link State Request 报文用于邻接的形成。OSPF 的可靠更新机制由 Link State Update 和 Link State Acknowledgment 报文实现。
每个 Link State Update 报文将其一组新的链路状态通告 (LSAs) 从其始发点再向外传送一跳。单个 Link State Update 报文可以包含多台路由器的 LSA。每个 LSA 都标有所始发路由器的 ID 及其链路状态内容的校验和 (checksum)。每个 LSA 还有一个类型字段;OSPF LSA 的不同类型在表 9 中列出。
OSPF 路由报文(Hello 报文除外)仅通过邻接发送。这意味着所有 OSPF 协议报文都只经过单一 IP 跳 (hop),那些通过虚邻接 (virtual adjacencies) 发送的报文除外。OSPF 协议报文的 IP 源地址是路由器邻接的一端,IP 目的地址是邻接的另一端或一个 IP 多播地址。4.4. 基本实现要求 (Basic implementation requirements)
OSPF 的实现需要以下系统支持: Timers (定时器) 需要两种定时器。第一种称为 "single shot timers"(单次定时器),触发一次并导致一个协议事件被处理。第二种称为 "interval timers"(间隔定时器),以连续间隔触发。它们用于以规律间隔发送报文。一个很好的例子是 Hello 报文的规律广播。两种定时器的粒度都是一秒。 间隔定时器应被实现为能避免漂移 (drift)。在某些路由器实现中,报文处理会影响定时器的执行。当多台路由器连接到同一网络、都在进行广播时,这可能导致路由报文的同步(应当避免)。如果定时器无法实现为避免漂移,应在每次触发时给间隔定时器加上/减去一个小的随机量。 LS LSA LSA 描述 type 名称 ________________________________________________________ 1 Router-LSAs 由所有路由器始发。 该 LSA 描述了路由器到 一个区域的接口的聚合状态。 仅泛洪遍及单一区域。 ________________________________________________________ 2 Network-LSAs 由 Designated Router 为广播 和 NBMA 网络始发。该 LSA 包含连接到该网络的 路由器列表。仅泛洪遍及 单一区域。 ________________________________________________________ 3,4 Summary-LSAs 由区域边界路由器始发,并 泛洪遍及该 LSA 所关联的 区域。每个 summary-LSA 描述一条到区域外、但仍在 AS 内部的目的地的路由 (即区域间路由)。 Type 3 summary-LSA 描述到 网络的路由。Type 4 summary-LSA 描述到 AS 边界路由器的路由。 ________________________________________________________ 5 AS-external-LSAs 由 AS 边界路由器始发,并 泛洪遍及整个 AS。每个 AS-external-LSA 描述一条 到另一个 Autonomous System 中目的地的路由。 AS 的默认路由也可以由 AS-external-LSA 描述。 Table 9: OSPF 链路状态通告 (LSA). IP multicast (IP 多播) OSPF 的某些报文采用 IP 多播数据报的形式。需要支持接收和发送 IP 多播数据报,以及相应的低级协议支持。OSPF 使用的 IP 多播数据报从不会传输超过一跳。因此,不需要转发 IP 多播数据报的能力。有关 IP 多播的信息,请参见 [Ref7]。 Variable-length subnet support (可变长子网支持) 路由器的 IP 协议支持必须包括将单一 IP A、B 或 C 类网络号划分为许多各种大小子网的能力。这通常称为可变长子网划分 (variable-length subnetting);详见 3.5 节。 IP supernetting support (IP 超网支持) 路由器的 IP 协议支持必须包括将连续的 IP A、B、C 类网络集合聚合为称为超网 (supernets) 的更大数量的能力。超网化 (Supernetting) 已被提议作为改善全球 Internet 中 IP 路由扩展性的一种方式。有关 IP 超网化的更多信息,请参见 [Ref10]。 Lower-level protocol support (低级协议支持) 这里所指的低级协议是网络访问协议 (network access protocols),例如以太网数据链路层 (ethernet data link layer)。当网络接口上下线时,必须将这些协议向 OSPF 传递指示。例如,在以太网上,知道以太网收发器电缆何时被拔出是很有价值的。 Non-broadcast lower-level protocol support (非广播低级协议支持) 在非广播网络上,当尝试向一台死路由器或不存在的路由器发送报文时,可以通过提供一个指示来辅助 OSPF 的 Hello 协议。例如,在 X.25 PDN 上,一台死的相邻路由器可由接收一个带有适当原因码和诊断码的 X.25 clear 指示,该信息将被传递给 OSPF。 List manipulation primitives (列表操作原语) OSPF 的许多功能以其对 LSA 列表的操作来描述。例如,在被确认之前将重传给相邻路由器的 LSA 集合被描述为一个列表。任何特定的 LSA 可能出现在许多这样的列表上。一个 OSPF 实现需要能够操作这些列表,根据需要添加和删除组成 LSA。 Tasking support (任务支持) 本规范中描述的某些过程会调用其他过程。有时,这些其他过程应当内联 (in-line) 执行,即在当前过程完成之前执行。文本中通过 "execute a procedure"(执行一个过程)的指令来指示这一点。其他时候,其他过程仅应在当前过程完成后执行。这通过 "schedule a task"(调度一个任务)的指令来指示。4.5. 可选 OSPF 能力 (Optional OSPF capabilities)
OSPF 协议定义了几个可选能力 (optional capabilities)。一台路由器在其 OSPF Hello 报文、Database Description 报文以及其 LSA 中指示它支持的可选能力。这使得支持混合可选能力的路由器能够在单一 Autonomous System 中共存。
某些能力必须被连接到特定区域的所有路由器支持。在这种情况下,路由器不会接受邻居的 Hello 报文,除非所报告的能力相匹配(即,能力不匹配会阻止邻居关系的形成)。这方面的一个例子是 ExternalRoutingCapability(见下)。
其他能力可以在数据库交换 (Database Exchange) 过程中协商。这是通过在 Database Description 报文中指定可选能力来实现的。与邻居的这种能力不匹配将导致两个邻居之间只交换链路状态数据库的一个子集。
路由表构建过程也会受可选能力存在/缺失的影响。例如,由于可选能力在 LSA 中报告,在构建最短路径树时可以避开不支持某些功能的路由器。
本备忘录中定义的 OSPF 可选能力列在下面。更多信息请参见 A.2 节。
ExternalRoutingCapability (外部路由能力)
整个 OSPF 区域可以被配置为 "stubs"(末梢,参见 3.6 节)。AS-external-LSA 不会被泛洪进末梢区域。该能力由 OSPF Options 字段中的 E 位 (E-bit) 表示(参见 A.2 节)。为了确保末梢区域配置的一致性,所有连接到这样一个区域的路由器在其 Hello 报文中必须清除 E 位(参见 9.5 节和 10.5 节)。