跳到主要内容

7. 建立邻接关系 (Bringing Up Adjacencies)

  1. 建立邻接关系 (Bringing Up Adjacencies)

    OSPF 在相邻路由器之间创建邻接关系 (adjacency), 目的是交换路由信息. 并非任意两台相邻路由器都会成为邻接. 本节介绍创建邻接关系所涉及的一般事项. 更多细节见 Section 10.

    7.1. Hello Protocol

    Hello Protocol 负责建立和维护邻居关系. 它还确保邻居之间的通信是双向的. Hello 报文会从所有路由器接口周期性发送出去. 当路由器在邻居的 Hello Packet 中看到自己被列出时, 即表示双向通信成立. 在广播网络和 NBMA 网络上, Hello Protocol 会为该网络选举 Designated Router.

    Hello Protocol 在广播网络、NBMA 网络和 Point-to-MultiPoint 网络上的工作方式不同. 在广播网络上, 每台路由器通过周期性多播 Hello Packets 来通告自己. 这允许动态发现邻居. 这些 Hello Packets 包含该路由器所看到的 Designated Router 身份, 以及最近看到其 Hello Packets 的路由器列表.

    在 NBMA 网络上, Hello Protocol 的运行可能需要某些配置信息. 每台可能成为 Designated Router 的路由器都拥有一个列表, 列出连接到该网络的所有其他路由器. 具有 Designated Router 潜力的路由器, 当其通往 NBMA 网络的接口首次变为可运行时, 会向所有其他潜在 Designated Routers 发送 Hello Packets. 这是为了尝试找到该网络的 Designated Router. 如果该路由器自身被选为 Designated Router, 它会开始向连接到该网络的所有其他路由器发送 Hello Packets.

    在 Point-to-MultiPoint 网络上, 路由器会向所有可直接通信的邻居发送 Hello Packets. 这些邻居可以通过 Inverse ARP 等协议动态发现 (见 [Ref14]), 也可以通过配置指定.

    在发现邻居、确保双向通信, 并且在广播或 NBMA 网络上选出 Designated Router 之后, 会决定是否应与该邻居形成邻接关系 (见 Section 10.4). 如果要形成邻接关系, 第一步是同步邻居之间的链路状态数据库. 下一节介绍这一过程.

    7.2. 数据库同步 (The Synchronization of Databases)

    在链路状态路由算法中, 保持所有路由器的链路状态数据库同步非常重要. OSPF 通过只要求相邻路由器保持同步来简化这一点. 当路由器尝试建立邻接关系时, 同步过程随即开始. 每台路由器通过向邻居发送一系列 Database Description packets 来描述自己的数据库. 每个 Database Description Packet 描述该路由器数据库中的一组 LSA. 当邻居看到某个 LSA 比自己数据库中的副本更新时, 会记录需要请求这个较新的 LSA.

    这种 Database Description packets 的发送和接收称为 "Database Exchange Process". 在此过程中, 两台路由器形成 master/slave 关系. 每个 Database Description Packet 都有一个序列号. master 发送的 Database Description Packets (polls) 由 slave 通过回显该序列号来确认. polls 及其响应都包含链路状态数据摘要. 只有 master 允许重传 Database Description Packets. 它只按固定间隔重传, 间隔长度是按接口配置的常量 RxmtInterval.

    每个 Database Description 都包含一个指示还有更多报文随后到来的标志, 即 M-bit. 当路由器已经接收并发送了 M-bit 关闭的 Database Description Packets 时, Database Exchange Process 结束.

    在 Database Exchange Process 期间及之后, 每台路由器都会有一个列表, 其中列出邻居拥有更新实例的 LSA. 这些 LSA 会在 Link State Request Packets 中请求. 未被满足的 Link State Request packets 会按固定时间间隔 RxmtInterval 重传. 当 Database Description Process 完成并且所有 Link State Requests 都得到满足后, 数据库被视为已同步, 路由器被标记为完全邻接. 此时邻接关系完全可用, 并会在两台路由器的 router-LSAs 中通告.

    一旦 Database Exchange Process 开始, 泛洪过程就会使用该邻接关系. 这简化了数据库同步, 并保证同步会在可预测的时间内完成.

    7.3. Designated Router

    每个广播网络和 NBMA 网络都有一个 Designated Router. Designated Router 为路由协议执行两个主要功能:

    o Designated Router 代表该网络产生 network-LSA. 该 LSA 列出当前连接到该网络的路由器集合, 包括 Designated Router 自身. 该 LSA 的 Link State ID (见 Section 12.1.4) 是 Designated Router 的 IP 接口地址. 随后可使用该网络的子网/网络掩码获得 IP 网络号.

    o Designated Router 会与该网络上的所有其他路由器成为邻接. 由于链路状态数据库会跨邻接关系同步, 先通过邻接建立, 再通过泛洪过程, 因此 Designated Router 在同步过程中起核心作用.


    Designated Router 由 Hello Protocol 选举. 路由器的 Hello Packet 包含其 Router Priority, 该优先级可按接口配置. 一般而言, 当路由器通往某个网络的接口首次变为可用时, 它会检查该网络当前是否已有 Designated Router. 如果已有, 它会接受该 Designated Router, 无论其 Router Priority 如何. 这会使 Designated Router 身份更难预测, 但能确保 Designated Router 不会频繁变化, 见下文. 否则, 如果该路由器在网络上具有最高 Router Priority, 它自身就成为 Designated Router. Section 9.4 给出了更详细也更准确的 Designated Router 选举描述.

    Designated Router 是许多邻接关系的端点. 为优化广播网络上的泛洪过程, Designated Router 将其 Link State Update Packets 多播到地址 AllSPFRouters, 而不是在每条邻接关系上分别发送报文.

    本文档 Section 2 讨论了区域的有向图表示. 路由器节点以其 Router ID 标记. Transit network 节点实际以其 Designated Router 的 IP 地址标记. 因此, 当 Designated Router 变化时, 图上的网络节点看起来像是被一个全新节点替换. 这会导致该网络及其所有连接路由器产生新的 LSA. 在链路状态数据库再次收敛之前, 可能会出现临时连接性丢失. 这可能导致响应数据流量时发送 ICMP unreachable 消息. 因此, Designated Router 应尽量少变化. 应配置 Router Priorities, 使网络上最可靠的路由器最终成为 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 的 LSA, 完成泛洪为止.

    Backup Designated Router 不为该网络生成 network-LSA. 如果它生成, 切换到新的 Designated Router 会更快. 不过, 这是数据库大小和 Designated Router 消失时收敛速度之间的取舍.

    Backup Designated Router 也由 Hello Protocol 选举. 每个 Hello Packet 都有一个字段, 指定该网络的 Backup Designated Router.

    在泛洪过程的某些步骤中, Backup Designated Router 扮演被动角色, 让 Designated Router 承担更多工作. 这会减少本地路由流量. 更多信息见 Section 13.3.

    7.5. 邻接图 (The graph of adjacencies)

    邻接关系绑定到两台路由器共有的网络. 如果两台路由器共有多个网络, 它们之间可能有多个邻接关系.

    可以把一个网络上的邻接关系集合想象成一张无向图. 顶点由路由器组成, 如果两台路由器相邻接, 则二者之间有一条边. 邻接图描述了路由协议报文, 特别是 Link State Update Packets, 在 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: 邻接图


    这些图见 Figure 10. 假定 Router RT7 已成为 Network N2 的 Designated Router, Router RT3 成为 Backup Designated Router. 在泛洪过程中, Backup Designated Router 执行的功能少于 Designated Router (见 Section 13.3). 这就是连接 Backup Designated Router RT3 的线条以虚线表示的原因.