为什么所有区域都必须连接到 OSPF 中的区域 0 骨干网?
OSPF骨干网
为什么区域 0 是 OSPF 中的骨干区域?为什么所有其他区域都必须连接到它?
这在RFC 3509, Section 1.2 1 中有很好的解释:
1.2 动机
在 OSPF 域中,区域拓扑受到限制,因此必须有一个主干区域(区域 0)并且所有其他区域必须具有到主干的物理或虚拟连接。这种星形拓扑的原因是 OSPF 区域间路由使用距离矢量方法,并且严格的区域层次结构可以避免“计数到无穷大”问题。OSPF 通过实施水平分割机制来防止区域间路由循环,允许 ABR 仅将来自区域内路由的 Summary-LSA 注入骨干网,并限制 ABR 的 SPF 计算仅考虑骨干区域中的 Summary-LSA。链接状态数据库。
OSPF 通常被认为是一种链路状态协议。有些人怀念的是OSPF使用两种 链路状态协议和距离向量协议算法。
- 主干或非主干区域内的路由按照链路状态协议计算(参考Dijkstra 算法)。
- 当 OSPF 必须通过骨干网承载非骨干路由时,它使用一些距离矢量行为(即贝尔曼福特算法的一部分)将 Type3 LSA 度量传播到非骨干区域。
OSPF距离矢量行为的简单示例:
<-- Area 5 --><-- Area 0 --><-- Area 4 -->
R5-----------R1-----------R2------------R3---------------------R4
Cost 3 Cost 5 Cost 7 Cost 12
LSA--> LSA-->
Type3 LSA Type3 LSA
{From R1} {From R2}
R5 cost is 3 R5 cost is 8
考虑 R5 的 /32 环回路由会发生什么。
- R5 发送包含 /32 环回的 Type1 LSA
- R1(Area 5 ABR),连接到Area 0;它将 Type1 LSA 转换为 Type3 LSA,成本为 3。
- R2(区域 4 ABR)接收 R1 的 Type3 LSA(度量 3)并根据 R2 到 R1 的成本将度量更改为 R5 的环回。现在 R2 对 R5 的 Type3 LSA 的成本为 8。这就是我上面提到的距离矢量行为。
要求所有非骨干路由都经过骨干网是一种环路预防机制。
在 ABR 连接非骨干 OSPF 区域
如果 2 个区域没有通过区域 0(不连续)连接,OSPF 作为链路状态协议如何增加路由循环的可能性?
正如我们在上面看到的,OSPF 使用距离矢量行为通过区域 0 骨干网发送路由。距离矢量协议具有众所周知的限制,例如计数到无穷大问题。如果我们对其行为没有限制,OSPF 将容易受到同样的问题的影响。
1 RFC 3509 描述了 Cisco IOS 的 ABR 行为
区域 0 被选为骨干网,数字 0 或 0.0.0.0 只是一个数字。
因为 OSPF 是链路状态,所以 LSDB 在一个区域内必须相同。这是为了保证SPF计算的一致性,防止路由环路。
如果运行单区域 OSPF 可以使用任何区域,则不需要具有区域 0。
运行多区域 OSPF 时,必须使用 ABR。ABR 是在区域 0 和至少一个其他区域中具有邻接关系的路由器。
ABR 将类型 1 和类型 2 LSA 通告为类型 3 汇总 LSA 在其他区域。这不是前缀的总结,而是拓扑信息的总结。这实际上是距离向量行为。
因为其他区域没有关于彼此的完整信息,所以所有区域间流量必须通过区域 0。否则可能会因为没有完整的拓扑结构而出现路由循环。
由于这种设计,OSPF 不必在其他区域的链路上/下时运行完整的 SPF。这增加了可扩展性。
来自 John Moy 撰写的“OSPF:路由协议剖析”,他编写了大部分 OSPF 规范。
区域间路由信息的交换本质上是距离向量。使用距离向量,冗余路径的数量越多,收敛特性就越差。OSPF 要求所有区域直接连接到主干,因此它将拓扑限制为简单的中心辐射拓扑。这消除了冗余路径并防止它受到“计数到无穷大”问题的影响。
在多区域方法中,所有其他区域必须连接到区域 0(主干区域)。如果没有直接连接,您甚至可以使用虚拟链接连接到区域 0。如果您没有将其他区域作为 LSA 1 连接到区域 0,则不必担心路由循环,并且在其他区域(包括 ABR)上生成的 2 信息不会作为 LSA 3 传递到其他区域。