Skip to main content

3. Summary of Operation (操作摘要)

3. Summary of Operation (操作摘要)

边界网关协议 (Border Gateway Protocol, BGP) 是一种自治系统间路由协议。它建立在从 EGP (如 [RFC904] 中定义) 和 NSFNET 骨干网中 EGP 使用 (如 [RFC1092] 和 [RFC1093] 中描述) 中获得的经验之上。有关更多 BGP 相关信息, 请参见 [RFC1772], [RFC1930], [RFC1997] 和 [RFC2858]。

BGP 系统的主要功能是与其他 BGP 系统交换网络可达性信息。这些网络可达性信息包括可达性信息所经过的自治系统 (Autonomous Systems, ASes) 列表信息。这些信息足以构建 AS 连接图, 从中可以修剪路由环路, 并在 AS 级别强制执行某些策略决策。

在本文档的上下文中, 我们假设 BGP 发言者仅向其对等体通告其自己使用的路由 (在此上下文中, 如果 BGP 路由是最优选的 BGP 路由并用于转发, 则称 BGP 发言者"使用"该路由)。所有其他情况均不在本文档范围内。

在本文档的上下文中, 术语"IP 地址"指的是 IP 版本 4 地址 [RFC791]。

通过 BGP 交换的路由信息仅支持基于目标的转发范式, 该范式假设路由器仅根据数据包 IP 头中携带的目标地址转发数据包。这反过来反映了可以 (以及不能) 使用 BGP 强制执行的策略决策集。请注意, 某些策略不能由基于目标的转发范式支持, 因此需要诸如源路由 (又称显式路由) 之类的技术来执行。这些策略也不能使用 BGP 来执行。例如, BGP 不能使一个 AS 将流量发送到相邻 AS 以转发到某个目标 (可通过该相邻 AS 到达但超出该相邻 AS), 意图使该流量采用与源自相邻 AS 的流量 (对于同一目标) 所采用的不同路由。另一方面, BGP 可以支持任何符合基于目标的转发范式的策略。

BGP-4 提供了一组新的支持无类别域间路由 (Classless Inter-Domain Routing, CIDR) [RFC1518, RFC1519] 的机制。这些机制包括支持将一组目标作为 IP 前缀进行通告, 并消除 BGP 中网络"类别"的概念。BGP-4 还引入了允许路由聚合的机制, 包括 AS 路径的聚合。

本文档通篇使用术语 `Autonomous System' (AS) (自治系统)。自治系统的经典定义是在单一技术管理下的一组路由器, 使用内部网关协议 (IGP) 和公共度量来确定如何在 AS 内路由数据包, 并使用自治系统间路由协议来确定如何将数据包路由到其他 AS。自从开发出这个经典定义以来, 单个 AS 使用多个 IGP 并且有时在 AS 内使用多组度量已经变得很常见。使用自治系统一词强调这样一个事实, 即即使使用了多个 IGP 和度量, AS 的管理在其他 AS 看来具有单一连贯的内部路由计划, 并呈现出可通过它到达的目标的一致图景。

BGP 使用 TCP [RFC793] 作为其传输协议。这消除了实现显式更新分段、重传、确认和排序的需要。BGP 监听 TCP 端口 179。BGP 中使用的错误通知机制假设 TCP 支持"优雅"关闭 (即所有未完成的数据将在连接关闭之前传递)。

在两个系统之间建立 TCP 连接。它们交换消息以打开和确认连接参数。

初始数据流是 BGP 路由表中导出策略允许的部分, 称为 Adj-Ribs-Out (见 3.2)。随着路由表的更改发送增量更新。BGP 不需要定期刷新路由表。为了允许本地策略更改在不重置任何 BGP 连接的情况下产生正确的效果, BGP 发言者应该 (a) 在连接持续期间保留其所有对等体向其通告的路由的当前版本, 或 (b) 使用路由刷新扩展 [RFC2918]。

可以定期发送 KEEPALIVE 消息以确保连接处于活动状态。NOTIFICATION 消息在响应错误或特殊条件时发送。如果连接遇到错误情况, 则发送 NOTIFICATION 消息并关闭连接。

不同 AS 中的对等体称为外部对等体, 而同一 AS 中的对等体称为内部对等体。内部 BGP 和外部 BGP 通常缩写为 IBGP 和 EBGP。

如果特定 AS 有多个 BGP 发言者并为其他 AS 提供传输服务, 则必须注意确保 AS 内路由的一致视图。AS 内部路由的一致视图由 AS 内使用的 IGP 提供。出于本文档的目的, 假设通过让 AS 内的所有 BGP 发言者彼此维护 IBGP 来提供 AS 外部路由的一致视图。

本文档指定了 BGP 协议的基本行为。此行为可以由扩展规范修改, 并且确实被修改。当协议被扩展时, 新行为在扩展规范中得到完整记录。

3.1. Routes: Advertisement and Storage (路由: 通告和存储)

就本协议而言, 路由被定义为将一组目标与到达这些目标的路径属性配对的信息单元。这组目标是其 IP 地址包含在 UPDATE 消息的网络层可达性信息 (Network Layer Reachability Information, NLRI) 字段中携带的一个 IP 地址前缀中的系统, 路径是在同一 UPDATE 消息的路径属性字段中报告的信息。

路由在 UPDATE 消息中在 BGP 发言者之间通告。具有相同路径属性的多个路由可以在单个 UPDATE 消息中通告, 方法是在 UPDATE 消息的 NLRI 字段中包含多个前缀。

路由存储在路由信息库 (Routing Information Bases, RIBs) 中: 即 Adj-RIBs-In, Loc-RIB 和 Adj-RIBs-Out, 如第 3.2 节所述。

如果 BGP 发言者选择通告先前接收的路由, 它可以在向对等体通告路由之前添加或修改路由的路径属性。

BGP 提供机制, 通过这些机制, BGP 发言者可以通知其对等体先前通告的路由不再可用。给定的 BGP 发言者可以通过三种方法指示路由已从服务中撤回:

a) 表示先前通告路由的目标的 IP 前缀可以在 UPDATE 消息的 WITHDRAWN ROUTES 字段中通告, 从而将关联的路由标记为不再可用,

b) 可以通告具有相同 NLRI 的替换路由, 或

c) BGP 发言者连接可以关闭, 这会隐式地从服务中删除该对发言者相互通告的所有路由。

更改路由的属性通过通告替换路由来完成。替换路由携带新的 (更改的) 属性, 并具有与原始路由相同的地址前缀。

3.2. Routing Information Base (路由信息库)

BGP 发言者内的路由信息库 (Routing Information Base, RIB) 由三个不同的部分组成:

a) Adj-RIBs-In: Adj-RIBs-In 存储从从其他 BGP 发言者接收的入站 UPDATE 消息中学到的路由信息。它们的内容表示可用作决策过程输入的路由。

b) Loc-RIB: Loc-RIB 包含 BGP 发言者通过将其本地策略应用于其 Adj-RIBs-In 中包含的路由信息而选择的本地路由信息。这些是本地 BGP 发言者将使用的路由。这些路由中每一个的下一跳必须可通过本地 BGP 发言者的路由表解析。

c) Adj-RIBs-Out: Adj-RIBs-Out 存储本地 BGP 发言者选择用于向其对等体通告的信息。存储在 Adj-RIBs-Out 中的路由信息将携带在本地 BGP 发言者的 UPDATE 消息中并通告给其对等体。

总之, Adj-RIBs-In 包含已由其对等体向本地 BGP 发言者通告的未处理路由信息; Loc-RIB 包含已由本地 BGP 发言者的决策过程选择的路由; Adj-RIBs-Out 组织路由以通告给特定对等体 (通过本地发言者的 UPDATE 消息)。

尽管概念模型区分了 Adj-RIBs-In, Loc-RIB 和 Adj-RIBs-Out, 但这既不意味着也不要求实现必须维护路由信息的三个单独副本。实现的选择 (例如, 信息的 3 个副本与带指针的 1 个副本) 不受协议约束。

BGP 发言者用于转发数据包 (或构建用于数据包转发的转发表) 的路由信息在路由表中维护。路由表累积直接连接网络的路由、静态路由、从 IGP 协议学到的路由以及从 BGP 学到的路由。特定 BGP 路由是否应该安装在路由表中, 以及 BGP 路由是否应该覆盖由另一个源安装的到同一目标的路由, 是一个本地策略决策, 本文档中未指定。除了实际的数据包转发之外, 路由表还用于解析 BGP 更新中指定的下一跳地址 (见第 5.1.3 节)。