3. 将 AS 划分为区域 (Splitting the AS into Areas)
-
将 AS 划分为区域 (Splitting the AS into Areas)
OSPF 允许将连续网络和主机的集合分组在一起. 这样的组, 连同其接口连接到任一所含网络的路由器, 称为一个区域 (area). 每个区域都运行一份独立的基本链路状态路由算法副本. 这意味着每个区域都有自己的链路状态数据库及相应图, 如上一节所述.
一个区域的拓扑从区域外部不可见. 反过来, 某个区域内部的路由器不了解该区域外部的详细拓扑. 与把整个 Autonomous System 视为单个链路状态域相比, 这种知识隔离使协议能够显著减少路由流量.
引入区域后, AS 中所有路由器都拥有相同链路状态数据库这一点不再成立. 路由器实际上为其连接的每个区域都有一个单独的链路状态数据库. 连接到多个区域的路由器称为 area border routers. 属于同一区域的两台路由器, 对该区域而言, 拥有相同的区域链路状态数据库.
Autonomous System 中的路由分两个层次进行, 取决于报文的源和目的地是否位于同一区域 (使用 intra-area routing) 或不同区域 (使用 inter-area routing). 在 intra-area routing 中, 报文只根据该区域内部获得的信息进行路由; 不能使用从区域外部获得的路由信息. 这保护区域内路由免受错误路由信息注入影响. Section 3.2 讨论 inter-area routing.
3.1. Autonomous System 的 backbone
OSPF backbone 是特殊的 OSPF Area 0 (通常写作 Area 0.0.0.0, 因为 OSPF Area ID 通常格式化为 IP 地址). OSPF backbone 始终包含所有 area border routers. backbone 负责在非 backbone 区域之间分发路由信息. backbone 必须连续. 但是, 它不需要物理连续; 可通过配置虚链路来建立/维护 backbone 连通性.
虚链路可以配置在任意两个 backbone routers 之间, 只要它们都有到一个公共非 backbone 区域的接口. 虚链路属于 backbone. 协议把由虚链路连接的两台路由器视为通过未编号点到点 backbone 网络连接. 在 backbone 图上, 这两台路由器由弧连接, 弧的代价是两台路由器之间的 intra-area distances. 沿虚链路流动的路由协议流量只使用 intra-area routing.3.2. 跨区域路由 (Inter-area routing)
在两个非 backbone 区域之间路由报文时使用 backbone. 报文将经过的路径可分为三个连续部分: 从源到 area border router 的 intra-area path, 源区域和目的区域之间的 backbone path, 然后是到目的地的另一条 intra-area path. 算法找到这类路径中代价最小的集合.
换一种看法, inter-area routing 可被想象为在 Autonomous System 上强制形成星形配置, backbone 是中心, 每个非 backbone 区域是辐条.
backbone 拓扑决定区域之间使用的 backbone paths. 可通过添加虚链路增强 backbone 拓扑. 这让系统管理员能对跨区域流量采用的路由进行一定控制.
当报文离开源区域时, 要使用的正确 area border router 的选择方式, 与选择通告外部路由的路由器完全相同. 一个区域中的每台 area border router 都向该区域汇总其到所有区域外网络的代价. 计算该区域的 SPF tree 后, 通过检查 area border routers 的汇总信息, 计算到所有 inter-area destinations 的路由.3.3. 路由器分类 (Classification of routers)
在引入区域之前, 唯一具有专门功能的 OSPF 路由器是通告外部路由信息的路由器, 例如 Figure 2 中的 Router RT5. 当 AS 被划分为 OSPF 区域后, 路由器按功能进一步分为以下四个可重叠类别:
Internal routers
所有直连网络都属于同一区域的路由器. 这些路由器运行基本路由算法的一份副本.
Area border routers
连接到多个区域的路由器. Area border routers 运行基本算法的多个副本, 每个连接区域一份. Area border routers 压缩其连接区域的拓扑信息, 用于分发到 backbone. backbone 继而将信息分发到其他区域.
Backbone routers
具有到 backbone area 接口的路由器. 这包括所有接口连接到多个区域的路由器, 即 area border routers. 但是 backbone routers 不一定必须是 area border routers. 支持所有接口都连接到 backbone area 的路由器.
AS boundary routers
与属于其他 Autonomous Systems 的路由器交换路由信息的路由器. 这样的路由器在整个 Autonomous System 中通告 AS external routing information. AS 中每台路由器都知道到每个 AS boundary router 的路径. 该分类完全独立于前面的分类: AS boundary routers 可以是 internal routers 或 area border routers, 也可以参与或不参与 backbone.3.4. 区域配置示例 (A sample area configuration)
Figure 6 显示一个区域配置示例. 第一个区域由 networks N1-N4 以及它们连接的 routers RT1-RT4 组成. 第二个区域由 networks N6-N8 以及它们连接的 routers RT7, RT8, RT10 和 RT11 组成. 第三个区域由 networks N9-N11 和 Host H1, 以及它们连接的 routers RT9, RT11 和 RT12 组成. 第三个区域已配置为在向区域外通告时将 networks N9-N11 和 Host H1 全部分组为单条路由 (更多细节见 Section 3.5).
在 Figure 6 中, Routers RT1, RT2, RT5, RT6, RT8, RT9 和 RT12 是 internal routers. Routers RT3, RT4, RT7, RT10 和 RT11 是 area border routers. 最后, 与之前一样, Routers RT5 和 RT7 是 AS boundary routers.
Figure 7 显示 Area 1 得到的链路状态数据库. 该图完整描述该区域的 intra-area routing. 它还显示两个 internal routers RT1 和 RT2 对 internet 的完整视图. area border routers RT3 和 RT4 的任务是向 Area 1 通告到所有区域外目的地的距离. 这些在 Figure 7 中以虚线 stub routes 表示. 此外, RT3 和 RT4 必须向 Area 1 通告 AS boundary routers RT5 和 RT7 的位置. 最后, 来自 RT5 和 RT7 的 AS-external-LSAs 会在整个 AS 中泛洪, 特别是在 Area 1 中泛洪. 这些 LSA 包含在 Area 1 的数据库中, 并产生到 Networks N12-N15 的路由.
Routers RT3 和 RT4 还必须为分发到 backbone 而汇总 Area 1 的拓扑. 它们的 backbone LSA 显示在 Table 4 中. 这些汇总显示 Area 1 中包含哪些网络, 即 Networks N1-N4, 以及从 routers 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
. | . Ib|5 |6 2/
. |3 . +----+ +---+/
. +---+ . .........|RT10|.....|RT7|---N15.
. |RT9| . . +----+ +---+ 9 .
. +---+ . . + /3 1\ |1 .
. |1 . . | / \ __|_ .
. _|__ . . |/ \ / \ .
. / \ 1+----+2 | * N6 * .
. * N9 *------|RT11|----| \____/ .
. \____/ +----+ | | .
. | . . | |1 .
. |1 . . + | .
. +--+ 10+----+ . . N8 +---+ .
. |H1|-----|RT12| . . |RT8| .
. +--+SLIP +----+ . . +---+ .
. |2 . . |4 .
. | . . | .
. +---------+ . . +--------+ .
. N10 . . N7 .
. . .Area 2 .
.Area 3 . ................................
..........................
Figure 6: OSPF 区域配置示例
Host H1 出现在 Figure 8 中. Routers RT5 和 RT7 是 AS boundary routers; 它们外部派生的信息也在 Figure 8 的图中作为 stub 出现.
Network RT3 adv. RT4 adv.
_____________________________
N1 4 4
N2 4 4
N3 1 1
N4 2 3
Table 4: Routers RT3 和 RT4 向 backbone 通告的网络.
**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 的数据库.
网络和路由器表示为顶点.
当 Column A 与 Row B 的交叉处标记为 X 时,
一条代价为 X 的边连接 Vertex A 到 Vertex B.
**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: backbone 的数据库.
网络和路由器表示为顶点.
当 Column A 与 Row B 的交叉处标记为 X 时,
一条代价为 X 的边连接 Vertex A 到 Vertex B.
backbone 允许 area border routers 之间交换汇总信息. 每台 area border router 都会听到来自所有其他 area border routers 的区域汇总. 然后它检查收集到的 LSA, 并加上到每台通告路由器的 backbone 距离, 从而形成到其区域外所有网络的距离视图.
仍以 Routers RT3 和 RT4 为例, 过程如下: 它们首先计算 backbone 的 SPF tree. 这给出到所有其他 area border routers 的距离. 还会记录属于 backbone 的网络 (Ia 和 Ib) 以及 AS boundary routers (RT5 和 RT7) 的距离. 该计算显示在 Table 5 中.
接下来, 通过查看这些 area border routers 的区域汇总, RT3 和 RT4 可以确定到其区域外所有网络的距离. 这些距离随后由 RT3 和 RT4 在区域内部通告. Router RT3 和 RT4 将通告到 Area 1 中的通告见 Table 6. 注意, Table 6 假定已经为 backbone 配置了一个 area range, 将 Ia 和 Ib 分组为单个 LSA.
Routers RT3 和 RT4 导入 Area 1 的信息, 使 RT1 等内部路由器能够智能选择 area border router. Router RT1 对发往 Network N6 的流量会使用 RT4, 对发往 Network N10 的流量会使用 RT3, 对发往 Network N8 的流量则会在两者之间分担负载.
dist from dist from
RT3 RT4
__________________________________
to RT3 * 21
to RT4 22 *
to RT7 20 14
to RT10 15 22
to RT11 18 25
__________________________________
to Ia 20 27
to Ib 15 22
__________________________________
to RT5 14 8
to RT7 20 14
Table 5: Routers RT3 和 RT4 计算出的 backbone 距离.
Destination RT3 adv. RT4 adv.
_________________________________
Ia,Ib 20 27
N6 16 15
N7 20 19
N8 18 18
N9-N11,H1 29 36
_________________________________
RT5 14 8
RT7 20 14
Table 6: Routers RT3 和 RT4 通告到 Area 1 的目的地.
Router RT1 也可以用这种方式确定到 AS boundary routers RT5 和 RT7 的最短路径. 然后, 通过查看 RT5 和 RT7 的 AS-external-LSAs, Router RT1 可以在发送到另一个 Autonomous System 中的目的地 (networks N12-N15 之一) 时, 在 RT5 或 RT7 之间作出选择.
注意, Routers RT6 和 RT10 之间线路失效会导致 backbone 断开. 在 Routers RT7 和 RT10 之间配置虚链路会为 backbone 提供更多连通性, 并增强其对此类故障的抵抗能力.3.5. IP 子网化支持 (IP subnetting support)
OSPF 为每条通告路由附加一个 IP 地址掩码. 掩码指示该特定路由所描述的地址范围. 例如, 目的地为 128.185.0.0、掩码为 0xffff0000 的 summary-LSA, 实际描述的是到目的地集合 128.185.0.0 - 128.185.255.255 的单条路由. 类似地, host routes 始终以掩码 0xffffffff 通告, 表示只有单个目的地.
为每个通告目的地包含掩码, 使通常称为 variable-length subnetting 的实现成为可能. 这意味着单个 IP class A, B 或 C 网络号可以被划分为许多不同大小的子网. 例如, 网络 128.185.0.0 可被划分为 62 个可变大小子网: 15 个大小为 4K 的子网, 15 个大小为 256 的子网, 以及 32 个大小为 8 的子网. Table 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: 一些示例子网大小.
将 class A, B 和 C 网络划分为可变大小子网有许多可能方式. 具体过程超出本规范范围. 不过, 本规范建立以下准则: 转发 IP 报文时, 始终转发到最匹配该报文目的地的网络. 这里 best match 与最长或最具体匹配同义. 例如, 目的地为 0.0.0.0、掩码为 0x00000000 的默认路由始终匹配每个 IP 目的地. 但它始终不如任何其他匹配具体. 必须分配子网掩码, 使任意 IP 目的地的最佳匹配都是明确的.
为每条路由附加地址掩码也支持 IP supernetting. 例如, 单个物理网段可以被分配 [address,mask] 对 [192.9.4.0,0xfffffc00]. 该网段随后将成为单个 IP 网络, 包含从四个连续 class C 网络号 192.9.4.0 到 192.9.7.0 的地址. 随着 CIDR 的出现, 这种寻址正变得普遍 (见 [Ref10]).
为了在区域边界获得更好的聚合, 可以使用 area address ranges (更多细节见 Section C.2). 每个地址范围定义为一个 [address,mask] 对. 许多独立网络随后可以包含在单个地址范围中, 正如一个子网化网络由许多独立子网组成一样. 然后 area border routers 通过为每个地址范围通告一条路由来汇总区域内容 (用于分发到 backbone). 该路由的代价是指定范围中任意网络的最大代价.
例如, 一个 IP 子网化网络可以配置为单个 OSPF 区域. 在这种情况下, 可以配置单个地址范围: 一个 class A, B 或 C 网络号及其自然 IP 掩码. 在区域内部, 可以定义任意数量的可变大小子网. 但是在区域外部, 会分发一条描述整个子网化网络的路由, 甚至隐藏该网络被子网化这一事实. 该路由的代价是到组成子网的代价集合中的最大值.3.6. 支持 stub areas
在某些 Autonomous Systems 中, 链路状态数据库的大部分可能由 AS-external-LSAs 组成. OSPF AS-external-LSA 通常会在整个 AS 中泛洪. 但是, OSPF 允许将某些区域配置为 "stub areas". AS-external-LSAs 不会被泛洪进入/遍及 stub areas; 在这些区域中到 AS 外部目的地的路由只基于按区域的默认路由. 这会减少 stub area 内部路由器的链路状态数据库大小, 因而减少内存需求.
为利用 OSPF stub area 支持, 必须在 stub area 中使用默认路由. 这是按如下方式完成的. stub area 的一个或多个 area border routers 必须通过 summary-LSAs 向 stub area 通告默认路由. 这些 summary defaults 会在整个 stub area 中泛洪, 但不会更远. 因此这些 defaults 只适用于特定 stub area. 这些 summary default routes 会用于任何不能通过 intra-area 或 inter-area path 明确到达的目的地, 即 AS external destinations.
当一个区域只有单个出口点, 或者无需按每个外部目的地选择出口点时, 可以将该区域配置为 stub. 例如, Figure 6 中的 Area 3 可以配置为 stub area, 因为所有外部流量都必须经过其单个 area border router RT11. 如果 Area 3 配置为 stub, Router RT11 将通告一条默认路由以在 Area 3 内部分发 (在 summary-LSA 中), 而不是把 Networks N12-N15 的 AS-external-LSAs 泛洪进入/遍及该区域.
OSPF 协议确保属于同一区域的所有路由器都就该区域是否配置为 stub 达成一致. 这保证在 AS-external-LSAs 泛洪时不会产生混乱.
使用 stub areas 有两个限制. 不能通过 stub areas 配置虚链路. 此外, AS boundary routers 不能放在 stub areas 内部.3.7. 区域分区 (Partitions of areas)
OSPF 不会主动尝试修复区域分区. 当一个区域被分区时, 每个组件会简单地成为一个独立区域. 然后 backbone 在这些新区域之间执行路由. 某些在分区前可通过 intra-area routing 到达的目的地, 现在将需要 inter-area routing.
但是, 为了在分区后保持完整路由, 一个地址范围不能跨区域分区的多个组件拆分. 此外, backbone 本身也不能分区. 如果 backbone 分区, Autonomous System 的某些部分将变得不可达. 可通过配置虚链路来修复 backbone 分区 (见 Section 15).
另一种理解区域分区的方式, 是查看 Section 2 中引入的 Autonomous System 图. Area IDs 可被视为图中边的颜色.[1] 图的每条边都连接到一个网络, 或者其自身就是点到点网络. 无论哪种情况, 边都用该网络的 Area ID 着色.
一组颜色相同且由顶点互连的边表示一个区域. 如果 Autonomous System 拓扑完整, 图中会有若干颜色区域, 每种颜色都是一个不同的 Area ID.
当 AS 拓扑变化时, 某个区域可能分区. AS 图随后会有多个相同颜色 (Area ID) 的区域. 只要这些相同颜色区域由单个 backbone 区域连接, Autonomous System 中的路由就会继续工作.