边界网关协议 (BGP)

2025年03月17日 | 阅读 9 分钟

它是一个域间路由协议,使用路径向量路由。它是一种网关协议,用于在互联网上的自治系统之间交换路由信息。

正如我们所知,边界网关协议在不同的自治系统上工作,所以我们应该了解 BGP 的历史、自治系统的类型等等。

BGP 历史

第一个网络是 ARPANET,由国防部开发,高级研究项目局设计。在 ARPANET 中,只有一个网络,由单一管理员处理。所有路由器都属于单一网络,路由通过 GGP(网关到网关路由协议)进行。GGP 是所有路由协议中的第一个协议。GGP 协议未使用自治系统编号。

当互联网进入市场后,GGP 开始出现问题。由于互联网骨干网变得很大,导致路由表也很大,这带来了维护问题。为了解决这个问题,ARPANET 被划分为多个域,称为自治系统。每个自治系统都可以单独处理,并且每个系统都有自己的路由策略,自治系统包含小型路由数据库。当实现自治系统概念时,出现了第一个路由协议 RIP,它运行在单个自治系统上。为了连接一个自治系统与另一个自治系统,开发了 EGP(外部网关协议)。EGP 协议于 1984 年推出,定义在 RFC 904 中。EGP 协议使用了五年,但它存在一些缺陷,因此在 1989 年开发了新的协议,称为边界网关协议 (BGP),定义在 RFC 1105 中。

BGP 有许多版本,例如

  • BGP 版本 1:此版本于 1989 年发布,定义在 RFC 1105 中。
  • BGP 版本 2:定义在 RFC 1163 中。
  • BGP 版本 3:定义在 RFC 1267 中。
  • BGP 版本 4:这是 BGP 的当前版本,定义在 RFC 1771 中。

BGP 自治系统

Border Gateway Protocol

自治系统是属于单一通用管理域的网络集合。或者我们可以说,它是属于单一管理域的路由器集合。例如,一个组织可以包含多个不同位置的路由器,但单一自治系统编号将识别它们。在同一自治系统或同一组织内,我们通常使用 IGP(内部网关协议),如 RIP、IGRP、EIGRP、OSPF。如果我们想在两个自治系统之间进行通信,在这种情况下,我们使用 EGP(外部网关协议)。在互联网上运行或用于连接两个不同自治系统编号的协议称为 BGP(边界网关协议)。BGP 是唯一在互联网骨干网上运行或用于在两个不同自治系统编号之间交换路由的协议。互联网服务提供商使用 BGP 协议来控制所有路由信息。

BGP 特性

以下是 BGP 协议的特性

  • 开放标准

它是一种标准协议,可以在任何 Windows 设备上运行。

  • 外部网关协议

它是一种外部网关协议,用于在两个或多个自治系统编号之间交换路由信息。

  • AS 域间路由

它专门为域间路由而设计,其中 AS 域间路由意味着在两个或多个自治系统编号之间交换路由信息。

  • 支持互联网

它是唯一运行在互联网骨干网上的协议。

  • 无类别

它是一种无类别协议。

  • 增量更新和触发更新

与 IGP 一样,BGP 也支持增量更新和触发更新。

  • 路径向量协议

BGP 是一种路径向量协议。路径向量是发送路由及路由信息的一种方法。

  • 配置邻居关系

它通过手动配置发送更新来配置邻居关系。假设有两个路由器 R1 和 R2。那么,R1 必须发送一个配置命令,说明你是我的邻居。另一方面,R2 也必须向 R1 发送一个配置命令,说明 R1 是 R2 的邻居。如果两个配置命令匹配,那么这两个路由器之间就会建立邻居关系。

  • 应用层协议

它是一种应用层协议,并使用 TCP 协议来保证可靠性。

  • 指标

它具有权重属性、起源等许多属性。BGP 支持非常丰富的属性,这些属性会影响路径操纵过程。

  • 管理距离

如果信息来自外部自治系统,则使用 20 的管理距离。如果信息来自同一自治系统,则使用 200 的管理距离。

BGP 的环路防止机制

Border Gateway Protocol

有可能在你连接到互联网时,你可能将路由 10.0.0.0 广告给某个自治系统,然后它又被广告给另一个自治系统。那么,同样的路由又会传回来的可能性。这会造成环路。但是,在 BGP 中,有一个规则是,当路由器看到自己的 AS 编号时,例如,如上图所示,网络 180.10.0.0/16 源自 AS 100,当它发送到 AS 200 时,它将携带其路径信息,即 180.10.0.0/16 和 AS 100。当 AS 200 发送到 AS 300 时,AS 200 将发送其路径信息 180.10.0.0/16,AS 路径为 100,然后是 200,这意味着该路由源自 AS 100,然后到达 200,最后到达 300。当 AS 300 发送到 AS 500 时,它将发送网络信息 180.10.0.0/16,AS 路径为 100、200,然后是 300。如果 AS 500 发送到 AS 100,并且 AS 100 在更新中看到自己的自治编号,它将不接受。这样,BGP 就防止了环路的产生。

自治系统类型

自治系统类型如下

  • Stub 自治系统
Border Gateway Protocol

这是一个系统,它只有一个自治系统与其他自治系统之间的连接。数据流量不能通过 stub 自治系统。Stub AS 可以是源或汇。如果我们有一个自治系统,即 AS1,那么它将与其他自治系统 AS2 有单个连接。AS1 可以充当源或汇。如果它充当源,那么数据从 AS1 移动到 AS2。如果 AS1 充当汇,意味着来自 AS2 的数据将在 AS1 中被消耗,但数据不会从 AS1 前往。

  • 多宿主自治系统
Border Gateway Protocol

这是一个自治系统,它可以有多个与其他自治系统的连接,但它仍然可以是数据流量的源或汇。没有瞬态数据流量,这意味着数据可以穿过一个自治系统。

  • 瞬态自治系统
Border Gateway Protocol

瞬态自治系统是一个多宿主自治系统,但它也提供瞬态流量。

路径属性

BGP 根据路径的属性选择最佳路由。

正如我们所知,边界网关路由协议使用路径向量路由,它包含显示路径信息的路由表。路径属性提供路径信息。显示或存储路径信息的属性称为路径属性。这个属性列表有助于接收路由器在应用任何策略时做出更好的决策。让我们看看不同类型的属性。路径属性广泛分为两类

Border Gateway Protocol

1. 众所周知属性(Well-known attribute):这是每个 BGP 路由器都应该识别的属性。

众所周知属性进一步分为两类

  • 众所周知强制属性(Well-known mandatory):当 BGP 要通告某个网络时,它还会通告额外信息,以及路径属性信息。这些信息包括 AS 路径信息、起源信息、下一跳信息。这里的强制意味着它必须存在于所有 BGP 路由更新中。
  • 众所周知可选属性(Well-known discretionary):它被所有 BGP 路由器识别并传递给其他 BGP 路由器,但不是必须存在于更新中。

2. 可选属性(Optional attribute):这是一个不一定被每个 BGP 路由器识别的属性。简而言之,我们可以说它不是强制属性。

可选属性进一步分为两类

  • 可选可传递属性(Optional transitive):BGP 可能识别也可能不识别此属性,但它会被传递给其他 BGP 邻居。这里的可传递意味着,如果该属性未被识别,则会被标记为部分。
  • 可选不可传递属性(Optional non-transitive):如果 BGP 无法识别该属性,它将忽略该更新,并且不会将其通告给其他 BGP 路由器。

BGP 邻居

BGP 邻居关系类似于 OSPF 邻居关系,但有几处不同。BGP 通过 TCP 连接并在端口号 179 上建立邻居关系,然后交换 BGP 更新。它们在建立邻居关系后交换更新。在 BGP 中,邻居关系是手动配置的。BGP 邻居也称为 BGP 对等体或 BGP 发言者。

有两种类型的邻居关系

  • IBGP(内部 BGP):如果所有路由器都是彼此的邻居并且属于同一个自治系统编号,则这些路由器被称为 IBGP。
Border Gateway Protocol
  • EBGP(外部 BGP):如果所有路由器都是彼此的邻居并且它们属于不同的自治系统编号,则这些路由器被称为 EBGP。
Border Gateway Protocol

BGP 表

BGP 表有三种类型

  • 邻居表(Neighbor table):它包含管理员手动配置的邻居。邻居关系必须使用 neighbor 命令手动配置。

为了验证,使用以下命令

以上命令对于验证邻居关系是否正常非常有用。

  • BGP 转发表(BGP forwarding table):它包含 BGP 中通告的所有路由,可以使用以下命令进行验证
  • IP 路由表(IP routing table):IP 路由表包含到达目的地所需的最佳路径路由。以下命令显示了最佳路由路径

BGP 会话

当我们谈论 BGP 时,意味着自治系统之间的通信。让我们考虑两个自治系统,每个系统有五个节点。

BGP 会话分为两类

1. 内部 BGP 会话

内部 BGP 会话用于在自治系统内部的路由器之间交换信息。简而言之,我们可以说路由信息在同一自治系统的路由器之间交换。

2. 外部 BGP 会话

外部 BGP 会话是不同自治系统的节点或路由器之间相互通信的会话。

数据包类型

BGP 中存在四种不同类型的数据包

  • Open:当路由器想与另一台路由器建立邻居关系时,它会发送 Open 数据包。
  • Update:Update 数据包可以在以下两种情况下使用
  1. 可用于撤销先前已通告的目的地。
  2. 也可用于宣告到新目的地的路由。
  • Keep Alive:Keep Alive 数据包定期交换,以告知其他路由器它们是否存活。例如,有两个路由器 R1 和 R2。R1 向 R2 发送 Keep Alive 数据包,而 R2 向 R1 发送 Keep Alive 数据包,以便 R1 可以知道 R2 存活,R2 也可以知道 R1 存活。
  • Notification:当路由器检测到错误状况或关闭连接时,会发送 Notification 数据包。

BGP 数据包格式

现在我们将看到数据包在其中传输的格式。以下是 BGP 数据包格式中的字段

Border Gateway Protocol
  1. Marker:这是一个 32 位字段,用于身份验证目的。
  2. Length:这是一个 16 位字段,定义消息的总长度,包括头部。
  3. Type:这是一个 8 位字段,定义数据包的类型。

下一个主题Go-Back-N ARQ