开放最短路径优先 (OSPF) 协议是一种链路状态路由协议,旨在替代距离矢量路由协议 RIP。RIP 是网络和互联网早期广为接受的路由协议。但是,RIP 依靠跳数作为确定最佳路由的唯一度量,很快便呈现出了问题。在拥有速度各异的多条路径的大型网络中,使用跳数无法很好地扩展。OSPF 与 RIP 相比具有巨大优势,因为它既能快速收敛,又能扩展到更大型的网络。
OSPF 是一种无类路由协议,它使用区域概念实现可扩展性。本章包含基本单区域 OSPF 实施和配置。
OSPF 的组件
所有路由协议具有相似的组件。它们都使用路由协议消息来交换路由信息。这些消息有助于构建数据结构,然后使用路由算法进行处理。
OSPF 路由协议的三个主要组件包括:
数据结构
OSPF 创建和维护三种数据库:(参见图 1)。
邻接数据库 - 创建邻居表
链路状态数据库 (LSDB) - 创建拓扑表
转发数据库 - 创建路由表
路由协议消息
第 3 层设备(例如路由器)运行 OSPF 交换消息,以使用 5 种类型的数据包传输路由信息。这些数据包如图 2 所示,包括:
Hello 数据包
数据库描述数据包
链路状态请求数据包
链路状态更新数据包
链路状态确认数据包
这些数据包用于发现邻居路由器,还可交换路由信息来维护准确的网络信息。
算法
路由器使用根据 Dijkstra SPF 算法得出的计算结果创建拓扑表。SPF 算法基于到达目的地的累计开销。
SPF 算法将每个路由器置于树的根部并计算到达每个节点的最短路径,从而创建 SPF 树。然后使用 SPF 树计算最佳路由。OSPF 将最佳路由放入转发数据库,用于创建路由表。
-----------------------------
链路状态工作原理
要维护路由信息,OSPF 路由器需要完成以下通用的链路状态路由进程来达到收敛状态:
1.建立邻居邻接关系(图 1)- 启用了 OSPF 的路由器必须在网络中互相识别对方,才能共享信息。启用 OSPF 的路由器将 Hello 数据包从所有启用 OSPF 的接口发送出去,以确定这些链路上是否存在邻居。如果存在邻居,启用 OSPF 的路由器将尝试与该邻居建立邻接关系。
2.交换链路状态通告(图 2)- 建立邻接关系之后,路由器会交换链路状态通告 (LSA)。LSA 包含每个直连链路的状态和开销。路由器将其 LSA 泛洪到邻居。收到 LSA 的邻接邻居立即将 LSA 泛洪到其他直接连接的邻居,直到区域中的所有路由器收到所有 LSA。
3.建立拓扑表(图 3)- 在收到 LSA 后,启用 OSPF 的路由器根据收到的 LSA 构建拓扑表 (LSDB)。此数据库最终负责维护有关网络拓扑的信息。
4.执行 SPF 算法(图 4 和 5)- 路由器将执行 SPF 算法。图中的齿轮用于表示 SPF 算法的执行过程。SPF 算法创建一个 SPF 树。
单区域和多区域 OSPF
利用多区域 OSPF,OSPF 可以把一个大型路由域划分为更小的区域,以支持分层路由。采用分层路由后,各个区域之间仍然能够进行路由(区域间路由),但许多处理器密集型的路由操作(例如重新计算数据库)在区域内进行。
其他区域中的路由器会收到有关拓扑更改的消息,但这些路由器只更新路由表,而不会重新运行 SPF 算法。
R2 是区域 51 的 ABR。作为 ABR,它会将区域 51 路由汇总到区域 0。当其中一个汇总链路断开时,仅在区域 51 内交换 LSA。区域 51 中的路由器必须重新运行 SPF 算法来确定最佳路由。但是,区域 0 和区域 1 中的路由器不接收任何更新;因此,它们不执行 SPF 算法。
------------------
封装 OSPF 消息
通过以太网链路传输的 OSPFv2 消息包含以下信息:
数据链路以太网帧报头 - 封装 OSPFv2 消息时标识目的组播 MAC 地址 01-00-5E-00-00-05 或 01-00-5E-00-00-06。(图 1)
IPv4 数据包报头 - 标识 IP 源地址和目的地址。目的地址是两个 OSPFv2 组播地址之一:224.0.0.5 或 224.0.0.6。该报头还包含一个协议字段,其中包含 OSPF 的代码 89。(图 2)
OSPF 数据包报头 - 标识 OSPF 数据包类型、路由器 ID 和区域 ID。(图 3)
OSPF 数据包类型特定数据 - 包含 OSPF 数据包类型信息。内容根据数据包类型不同而异。(图 4)
----------------------------------
Hello 数据包
Hello 数据包
OSPF 的第 1 类数据包是 Hello 数据包。Hello 数据包用于:
发现 OSPF 邻居并建立相邻关系。
通告两台路由器建立相邻关系所必需统一的参数。
在以太网和帧中继网络等多接入网络中选择指定路由器 (DR) 和备用指定路由器 (BDR)。点对点链路不需要 DR 或 BDR。
图中显示了 OSPFv2 第 1 类 Hello 数据包中包含的字段。图中所示的重要字段包括:
类型 - 标识数据包的类型。一 (1) 表示 Hello 数据包。值 2 表示 DBD 数据包,3 表示 LSR 数据包,4 表示 LSU 数据包,5 表示 LSAck 数据包。
路由器 ID - 用点分十进制记法表示的 32 位值(就好像 IPv4 地址),用于唯一标识始发路由器。
区域 ID – 数据包的始发区域编号。
网络掩码 - 与发送方接口关联的子网掩码。
Hello 间隔 - 以秒为单位指定路由器发送 Hello 数据包的频率。多接入网络上的默认 Hello 间隔为 10 秒。此计时器必须在相邻路由器上保持一致;否则不能建立邻接关系。
路由器优先级 - 用于 DR/BDR 选择。所有 OSPF 路由器的默认优先级是 1,但是可以从 0 手动更改为 255。该值越大,路由器越有可能成为链路的 DR。
Dead 间隔 - 以秒为单位,如果在间隔时间内路由器没有收到来自邻居的数据包,路由器将宣告该邻居路由器停止服务。默认情况下,路由器的 Dead 间隔是 Hello 间隔的四倍。此计时器必须在相邻路由器上保持一致;否则不能建立邻接关系。
指定路由器 (DR) - DR 的路由器 ID。
备用指定路由器 (BDR) - BDR 的路由器 ID。
邻居列表 - 识别所有邻接路由器的路由器 ID 的列表。
Hello 数据包间隔
如图所示,OSPF Hello 数据包传输到 IPv4 地址 224.0.0.5、IPv6 地址 FF02::5(所有 OSPF 路由器),间隔为:
10 秒(多接入网络和点对点网络上的默认设置)
30 秒(非广播多接入 [NBMA] 网络的默认设置;例如,帧中继)
Dead 间隔是路由器在宣告邻居进入 down(不可用)状态之前等待接收 Hello 数据包的时长。如果 Dead 间隔已到期,而路由器尚未收到 Hello 数据包,则会从其 LSDB 删除该邻居。路由器会将该邻居连接断开的 LSDB 信息通过所有启用了 OSPF 的接口以泛洪的方式发送出去。
思科所用的默认 Dead 间隔为 Hello 间隔的 4 倍:
40 秒(多接入网络和点对点网络上的默认设置)
120 秒([NBMA] 网络的默认设置;例如,帧中继)
---------------------------------------------
链路状态更新
路由器初步交换第 2 类 DBD 数据包,它是发送路由器的 LSDB 的简略列表,用于让接收路由器检查本地 LSDB。
接收路由器使用第 3 类 LSR 数据包请求有关 DBD 中的条目的详细信息。
第 4 类 LSU 数据包用于回复 LSR 数据包。
第 5 类数据包用于确认收到第 4 类 LSU 数据包。
LSU 也用于转发 OSPF 路由更新,例如链路更改。一个 LSU 数据包可能包含 11 种不同类型的 OSPFv2 LSA,如图所示。OSPFv3 重命名了几种 LSA,包含另外两种 LSA。
注:由于这些术语经常互换使用,LSU 和 LSA 术语之间的差异有时较难分清。然而,一个 LSU 包含一个或多个 LSA。
-----------------------------------------
OSPF 运行状态
当 OSPF 路由器初次连接到网络时,它会尝试以下操作:
与邻居建立邻接关系
交换路由信息
计算最佳路由
实现收敛
OSPF 通过多种状态运行,同时尝试达到收敛状态:
Down 状态
Init 状态
Two-Way 状态
ExStart 状态
Exchange 状态
Loading 状态
Full 状态
---------------------------------------------
建立邻居邻接关系
当在接口上启用 OSPF 时,路由器必须确定链路上是否存在另一个 OSPF 邻居。为此,路由器将通过所有启用 OSPF 的接口转发包含其路由器 ID 的 Hello 数据包。OSPF 进程使用 OSPF 路由器 ID 唯一标识 OSPF 区域中的每个路由器。路由器 ID 是格式类似于 IP 地址的一个 32 位数,分配路由器 ID 可唯一标识 OSPF 对等设备中的某个路由器。
当启用了 OSPF 的相邻路由器收到一个 Hello 数据包,但该数据包的路由器 ID 不在其邻居列表中,接收路由器会尝试与源路由器建立邻接关系。
------------------------
OSPF DR 和 BDR
为什么需要选择 DR 和 BDR?
LSA 的大量泛洪
用于在多接入网络中管理邻接关系数量和 LSA 泛洪的解决方案是 DR。在多接入网络中,OSPF 会选择出一个 DR 作为所收发 LSA 的收集与分发点。如果 DR 发生故障,则会选择 BDR。所有其他路由器成为 DROther。DROther 表示除 DR 和 BDR 以外的路由器。
注:DR 仅可用于 LSA 的传播。路由器仍然使用路由表中所示的最佳下一跳路由器转发所有其他数据包。
---------------------------------------
同步 OSPF 数据库
--------------------------------------------
路由器 ID
每台路由器需要一个路由器 ID 来参与 OSPF 域。路由器 ID 可以由管理员定义,也可以由路由器自动分配。启用了 OSPF 的路由器使用路由器 ID 实现以下目的:
唯一标识路由器 - 其他路由器使用路由器 ID 来唯一标识 OSPF 域中的每个路由器以及来自这些路由器的所有数据包。
参与 DR 的选择 - 在多接入 LAN 环境中,初步建立 OSPF 网络时会进行 DR 的选择。当 OSPF 链路变为活动状态时,配置为最高优先级的路由设备选作 DR。假设没有配置优先级,或者优先级相等,则具有最高路由器 ID 的路由器选作 DR。具有第二高路由器 ID 的路由设备选为 BDR。
如果两台相邻路由器的路由器 ID 相同,路由器会显示类似如下的错误消息:
%OSPF-4-DUP_RTRID1: Detected router with duplicate router ID.
------------------------------------------------------------------------
单区域 OSPF 网络,所有区域 ID 设置为 0。
network 172.168.1.0 0.0.0.255 area 0
-----------------------------------------------
OSPF 度量 = 开销
回想一下,路由协议使用度量来确定数据包在网络中的最佳路径。度量可用于测量某一接口上发送数据包所需的开销。OSPF 使用开销作为度量。开销越低,表示路径越好。
接口的开销与接口的带宽成反比。因此带宽越高,开销就越低。负载和延时越多,开销越高。因此,10 Mb/s 以太网线路的开销大于 100 Mb/s 以太网线路的开销。
计算 OSPF 开销的公式为:
开销 = 参考带宽 / 接口带宽
默认的参考带宽为 10^8 (100,000,000);因此公式为:
开销 = 100,000,000 bps / 接口带宽(以 bps 为单位)
调整参考带宽
从 OSPF 的角度来说,接口带宽为 100 Mb/s 的接口(开销为 1)与带宽为 100 Gb/s 的接口(开销为 1)具有相同的开销。
更改参考带宽实际上并不影响链路的带宽容量;相反,它仅影响确定度量所用的计算方法。要调整参考带宽,请使用 auto-cost reference-bandwidth Mb/s 路由器配置命令。OSPF 域中的每台路由器都必须配置此命令。注意,值用 Mb/s 单位表示;因此若要调整开销:
千兆以太网 -auto-cost reference-bandwidth 1000
万兆以太网 -auto-cost reference-bandwidth 10000
要恢复默认参考带宽,请使用 auto-cost reference-bandwidth 100 命令。
设置为千兆以太网:
调整参考带宽来适应 10 千兆以太网链路
使用 show ip ospf interface s0/0/0 命令验证分配给 R1 的 serial 0/0/0 接口的当前 OSPFv2 开销
R1 的路由表确认到达 R2 LAN 的开销为 648。
调整接口带宽
要调整接口带宽,请使用 bandwidth kilobits 接口配置命令。使用 no bandwidth 命令恢复为默认值。
注:刚刚接触网络和思科 IOS 的学生常常有一种误解,认为 bandwidth 命令会更改链路的物理带宽。该命令只修改 EIGRP 和 OSPF 所用的带宽度量。该命令不会修改链路的实际带宽。
必须调整串行链路两端的带宽
-------------------------------
----------------------------------------------------------------
-------------------------------------
单区域 OSPF
单区域 OSPF 在路由器链路网络不太复杂,通往各个目的地的路径容易推断的小型网络中很有用。
但是,如果区域太大,就必须解决以下问题(参见图示):
大型路由表 - 默认情况下,OSPF 不执行路由汇总。如果没有路由汇总,路由表将变得非常大,具体取决于网络的规模。
大型链路状态数据库 (LSDB) - 在单区域 OSPF 中,LSDB 涵盖整个路由域的拓扑。每台路由器必须保留关于路由域中的每个网络的详细信息。
频繁 SPF 算法计算 - 在大型网络中,更改是不可避免的,因此路由器花费大量 CPU 周期重新计算 SPF 算法和更新路由表。
为使 OSPF 更高效且可扩展,OSPF 使用多个区域支持分层路由。OSPF 区域是在其链路状态数据库中共享相同链路状态信息的一组路由器。
注:OSPF 路由汇总不在本课程的范围之内。
---------------------
多区域 OSPF
当大型 OSPF 区域分成较小的区域时,即称为多区域 OSPF。多区域 OSPF 在大型网络部署中很有用,能减少处理和内存开销。
多区域 OSPF 的分层拓扑具有这些优势:
路由表减小 - 路由表条目减少,因为区域之间的网络地址可以汇总。此外,一个区域中的路由器只能接收此区域之外的目的地的默认路由。例如,R1 会汇总从区域 1 到区域 0 的路由,而 R2 会汇总从区域 51 到区域 0 的路由。R1 和 R2 还会将默认静态路由传播到区域 1 和区域 51。
链路状态更新开销减少 - 因为交换具有详细拓扑信息的 LSA 的路由器减少,最大程度上降低了处理和内存要求。
SPF 计算频率降低 - 使拓扑变化仅影响区域内部。例如,由于 LSA 泛洪在区域边界终止,它使路由更新的影响降到最小。
OSPF 两级区域层次结构
多区域 OSPF 在两级区域层次结构中实施:
主干(中转)区域 - 主要功能是快速高效地传输 IP 数据包的 OSPF 区域。主干区域与其他类型的 OSPF 区域互连。通常,在主干区域中找不到最终用户。主干区域也称为 OSPF 区域 0。分层网络中将区域 0 定义为核心,所有其他区域与其直接连接(图 1)。
常规(非主干)区域 - 连接用户和资源。常规区域通常按功能或地理区域分组进行设置。默认情况下,常规区域不允许来自另一区域的流量使用它的链路到达其他区域。来自其他区域的所有流量必须经过中转区域(图 2)。
注:常规区域可以拥有许多子类型,包括标准区域、末节区域、完全末节区域和非末节区域 (NSSA)。末节区域、完全末节区域和 NSSA 不属于本章的范围。
--------------------------------------------------------------------------------------
每个区域路由器的最佳数量取决于网络稳定性等因素,但思科建议使用以下指导原则:
一个区域不应超过 50 台路由器。
一台路由器不应在多于三个区域中。
任何一台路由器拥有的邻居不应超过 60 个。
--------------------------------------------------
OSPF 路由器分为四种不同类型:
内部路由器 – 所有接口位于同一区域的路由器。区域中的所有内部路由器具有相同的 LSDB(图 1)。
主干路由器 – 主干区域中的路由器。主干区域被设为区域 0(图 2)。
区域边界路由器 (ABR) – 接口连接多个区域的路由器。它必须为相连的每个区域维护单独的 LSDB,并能在区域之间路由。ABR 是区域的送出点,也就是说,指向另一区域的路由信息只能通过本地区域的 ABR 到达另一区域。ABR 可配置为汇总来自相连区域的 LSDB 的路由信息。ABR 将路由信息分发到主干区域。然后主干路由器将消息转发到其他 ABR。在多区域网络中,一个区域可以有一个或多个 ABR(图 3)。
自治系统边界路由器 (ASBR) – 至少有一个接口连接到外部网际网路的路由器。外部网络不是该 OSPF 路由域的一部分。例如,到 ISP 的网络连接。ASBR 可以使用一个称为“路由重分布”的流程将外部网络信息导入 OSPF 网络,反之亦然(图 4)。
区域边界路由器 (ABR) : R1,R2
自治系统边界路由器 (ASBR) : R1
---------------------------------------------------
OSPF LSA 类型
LSA 是 OSPF LSDB 的构建基块。单独使用时,它们充当数据库记录并提供特定 OSPF 网络的详细信息。组合使用时,它们描述 OSPF 网络或区域的完整拓扑。
OSPF 的 RFC 目前指定了至多 11 种不同的 LSA 类型(图 1)。但是,任何多区域 OSPF 的实施都必须支持前五种 LSA:LSA 1 到 LSA 5(图 2)。本主题重点介绍这前五种 LSA。
每种路由器链路定义为一种 LSA 类型。LSA 包括链路 ID 字段,用网络号和掩码标识链路所连接的对象。根据类型不同,链路 ID 具有不同含义。LSA 的类型取决于它在路由域内生成和传播的方式。
注:OSPFv3 包括其他 LSA 类型。
-------------------------------------------------------
OSPF LSA 第 1 类
如图所示,所有路由器使用第 1 类 LSA 通告其直连 OSPF 链路,并将网络信息转发给 OSPF 邻居。LSA 包含直连接口、链路类型、邻居和链路状态的列表。
第 1 类 LSA 也称为路由器链路条目。
第 1 类 LSA 仅在其始发区域内泛洪。ABR 随后把从第 1 类 LSA 获知的网络作为第 3 类 LSA 通告给其他区域。
第 1 类 LSA 的链路 ID 用始发路由器的路由器 ID 来识别。
----------------------------------------
封装 OSPF 消息
通过以太网链路传输的 OSPFv2 消息包含以下信息:
数据链路以太网帧报头 - 封装 OSPFv2 消息时标识目的组播 MAC 地址 01-00-5E-00-00-05 或 01-00-5E-00-00-06。(图 1)
IPv4 数据包报头 - 标识 IP 源地址和目的地址。目的地址是两个 OSPFv2 组播地址之一:224.0.0.5 或 224.0.0.6。该报头还包含一个协议字段,其中包含 OSPF 的代码 89。(图 2)
OSPF 数据包报头 - 标识 OSPF 数据包类型、路由器 ID 和区域 ID。(图 3)
OSPF 数据包类型特定数据 - 包含 OSPF 数据包类型信息。内容根据数据包类型不同而异。(图 4)
OSPF 数据包类型
OSPF 使用链路数据包 (LSP) 建立和维护邻居邻接关系以及交换路由更新。
图中显示了 OSPFv2 使用的五种不同 LSP。OSPFv3 具有类似的数据包类型。每种数据包在 OSPF 路由进程中发挥各自的作用:
第 1 类:Hello 数据包 - 用于建立和维护与其他 OSPF 路由器的邻接关系。
第 2 类:数据库描述 (DBD) 数据包 - 包含发送路由器的 LSDB 的简略列表,用于让接收路由器检查本地 LSDB。LSDB 必须在同一区域内的所有链路状态路由器上保持一致,以构建准确的 SPF 树。
第 3 类:链路状态请求 (LSR) 数据包 - 接收路由器可以通过发送 LSR 来请求 DBD 中任意条目的详细信息。
第 4 类:链路状态更新 (LSU) 数据包 - 用于回复 LSR 和通告新信息。LSU 包含七种不同类型的 LSA。
第 5 类:链路状态确认 (LSAck) 数据包 - 当路由器收到 LSU 后,会发送 LSAck 来确认接收到了 LSU。LSAck 数据字段为空。
-------------------------------------
Hello 数据包
图中显示了 OSPFv2 第 1 类 Hello 数据包中包含的字段。图中所示的重要字段包括:
类型 - 标识数据包的类型。一 (1) 表示 Hello 数据包。值 2 表示 DBD 数据包,3 表示 LSR 数据包,4 表示 LSU 数据包,5 表示 LSAck 数据包。
路由器 ID - 用点分十进制记法表示的 32 位值(就好像 IPv4 地址),用于唯一标识始发路由器。
区域 ID – 数据包的始发区域编号。
网络掩码 - 与发送方接口关联的子网掩码。
Hello 间隔 - 以秒为单位指定路由器发送 Hello 数据包的频率。多接入网络上的默认 Hello 间隔为 10 秒。此计时器必须在相邻路由器上保持一致;否则不能建立邻接关系。
路由器优先级 - 用于 DR/BDR 选择。所有 OSPF 路由器的默认优先级是 1,但是可以从 0 手动更改为 255。该值越大,路由器越有可能成为链路的 DR。
Dead 间隔 - 以秒为单位,如果在间隔时间内路由器没有收到来自邻居的数据包,路由器将宣告该邻居路由器停止服务。默认情况下,路由器的 Dead 间隔是 Hello 间隔的四倍。此计时器必须在相邻路由器上保持一致;否则不能建立邻接关系。
指定路由器 (DR) - DR 的路由器 ID。
备用指定路由器 (BDR) - BDR 的路由器 ID。
邻居列表 - 识别所有邻接路由器的路由器 ID 的列表。
单击图中突出显示的每个字段了解更多信息。
-------------------------------
链路状态更新
路由器初步交换第 2 类 DBD 数据包,它是发送路由器的 LSDB 的简略列表,用于让接收路由器检查本地 LSDB。
接收路由器使用第 3 类 LSR 数据包请求有关 DBD 中的条目的详细信息。
第 4 类 LSU 数据包用于回复 LSR 数据包。
第 5 类数据包用于确认收到第 4 类 LSU 数据包。
LSU 也用于转发 OSPF 路由更新,例如链路更改。一个 LSU 数据包可能包含 11 种不同类型的 OSPFv2 LSA,如图所示。OSPFv3 重命名了几种 LSA,包含另外两种 LSA。
注:由于这些术语经常互换使用,LSU 和 LSA 术语之间的差异有时较难分清。然而,一个 LSU 包含一个或多个 LSA。
--------------------------------------------------
OSPF 运行状态
当 OSPF 路由器初次连接到网络时,它会尝试以下操作:
与邻居建立邻接关系
交换路由信息
计算最佳路由
实现收敛
-----------------------------------------------------------
建立邻居邻接关系
当在接口上启用 OSPF 时,路由器必须确定链路上是否存在另一个 OSPF 邻居。为此,路由器将通过所有启用 OSPF 的接口转发包含其路由器 ID 的 Hello 数据包。OSPF 进程使用 OSPF 路由器 ID 唯一标识 OSPF 区域中的每个路由器。路由器 ID 是格式类似于 IP 地址的一个 32 位数,分配路由器 ID 可唯一标识 OSPF 对等设备中的某个路由器。
当启用了 OSPF 的相邻路由器收到一个 Hello 数据包,但该数据包的路由器 ID 不在其邻居列表中,接收路由器会尝试与源路由器建立邻接关系。
请参考图 1 中的 R1。当启用 OSPFv2 后,已启用的 Gigabit Ethernet 0/0 从 Down 状态转变为 Init 状态。R1 开始通过所有启用 OSPF 的接口发送 Hello 数据包,以发现要建立邻接关系的 OSPF 邻居。
在图 2 中,R2 从 R1 接收 Hello 数据包,并将 R1 的路由器 ID 添加到其邻居列表。R2 随后向 R1 发送 Hello 数据包。数据包在同一接口的邻居列表中包含 R2 路由器 ID 和 R1 路由器 ID。
在图 3 中,R1 收到 Hello 数据包,并将 R2 的路由器 ID 添加到其 OSPF 邻居列表。它也在 Hello 数据包的邻居列表中注意到了自己的路由器 ID。当路由器收到一个 Hello 数据包,且其路由器 ID 在邻居列表中,路由器将从 Init 状态转变为 Two-Way 状态。
Two-Way 状态下执行的操作取决于相邻路由器之间的连接类型:
如果两个邻接的邻居通过点对点链路相互连接,则可立即从 Two-Way 状态进入数据库同步阶段。
如果路由器通过通用的以太网络相互连接,则必须选择指定路由器 DR 和 BDR
------------------------------------------
OSPF DR 和 BDR
为什么需要选择 DR 和 BDR?
多接入网络对 OSPF 的 LSA 泛洪过程提出了两项挑战:
建立很多邻接关系 - 以太网络可能会通过通用链路连接许多 OSPF 路由器。不需要而且最好不要与每台路由器建立邻接关系。这将导致同一网络内的路由器间交换大量 LSA。
LSA 的大量泛洪 - 当 OSPF 初始化时或当拓扑发生变化时,链路状态路由器会泛洪其自身的 LSA。此泛洪过程可能会非常大。
为理解多边相邻关系带来的问题,必须学习一个公式:
对于多接入网络上任意数量的路由器(指定为 n n),有 n (n – 1)/2 个邻接关系。
用于在多接入网络中管理邻接关系数量和 LSA 泛洪的解决方案是 DR。在多接入网络中,OSPF 会选择出一个 DR 作为所收发 LSA 的收集与分发点。如果 DR 发生故障,则会选择 BDR。所有其他路由器成为 DROther。DROther 表示除 DR 和 BDR 以外的路由器。
注:DR 仅可用于 LSA 的传播。路由器仍然使用路由表中所示的最佳下一跳路由器转发所有其他数据包。
-------------------------------------------------
同步 OSPF 数据库
在 Two-Way 状态之后,路由器转变为数据库同步状态。当 Hello 数据包用于建立邻接关系时,在交换和同步 LSDB 的过程中,使用其他四种类型的 OSPF 数据包。
在 ExStart 状态下,这两个路由器确定由哪个路由器首先发送 DBD 数据包。在 Exchange 状态下,路由器 ID 较高的路由器将首先发送 DBD 数据包。在图 1 中,R2 的路由器 ID 较高,因此首先发送其 DBD 数据包。
在 Exchange 状态下,两个路由器交换一个或多个 DBD 数据包。DBD 数据包包括路由器 LSDB 中显示的 LSA 条目报头的相关信息。条目可以与链路有关,也可以与网络有关。每个 LSA 条目报头包括关于链路状态类型、通告路由器的地址、链路开销以及序列号的信息。路由器使用序列号来确定接收到的链路状态信息的更新程度。
在图 2 中,R2 将 DBD 数据包发送到 R1。当 R1 收到请求时,它会执行以下操作:
1.它使用 LSAck 数据包确认收到 DBD。
2.然后 R1 将 DBD 数据包发送到 R2。
3.R2 确认 R1。
R1 将收到的信息与其 LSDB 中的信息进行比较。如果 DBD 数据包有较新的链路状态条目,路由器将转换为 Loading 状态。
例如,在图 3 中,R1 将与网络 172.16.6.0 有关的条目发送到 R2。R2 在 LSU 数据包中响应与 172.16.6.0 有关的完整信息。同样,R1 接收到 LSU 时,它会发送 LSAck。R1 随后将新的链路状态添加到其 LSDB。
当所有 LSR 满足特定路由器的要求时,邻接路由器被视为已同步并处于 full 状态。
只要相邻路由器继续接收 Hello 数据包,传输的 LSA 中的网络就会留在拓扑数据库中。同步拓扑数据库后,更新 (LSU) 仅在下列情况下发送给邻居:
发现更改时(增量更新)
每 30 分钟
--------------------------------------------
OSPF 度量 = 开销
接口的开销与接口的带宽成反比。因此带宽越高,开销就越低。负载和延时越多,开销越高。因此,10 Mb/s 以太网线路的开销大于 100 Mb/s 以太网线路的开销。
计算 OSPF 开销的公式为:
开销 = 参考带宽 / 接口带宽
默认的参考带宽为 10^8 (100,000,000);因此公式为:
开销 = 100,000,000 bps / 接口带宽(以 bps 为单位)
OSPF 累计开销
OSPF 路由的开销为从路由器到目的网络的累计开销值。
例如,在图 1 中,从 R1 到达 R2 的 LAN 172.16.2.0/24 的开销如下所示:
R1 到 R2 的串行链路开销 = 64
R2 上的千兆以太网链路开销 = 1
到达 172.16.2.0/24 的总开销 = 65