此问题是对Cisco 支持社区上提出的同一问题的文字转贴。答案是 Stack Exchange 独有的。
为什么区域 0 是 OSPF 的骨干区域?为什么所有其他区域都必须连接到它?
我一直在寻找为什么所有区域都必须连接到 OSPF 中的区域 0 的正确原因。我有一个小想法,但我不清楚整个概念。
如果 2 个区域不通过区域 0 连接(不连续),那么 OSPF 作为链路状态协议如何增加路由环路的可能性?
此问题是对Cisco 支持社区上提出的同一问题的文字转贴。答案是 Stack Exchange 独有的。
我一直在寻找为什么所有区域都必须连接到 OSPF 中的区域 0 的正确原因。我有一个小想法,但我不清楚整个概念。
如果 2 个区域不通过区域 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同时使用 链路状态协议和距离矢量协议算法。
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 Loopback 路由会发生什么。
要求所有非骨干路由通过骨干是一种环路预防机制。
如果 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(主干区域)。如果没有直接连接,您甚至可以使用 virtual-link 连接到区域 0。如果您没有将其他区域连接到区域 0 作为 LSA 1,请不要担心路由环路,并且在其他区域(包括 ABR)上生成的 2 信息不会作为 LSA 3 传递到其他区域。