📜  OSPF协议开放式最短路径优先协议

📅  最后修改于: 2020-11-10 05:56:28             🧑  作者: Mango

OSPF协议

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的逻辑如下:

  • 手动分配:路由器检查是否手动设置了路由器ID。如果手动设置,则为路由器ID。如果未手动设置,它将选择最高的“ up”状态回送接口IP地址。如果没有环回接口,则它将选择最高的“ up”状态非环回接口IP地址。

点对点连接的两个路由器或连接的多个路由器可以通过OSPF协议进行通信。仅当两个路由器彼此发送HELLO数据包时,这两个路由器才相邻。当两个路由器都收到HELLO数据包的确认时,它们将进入双向状态。由于OSPF是链路状态路由协议,因此它允许在路由器之间创建邻居关系。只有当两个路由器属于同一子网,共享相同的区域ID,子网掩码,计时器和身份验证时,它们才能成为邻居。 OSPF关系是路由器之间形成的关系,以便它们彼此了解。如果两个路由器中的至少一个是网络中的指定路由器或备用指定路由器,或者通过点对点链路连接,则这两个路由器可以是邻居。

OSPF中的链接类型

链接基本上是一种连接,因此两个路由器之间的连接称为链接。

OSPF中有四种链接类型:

  • 点对点链接:点对点链接直接连接两个路由器,而中间没有任何主机或路由器。
  • 瞬态链接:当网络中连接了多个路由器时,它们称为瞬态链接。临时链路具有两种不同的实现:不现实的拓扑:当所有路由器相互连接时,称为不现实的拓扑。实际拓扑:当网络中存在某些指定路由器时,则称为现实拓扑。这里指定的路由器是所有路由器都连接到的路由器。路由器发送的所有数据包都将通过指定的路由器。
  • 存根链接:这是连接到单个路由器的网络。数据通过单个路由器进入网络,并通过同一路由器离开网络。
  • 虚拟链接:如果两个路由器之间的链接断开,则管理部门会在路由器之间创建虚拟路径,并且该路径也可能很长。

OSPF消息格式

以下是OSPF消息格式的字段:

  • 版本:这是一个8位字段,用于指定OSPF协议版本。
  • 类型:这是一个8位字段。它指定OSPF数据包的类型。
  • 消息:这是一个16位字段,用于定义消息的总长度,包括标题。因此,总长度等于消息和报头的长度之和。
  • 源IP地址:它定义了发送数据包的地址。它是发送路由的IP地址。
  • 区域标识:它定义进行路由的区域。
  • 校验和:用于纠错和错误检测。
  • 身份验证类型:身份验证有两种类型,即0和1。这里,0表示无,表示没有可用的身份验证,1表示pwd,表示基于密码的身份验证。
  • 身份验证:这是一个32位字段,其中包含身份验证数据的实际值。

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协议的设备状态如下:

  • Down:如果设备处于Down状态,则它尚未收到HELLO数据包。在这里,关闭并不意味着设备在物理上处于关闭状态;这表示OSPF进程尚未启动。
  • 初始化:如果设备进入初始化状态,则表示该设备已从其他路由器接收到HELLO数据包。
  • 2WAY:如果设备处于2WAY状态,则意味着两个路由器都已从另一个路由器接收到HELLO数据包,并且在两个路由器之间建立了连接。
  • Exstart:一旦路由器之间的交换开始,两个路由器都将进入Exstart状态。在这种状态下,将根据路由器的ID选择主机和从机。主机控制数字顺序,并开始交换过程。
  • 交换:在交换状态下,两个路由器相互发送包含数据库描述的LSA列表。
  • 加载:在加载状态下,交换LSR,LSU和LSA。
  • 满: LSA的交换完成后,路由器将移至完整状态。

路由器属性

在进入“提取”状态之前,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:

  • OSPF优先级最高的路由器被选为DR。默认情况下,最高优先级设置为1。
  • 如果没有最高优先级,则选择具有最高路由器ID的路由器作为DR,并选择具有第二高优先级的路由器作为BDR。

让我们通过一个例子来了解这种情况。

在上图中,选择R1作为DR,而选择R2作为BDR,因为R1具有最高的路由器ID,而R2具有第二高的路由器ID。如果R4与系统之间的链接失败,则R4仅更新R1和R4有关其链接失败的信息。然后,DR更新所有有关更改的非DR和非BDR,在这种情况下,除了R4之外,只有R3可用作非DR和非BDR。