3. 将 AS 划分为区域 (Splitting the AS into Areas)
-
将 AS 划分为区域 (Splitting the AS into Areas)
OSPF 允许将连续网络 (contiguous networks) 和主机的集合分组在一起。这样一个组,连同拥有到所包含任一网络接口的路由器,称为一个区域 (area)。每个区域运行基本链路状态路由算法的独立副本。这意味着,如前一节所解释的,每个区域有它自己的链路状态数据库和相应的图。
一个区域的拓扑从区域外部是不可见的。反之,给定区域内部的路由器对区域外部详细的拓扑一无所知。这种知识的隔离 (isolation of knowledge) 使协议能够实现路由流量相比将整个 Autonomous System 视为单一链路状态域的显著减少。
随着区域的引入,所有 AS 中的路由器拥有完全相同的链路状态数据库这一说法不再成立。一台路由器实际上为它所连接的每个区域各维护一个独立的链路状态数据库。(连接到多个区域的路由器称为区域边界路由器,area border routers)。属于同一区域的两台路由器,对于该区域,拥有完全相同的区域链路状态数据库。
Autonomous System 中的路由发生在两个层面上,取决于报文 (packet) 的源和目的地是驻留在同一区域(使用区域内路由,intra-area routing)还是不同区域(使用区域间路由,inter-area routing)。在区域内路由中,报文仅基于区域内获得的信息路由;不能使用该区域之外获得的任何路由信息。这保护了区域内路由免受坏路由信息的注入。我们在 3.2 节讨论区域间路由。
3.1. Autonomous System 的主干 (The backbone of the Autonomous System)
OSPF 主干 (backbone) 是特殊的 OSPF 区域 0(通常写作 Area 0.0.0.0,因为 OSPF 区域 ID 通常格式化为 IP 地址)。OSPF 主干总是包含所有区域边界路由器。主干负责在非主干区域之间分发路由信息。主干必须是连续的 (contiguous)。然而,它不必是物理连续的;主干连通性可以通过配置虚链路 (virtual links) 来建立/维护。
虚链路可以配置在任意两台拥有到一个公共非主干区域接口的骨干路由器之间。虚链路属于主干。协议将用虚链路连接的两台路由器视为由一条无编号 (unnumbered) 点到点主干网络连接。在主干的图上,这样两台路由器由弧连接,弧的代价是这两台路由器之间的区域内距离 (intra-area distances)。沿着虚链路流动的路由协议流量仅使用区域内路由。3.2. 区域间路由 (Inter-area routing)
当在两个非主干区域之间路由报文时,使用主干。报文将经过的路径可以拆分为三段连续的部分:从源到一个区域边界路由器的区域内路径、源区域和目的区域之间的主干路径,然后是到目的地的另一条区域内路径。该算法找出具有最小代价的这样一组路径。
换一个角度看,区域间路由可以描绘为在 Autonomous System 上强制采用星形 (star) 配置,以主干为中心 (hub),每个非主干区域为辐条 (spokes)。
主干的拓扑决定了区域间使用的主干路径。主干的拓扑可以通过添加虚链路来增强。这使系统管理员对区域间流量所采取的路由有一些控制。
当报文离开源区域时,所使用的正确区域边界路由器的选择方式,与选择通告外部路由的路由器完全相同。一个区域中的每个区域边界路由器为该区域汇总其到区域外所有网络的代价。在为该区域计算出 SPF 树之后,通过检查区域边界路由器的汇总 (summaries) 来计算到所有区域间目的地的路由。3.3. 路由器的分类 (Classification of routers)
在区域引入之前,具有专门功能的唯一 OSPF 路由器是那些通告外部路由信息的路由器,例如图 2 中的路由器 RT5。当 AS 被划分为 OSPF 区域时,路由器进一步按照功能划分为以下四个相互重叠的类别:
内部路由器 (Internal routers)
所有直接相连网络都属于同一区域的路由器。这些路由器运行基本路由算法的单一副本。
区域边界路由器 (Area border routers)
连接到多个区域的路由器。区域边界路由器运行基本算法的多个副本,每个所连区域一个副本。区域边界路由器将其所连区域的拓扑信息浓缩 (condense),以便分发到主干。主干进而将该信息分发到其他区域。
主干路由器 (Backbone routers)
拥有到主干区域接口的路由器。这包括所有连接到多于一个区域的路由器(即区域边界路由器)。然而,主干路由器不必是区域边界路由器。支持所有接口都连接到主干区域的路由器。
AS 边界路由器 (AS boundary routers)
与属于其他 Autonomous System 的路由器交换路由信息的路由器。这样的路由器在整个 Autonomous System 内通告 AS 外部路由信息 (AS external routing information)。到每个 AS 边界路由器的路径被 AS 中的每个路由器所知。这种分类完全独立于前面的分类:AS 边界路由器可以是内部路由器或区域边界路由器,并且可以参与也可以不参与主干。3.4. 一个区域配置示例 (A sample area configuration)
图 6 显示了一个区域配置示例。第一个区域由网络 N1-N4,以及它们所附的路由器 RT1-RT4 组成。第二个区域由网络 N6-N8,以及它们所附的路由器 RT7、RT8、RT10 和 RT11 组成。第三个区域由网络 N9-N11 和主机 H1,以及它们所附的路由器 RT9、RT11 和 RT12 组成。第三个区域已被配置为:当向区域外通告时,网络 N9-N11 和主机 H1 都将分组为单一路由(详见 3.5 节)。 在图 6 中,路由器 RT1、RT2、RT5、RT6、RT8、RT9 和 RT12 是内部路由器。路由器 RT3、RT4、RT7、RT10 和 RT11 是区域边界路由器。最后,同前,路由器 RT5 和 RT7 是 AS 边界路由器。 图 7 显示了区域 1 生成的链路状态数据库。该图完整地描述了该区域的区域内路由。它还显示了两个内部路由器 RT1 和 RT2 对 internet 的完整视图。区域边界路由器 RT3 和 RT4 的工作是,向区域 1 内通告到该区域外所有目的地的距离。这些在图 7 中以虚线末梢路由 (dashed stub routes) 表示。此外,RT3 和 RT4 必须向区域 1 内通告 AS 边界路由器 RT5 和 RT7 的位置。最后,来自 RT5 和 RT7 的 AS-external-LSA 被泛洪到整个 AS,特别是泛洪到区域 1。这些 LSA 被包含在区域 1 的数据库中,并产生到网络 N12-N15 的路由。 路由器 RT3 和 RT4 还必须将区域 1 的拓扑汇总,以便分发到主干。它们的主干 LSA 显示在表 4 中。这些汇总显示了区域 1 中包含哪些网络(即网络 N1-N4),以及分别从路由器 RT3 和 RT4 到这些网络的距离。 ........................... . + . . | 3+---+ . N12 N14 . N1|--|RT1|\ 1 . \ N13 / . | +---+ \ . 8\ |8/8 . + \ ____ . \|/ . / \ 1+---+8 8+---+6 . * N3 *---|RT4|------|RT5|--------+ . \____/ +---+ +---+ | . + / \ . |7 | . | 3+---+ / \ . | | . N2|--|RT2|/1 1\ . |6 | . | +---+ +---+8 6+---+ | . + |RT3|------|RT6| | . +---+ +---+ | . 2/ . Ia|7 | . / . | | . +---------+ . | | .Area 1 N4 . | | ........................... | | .......................... | | . N11 . | | . +---------+ . | | . | . | | N12 . |3 . Ib|5 |6 2/ . +---+ . +----+ +---+/ . |RT9| . .........|RT10|.....|RT7|---N15. . +---+ . . +----+ +---+ 9 . . |1 . . + /3 1\ |1 . . _|__ . . | / \ __|_ . . / \ 1+----+2 |/ \ / \ . . * N9 *------|RT11|----| * N6 * . . \____/ +----+ | \____/ . . | . . | | . . |1 . . + |1 . . +--+ 10+----+ . . N8 +---+ . . |H1|-----|RT12| . . |RT8| . . +--+SLIP +----+ . . +---+ . . |2 . . |4 . . | . . | . . +---------+ . . +--------+ . . N10 . . N7 . . . .Area 2 . .Area 3 . ................................ .......................... Figure 6: A sample OSPF area configuration 主干的链路状态数据库如图 8 所示。图中描绘的路由器集合是主干路由器。路由器 RT11 是主干路由器,因为它属于两个区域。为了使主干连通,已在路由器 R10 和 R11 之间配置了一条虚链路。 区域边界路由器 RT3、RT4、RT7、RT10 和 RT11 将其所连非主干区域的路由信息浓缩,以便经由主干分发;这些就是图 8 中出现的虚线末梢。记住,第三个区域已被配置为将网络 N9-N11 和主机 H1 浓缩为单一路由。这在图 8 中产生了网络 N9-N11 和主机 H1 的一条单一虚线。路由器 RT5 和 RT7 是 AS 边界路由器;它们外部派生的信息也作为末梢出现在图 8 的图上。 Network RT3 adv. RT4 adv. _____________________________ N1 4 4 N2 4 4 N3 1 1 N4 2 3 Table 4: Networks advertised to the backbone by Routers RT3 and RT4. **FROM** |RT|RT|RT|RT|RT|RT| |1 |2 |3 |4 |5 |7 |N3| ----- ------------------- RT1| | | | | | |0 | RT2| | | | | | |0 | RT3| | | | | | |0 | * RT4| | | | | | |0 | * RT5| | |14|8 | | | | T RT7| | |20|14| | | | O N1|3 | | | | | | | * N2| |3 | | | | | | * N3|1 |1 |1 |1 | | | | N4| | |2 | | | | | Ia,Ib| | |20|27| | | | N6| | |16|15| | | | N7| | |20|19| | | | N8| | |18|18| | | | N9-N11,H1| | |29|36| | | | N12| | | | |8 |2 | | N13| | | | |8 | | | N14| | | | |8 | | | N15| | | | | |9 | | Figure 7: Area 1's Database. Networks and routers are represented by vertices. An edge of cost X connects Vertex A to Vertex B iff the intersection of Column A and Row B is marked with an X. **FROM** |RT|RT|RT|RT|RT|RT|RT |3 |4 |5 |6 |7 |10|11| ------------------------ RT3| | | |6 | | | | RT4| | |8 | | | | | RT5| |8 | |6 |6 | | | RT6|8 | |7 | | |5 | | RT7| | |6 | | | | | * RT10| | | |7 | | |2 | * RT11| | | | | |3 | | T N1|4 |4 | | | | | | O N2|4 |4 | | | | | | * N3|1 |1 | | | | | | * N4|2 |3 | | | | | | Ia| | | | | |5 | | Ib| | | |7 | | | | N6| | | | |1 |1 |3 | N7| | | | |5 |5 |7 | N8| | | | |4 |3 |2 | N9-N11,H1| | | | | | |11| N12| | |8 | |2 | | | N13| | |8 | | | | | N14| | |8 | | | | | N15| | | | |9 | | | Figure 8: The backbone's database. Networks and routers are represented by vertices. An edge of cost X connects Vertex A to Vertex B iff the intersection of Column A and Row B is marked with an X. 主干使得区域边界路由器之间能够交换汇总信息。每个区域边界路由器都能听到来自所有其他区域边界路由器的区域汇总。然后它通过对收集的 LSA 进行检查,并加上到每个通告路由器的主干距离,形成到其区域外所有网络的距离图景。 再次以路由器 RT3 和 RT4 为例,过程如下:它们首先计算主干的 SPF 树。这给出到所有其他区域边界路由器的距离。同时记录到属于主干的网络(Ia 和 Ib)和 AS 边界路由器(RT5 和 RT7)的距离。该计算显示在表 5 中。 接下来,通过查看这些区域边界路由器的区域汇总,RT3 和 RT4 可以确定到其区域外所有网络的距离。然后这些距离由 RT3 和 RT4 在区域内向该区域通告。路由器 RT3 和 RT4 将通告进区域 1 的通告显示在表 6 中。注意表 6 假设已为骨干配置了一个区域范围 (area range),将 Ia 和 Ib 分组为单一 LSA。 由路由器 RT3 和 RT4 导入区域 1 的信息使一台内部路由器(如 RT1)能够智能地选择区域边界路由器。路由器 RT1 将对发往网络 N6 的流量使用 RT4,对发往网络 N10 的流量使用 RT3,并且会对发往网络 N8 的流量在两者之间进行负载分担 (load share)。 路由器 RT1 也可以以这种方式确定到 AS 边界路由器 RT5 和 RT7 的最短路径。然后,通过查看 RT5 和 RT7 的 AS-external-LSA,路由器 RT1 可以在发送到另一个 Autonomous System 中的目的地(网络 N12-N15 之一)时,在 RT5 或 RT7 之间做选择。 注意,路由器 RT6 和 RT10 之间的链路故障将导致主干断开连接。在路由器 RT7 和 RT10 之间配置一条虚链路将给主干提供更多连通性,并对这类故障有更强的抵抗力。3.5. IP 子网划分支持 (IP subnetting support)
OSPF 给每条通告的路由附加上一个 IP 地址掩码 (IP address mask)。该掩码指示由特定路由描述的地址范围。例如,目的 128.185.0.0、掩码 0xffff0000 的 summary-LSA 实际描述的是到目的地集合 128.185.0.0 - 128.185.255.255 的单一路由。类似地,主机路由总是以掩码 0xffffffff 通告,表示仅存在单一目的地。
给每条通告的目的地加上掩码,实现了通常所谓的变长子网划分 (variable-length subnetting)。这意味着单一的 IP A 类、B 类或 C 类网络号可以被拆分为许多各种大小的子网。例如,网络 128.185.0.0 可以被拆分为 62 个可变大小的子网:15 个大小为 4K 的子网、15 个大小为 256 的子网,以及 32 个大小为 8 的子网。表 7 显示了生成的一些网络地址及其掩码。
Network address IP address mask Subnet size
_______________________________________________
128.185.16.0 0xfffff000 4K
128.185.1.0 0xffffff00 256
128.185.0.8 0xfffffff8 8
Table 7: Some sample subnet sizes.
将一个 A、B、C 类网络划分为可变大小子网有许多可能的方式。这样做的精确过程超出了本规范的范围。但是本规范确立了以下准则:当一个 IP 报文被转发时,它总是被转发到与该报文目的地最佳匹配的 (best match) 网络。这里最佳匹配等同于最长或最具体的匹配 (longest or most specific match)。例如,目的为 0.0.0.0、掩码 0x00000000 的默认路由总是匹配每个 IP 目的地。然而它总是比任何其他匹配更不具体 (less specific)。子网掩码必须被分配得使任何 IP 目的地的最佳匹配都是明确的。
给每条路由附加上地址掩码也支持 IP 超网 (supernetting)。例如,一个单一物理网段可以被分配 [address,mask] 对 [192.9.4.0,0xfffffc00]。该网段于是成为单一 IP 网络,包含从四个连续的 C 类网络号 192.9.4.0 到 192.9.7.0 的地址。随着 CIDR 的出现,这样的编址正变得普遍(参见 [Ref10])。
为了在区域边界获得更好的聚合 (aggregation),可以使用区域地址范围 (area address ranges)(详见 C.2 节)。每个地址范围定义为一个 [address,mask] 对。许多独立的网络于是一个可以被包含在单一地址范围中,正如子网化网络由许多独立子网组成一样。区域边界路由器于是通过为每个地址范围通告单一路由来汇总区域内容(以便分发到主干)。该路由的代价是指定范围内任何网络代价的最大值。
例如,一个 IP 子网化网络可能被配置为单一 OSPF 区域。在这种情况下,可以配置单一地址范围:一个 A、B 或 C 类网络号及其自然 IP 掩码。在区域内部,可以定义任意数量的变长子网。然而,在区域外部,将分发整个子网化网络的单一路由,甚至隐藏了网络被子网化这一事实。该路由的代价是到组成子网的代价集合的最大值。3.6. 支持末梢区域 (Supporting stub areas)
在某些 Autonomous System 中,链路状态数据库的绝大部分可能由 AS-external-LSA 组成。OSPF 的 AS-external-LSA 通常在整个 AS 内泛洪。然而,OSPF 允许将某些区域配置为 "stub areas"(末梢区域)。AS-external-LSA 不被泛洪进/穿过末梢区域;这些区域中到 AS 外部目的地的路由仅基于(每区域)默认路由 (default)。这减少了末梢区域链接状态数据库的大小,从而减少了其内存需求,有利于末梢区域内部路由器。
为了利用 OSPF 末梢区域支持,必须在末梢区域中使用默认路由。这按如下方式完成。末梢区域的一个或多个区域边界路由器必须通过 summary-LSA 向该末梢区域通告一条默认路由 (default route)。这些汇总默认路由被泛洪到整个末梢区域,但不进一步(正因如此这些默认仅属于特定的末梢区域)。这些汇总默认路由将用于任何不能通过区域内或区域间路径显式到达的目的地(即 AS 外部目的地)。
当一个区域只有单一出口点时,或者当出口点的选择不必基于每个外部目的地做出时,可以将该区域配置为末梢区域。例如,图 6 中的区域 3 可以配置为末梢区域,因为所有外部流量都必须经过其单一区域边界路由器 RT11。如果区域 3 被配置为末梢区域,路由器 RT11 将通告一条默认路由以便在区域 3 内部分发(在一个 summary-LSA 中),而不是将网络 N12-N15 的 AS-external-LSA 泛洪进/穿过该区域。
OSPF 协议确保属于一个区域的所有路由器就该区域是否已被配置为末梢区域达成一致。这保证了在 AS-external-LSA 的泛洪中不会出现混淆。
末梢区域的使用有几点限制。虚链路不能被配置穿过末梢区域。此外,AS 边界路由器不能被放置在末梢区域的内部。3.7. 区域的分割 (Partitions of areas)
OSPF 不主动尝试修复区域分割 (area partitions)。当一个区域被分割时,每个部分就简单地成为独立的区域。主干随后在新的区域之间执行路由。分割之前可通过区域内路由到达的某些目的地,现在将需要区域间路由。
然而,为了在分割后维持完整路由,一个地址范围不能被拆分到区域分割的多个部分中。此外,主干本身不能分割。如果分割了,Autonomous System 的某些部分将变得不可达。主干分割可以通过配置虚链路来修复(参见第 15 节)。
思考区域分割的另一种方式是查看第 2 节引入的 Autonomous System 图。区域 ID 可以被视为图的边的颜色。[1] 图的每条边连接到网络,或者它自身就是一条点到点网络。无论是哪种情况,边都被染上该网络的区域 ID 的颜色。
一组具有相同颜色、并通过顶点互相连接的边表示一个区域。如果 Autonomous System 的拓扑是完整的,该图将有几个颜色区域,每种颜色是一个不同的区域 ID。
当 AS 拓扑变化时,其中一个区域可能被分割。AS 的图于是将有多个相同颜色(区域 ID)的区域。只要这些相同颜色的区域由单一主干区域连接,Autonomous System 中的路由将继续运作。