7. 建立邻接 (Bringing Up Adjacencies)
-
建立邻接 (Bringing Up Adjacencies)
OSPF 在相邻路由器之间建立邻接 (adjacencies),以交换路由信息。并非每一对相邻路由器都会成为邻接。本节涵盖建立邻接所涉及的概要内容。更多细节请参考第 10 节。
7.1. Hello 协议 (The Hello Protocol)
Hello 协议 (Hello Protocol) 负责建立和维护邻居关系。它还确保邻居之间的通信是双向的 (bidirectional)。Hello 报文周期性地从所有路由器接口发送出去。当路由器看到自身被列入邻居的 Hello 报文中时,即表明双向通信已建立。在广播和 NBMA 网络上,Hello 协议为网络选举一个 Designated Router (指定路由器)。
Hello 协议在广播网络、NBMA 网络和 Point-to-MultiPoint 网络上的工作方式不同。在广播网络上,每台路由器通过周期性地多播 (multicasting) Hello 报文来通告自身。这允许动态发现邻居。这些 Hello 报文包含路由器所认为的 Designated Router 的身份,以及最近看到的 Hello 报文所属路由器的列表。
在 NBMA 网络上,Hello 协议的运行可能需要一些配置信息。每个有可能成为 Designated Router 的路由器都有一份附接到该网络的所有其他路由器的列表。
当路由器接口到 NBMA 网络首次变为可操作时,具有 Designated Router 潜质的路由器向所有其他潜在的 Designated Router 发送 Hello 报文。这是一次寻找网络 Designated Router 的尝试。如果路由器自身被选为 Designated Router,它就开始向附接到该网络的所有其他路由器发送 Hello 报文。
在 Point-to-MultiPoint 网络上,路由器向所有能够直接通信的邻居发送 Hello 报文。这些邻居可以通过诸如 Inverse ARP 之类的协议动态发现(参见 [Ref14]),也可以是配置的。
在发现一个邻居、确保双向通信、并且(如果在广播或 NBMA 网络上)选举出 Designated Router 之后,就做出关于是否应与该邻居建立邻接的决定(参见 10.4 节)。如果要建立邻接,第一步是同步邻居的链路状态数据库。这将在下一节介绍。7.2. 数据库同步 (The Synchronization of Databases)
在链路状态路由算法中,所有路由器的链路状态数据库保持同步非常重要。OSPF 通过仅要求相邻路由器保持同步来简化这一点。同步过程在路由器尝试建立邻接时立即开始。每台路由器通过向其邻居发送一连串 Database Description 报文来描述其数据库。每个 Database Description 报文描述属于路由器数据库的一组 LSA。当邻居看到一个比其自身数据库副本更新的 LSA 时,它记下应当请求这个更新的 LSA。
这种 Database Description 报文的发送与接收称为 "Database Exchange Process"(数据库交换过程)。在此过程中,两台路由器形成主/从 (master/slave) 关系。每个 Database Description 报文都有一个序列号 (sequence number)。由主 (master) 发送的 Database Description 报文(轮询,polls)由从 (slave) 通过回显 (echoing) 该序列号来确认。轮询及其响应都包含链路状态数据的摘要。
主是被允许重传 Database Description 报文的唯一一方。它仅在固定的间隔重传,该间隔长度为按接口配置的常量 RxmtInterval。
每个 Database Description 都含有一个指示后续还有更多报文的位——M 位 (M-bit)。当一台路由器已经接收和发送了 M 位关闭 (off) 的 Database Description 报文时,Database Exchange Process 结束。
在 Database Exchange Process 期间及之后,每台路由器都有一份列表,列出那些邻居拥有更新实例的 LSA。这些 LSA 在 Link State Request 报文中被请求。未被满足的 Link State Request 报文以 RxmtInterval 的固定时间间隔重传。当 Database Description Process 完成且所有 Link State Request 都得到满足时,数据库被视为已同步,路由器被标记为完全邻接 (fully adjacent)。此时邻接完全可用,并在两台路由器的 router-LSA 中被通告。
一旦 Database Exchange Process 开始,泛洪过程 (flooding procedure) 就使用邻接。这简化了数据库同步,并保证它在可预测的时间段内完成。7.3. Designated Router (指定路由器)
每个广播和 NBMA 网络都有一个 Designated Router。Designated Router 为路由协议执行两个主要功能:
o Designated Router 代表网络始发一个 network-LSA。该 LSA 列出当前附接到该网络的路由器集合(包括 Designated Router 自身)。该 LSA 的 Link State ID(参见 12.1.4 节)是 Designated Router 的 IP 接口地址。IP 网络号随后可以通过使用该网络的子网/网络掩码 (subnet/network mask) 获得。
o Designated Router 与网络上所有其他路由器成为邻接。由于链路状态数据库在邻接之间是同步的(通过邻接建立和随后的泛洪过程),Designated Router 在同步过程中扮演中心角色。
Designated Router 由 Hello 协议选举。路由器的 Hello 报文包含其 Router Priority (路由器优先级),它可按接口配置。一般而言,当路由器的接口到一个网络首次变为可操作时,它检查该网络当前是否存在 Designated Router。如果存在,它接受该 Designated Router,无论其 Router Priority 如何。(这使得 Designated Router 的身份更难预测,但确保 Designated Router 较少变更。见下。)否则,如果路由器在网络上具有最高的 Router Priority,它自身就成为 Designated Router。关于 Designated Router 选举更详细(也更准确)的描述在第 9.4 节给出。
Designated Router 是许多邻接的端点。为了在广播网络上优化泛洪过程,Designated Router 将其 Link State Update 报文多播到地址 AllSPFRouters,而不是在每个邻接上发送单独的报文。
本文档的第 2 节讨论了一个区域的图表示。路由器节点标以它们的 Router ID。中转网络节点实际上标以它们 Designated Router 的 IP 地址。由此可知,当 Designated Router 变更时,看起来图上的网络节点被一个全新的节点替换。这将导致该网络及其所有附接路由器始发新的 LSA。在链路状态数据库再次收敛之前,可能会产生一些暂时的连通性丢失。这可能会导致 ICMP 不可达 (unreachable) 报文作为对数据流量的响应而被发送。因此,Designated Router 应当不频繁变更。应当配置 Router Priority,使网络上最可靠的路由器最终成为 Designated Router。7.4. Backup Designated Router (备份指定路由器)
为了使到新 Designated Router 的过渡更平滑,每个广播和 NBMA 网络都有一个 Backup Designated Router (备份指定路由器)。Backup Designated Router 也与网络上所有路由器邻接,并在前一个 Designated Router 失效时成为 Designated Router。如果没有 Backup Designated Router,当需要一个新的 Designated Router 时,就必须在新的 Designated Router 与附接到该网络的所有其他路由器之间形成新邻接。邻接形成过程的一部分是链路状态数据库的同步,这可能要花相当长的时间。在此期间,该网络将不能用于中转数据流量。Backup Designated Router 免除了形成这些邻接的需要,因为它们已经存在。这意味着中转流量中断的时段只持续泛洪新 LSA(宣告新的 Designated Router)所需的时间。
Backup Designated Router 不为该网络生成 network-LSA。(如果它生成,到新 Designated Router 的过渡会更快。然而,这是在数据库大小与 Designated Router 消失时的收敛速度之间的一个权衡。)
Backup Designated Router 也由 Hello 协议选举。每个 Hello 报文都有一个字段指定该网络的 Backup Designated Router。
在泛洪过程的某些步骤中,Backup Designated Router 扮演被动角色,让 Designated Router 做更多的工作。这减少了本地路由流量的数量。更多信息请参见 13.3 节。7.5. 邻接的图 (The graph of adjacencies)
一条邻接绑定到两台路由器共有的网络。如果两台路由器有多个共有网络,它们之间可能有多个邻接。
可以将一个网络上的邻接集合想象成构成一个无向图 (undirected graph)。顶点由路由器组成,如果两个路由器相邻,则有一条边连接它们。邻接的图描述了路由协议报文、特别是 Link State Update 报文穿越 Autonomous System 的流动。
根据是否为网络选举了 Designated Router,有两种可能的图。在物理点到点网络、Point-to-MultiPoint 网络和虚链路上,相邻路由器只要能直接通信就彼此成为邻接。相比之下,在广播和 NBMA 网络上,只有 Designated Router 和 Backup Designated Router 与附接到该网络的所有其他路由器成为邻接。
+---+ +---+
|RT1|------------|RT2| o---------------o
+---+ N1 +---+ RT1 RT2
RT7
o---------+
+---+ +---+ +---+ /|\ |
|RT7| |RT3| |RT4| / | \ |
+---+ +---+ +---+ / | \ |
| | | / | \ |
+-----------------------+ RT5o RT6o oRT4 |
| | N2 * * * |
+---+ +---+ * * * |
|RT5| |RT6| * * * |
+---+ +---+ *** |
o---------+
RT3
Figure 10: 邻接的图 (The graph of adjacencies)
这些图显示在图 10 中。假设路由器 RT7 已成为网络 N2 的 Designated Router,路由器 RT3 成为 Backup Designated Router。Backup Designated Router 在泛洪过程中执行的功能比 Designated Router 少(参见 13.3 节)。这就是连接 Backup Designated Router RT3 的虚线 (dashed lines) 的原因。