OSPF 协议2025年3月17日 | 阅读 8 分钟 OSPF 的全称是 开放最短路径优先。它是一个被广泛使用和支持的路由协议。它是一种域内协议,这意味着它在单个区域或网络内部使用。它是一种内部网关协议,设计用于单个自治系统内。它基于链路状态路由算法,其中每个路由器都包含有关每个域的信息,并根据这些信息确定最短路径。路由的目标是学习路由。OSPF 通过学习整个网络内的所有路由器和子网来实现这一目标。每个路由器都拥有关于网络的相同信息。路由器通过发送 LSA(链路状态通告)来学习这些信息。这些 LSA 包含有关每个路由器、子网和其他网络信息。一旦 LSA 被泛洪,OSPF 就会将信息存储在称为 LSDB 的链路状态数据库中。主要目标是使 LSDB 中的每个路由器拥有相同的信息。 OSPF 区域![]() OSPF 将自治系统划分为区域,区域是网络、主机和路由器的集合。就像互联网服务提供商将互联网划分为不同的自治系统以便于管理一样,OSPF 进一步将自治系统划分为区域。 位于区域内的路由器会将路由信息泛洪到该区域。 区域内还存在特殊路由器。特殊路由器是指位于区域边界的路由器,这些特殊路由器称为区域边界路由器。该路由器会汇总关于某个区域的信息,并与其他区域共享信息。 自治系统内的所有区域都连接到骨干路由器,这些骨干路由器属于主区域。主区域的作用是在不同区域之间提供通信。 OSPF 如何工作?OSPF 的工作原理可以通过以下三个步骤来解释: 步骤 1:第一步是建立 OSPF 邻居关系。在同一链路上运行 OSPF 的两个连接的路由器会创建邻居关系。 步骤 2:第二步是交换数据库信息。建立邻居关系后,两个路由器会相互交换 LSDB 信息。 步骤 3:第三步是选择最佳路由。在相互交换 LSDB 信息后,路由器会根据 SPF 计算选择最佳路由添加到路由表中。 路由器如何形成邻居关系?在建立关系之前发生的第一个事件是每个路由器选择其 路由器 ID。 路由器 ID (RID):路由器 ID 是一个唯一标识网络中每台路由器的数字。路由器 ID 的格式为 IPv4 地址。设置路由器 ID 有几种方法,第一种方法是手动设置路由器 ID,另一种方法是让路由器自行决定。 路由器选择路由器 ID 的逻辑如下:
通过点对点连接或多台路由器连接在一起的两个路由器可以通过 OSPF 协议进行通信。当两个路由器相互发送 HELLO 数据包时,它们才是相邻的。当两个路由器都收到 HELLO 数据包的确认后,它们就进入双向状态。由于 OSPF 是一种链路状态路由协议,因此它允许路由器之间建立邻居关系。当两个路由器属于同一子网、共享相同的区域 ID、子网掩码、计时器和身份验证时,它们才能成为邻居。OSPF 关系是一种在路由器之间建立的关系,以便它们可以相互了解。当至少一台路由器是网络中的指定路由器或备份指定路由器时,或者通过点对点链接连接时,两个路由器可以成为邻居。 OSPF 链路类型链路基本上是一种连接,因此两条路由器之间的连接称为链路。 OSPF 中有四种链路类型:
OSPF 消息格式OSPF 消息格式包含以下字段: ![]()
OSPF 数据包OSPF 中有五种不同类型的数据包:
下面我们详细讨论每种数据包。 1. Hello 数据包 Hello 数据包用于建立邻居关系并检查邻居的可达性。因此,当需要建立路由器之间的连接时,就会使用 Hello 数据包。 2. 数据库描述 建立连接后,如果邻居路由器是第一次与系统通信,它会发送关于网络拓扑的数据库信息给系统,以便系统可以相应地更新或修改。 3. 链路状态请求 路由器发送链路状态请求以获取特定路由的信息。假设有两个路由器,即路由器 1 和路由器 2,路由器 1 想要了解路由器 2 的信息,因此路由器 1 向路由器 2 发送链路状态请求。当路由器 2 收到链路状态请求后,它会将链路状态信息发送给路由器 1。 4. 链路状态更新 路由器使用链路状态更新来通告其链路的状态。如果任何路由器想广播其链路的状态,它就会使用链路状态更新。 5. 链路状态确认 链路状态确认通过强制每台路由器在每次链路状态更新时发送确认来提高路由的可靠性。例如,路由器 A 将链路状态更新发送给路由器 B 和路由器 C,然后路由器 B 和 C 会将链路状态确认发送给路由器 A,这样路由器 A 就会知道两台路由器都已收到链路状态更新。 OSPF 状态运行 OSPF 协议的设备会经历以下状态:
路由器属性在进入 Extract 状态之前,OSPF 会选择一台路由器作为指定路由器,另一台路由器作为备份指定路由器。这些路由器不是类型,而是路由器的属性。在广播网络的情况下,路由器会选择一台路由器作为指定路由器,另一台作为备份指定路由器。选举指定路由器和备份指定路由器是为了避免网络中的泛洪并最小化邻接数量。它们充当所有路由器之间交换路由信息的中心点。由于点对点链路是直接连接的,因此不选举 DR 和 BDR。 如果没有选举 DR 和 BDR,路由器会将更新发送给所有相邻的邻居,从而导致网络泛洪。为了避免这个问题,会选举 DR 和 BDR。每个非 DR 和非 BDR 只将更新发送给 DR 和 BDR,而不是与网络段中的其他路由器进行交换。DR 然后将网络拓扑信息分发给同一区域内的其他路由器,而 BDR 则充当 DR 的替代品。BDR 也会接收来自所有路由器的路由信息,但它不会分发这些信息。它仅在 DR 发生故障时分发信息。 非 DR 和非 BDR 使用多播地址 224.0.0.6 将路由信息发送给 DR 和 BDR。DR 和 BDR 使用多播地址 224.0.0.5 发送路由信息。 根据以下规则选举 DR 和 BDR:
让我们通过一个例子来理解这种情况。 ![]() 在上图中,R1 被选为 DR,R2 被选为 BDR,因为 R1 具有最高的路由器 ID,而 R2 具有第二高的路由器 ID。如果 R4 和系统之间的链路发生故障,则 R4 只会将其链路故障更新给 R1 和 R4。然后,DR 会将更改更新给所有非 DR 和非 BDR,在这种情况下,除了 R4,只有 R3 可用作非 DR 和非 BDR。 下一主题停止等待协议 |
我们请求您订阅我们的新闻通讯以获取最新更新。