边界网关协议 - BGP
BGP 是运行互联网的路由协议。它通过交换路由和可达性信息来管理数据包如何在网络之间路由。
BGP 是一种在数据中心中越来越流行的协议,因为它非常适合 Clos 拓扑中的丰富互连。 RFC 7938 提供了有关在数据中心中使用 BGP 的更多详细信息。
BGP 如何工作?
BGP 在自治系统 (AS) 之间定向数据包,自治系统是在公共管理下的一组路由器。每个路由器都维护一个路由表,该路由表控制交换机如何转发数据包。路由器上的 BGP 进程根据来自其他路由器的信息和 RIB 中的信息在路由表中生成信息。RIB 存储路由并在发生更改时不断更新路由表。
自治系统
BGP 将每个独立管理的 Enterprise 和服务提供商视为自治系统,负责一组网络地址。每个这样的自治系统都有一个唯一的数字,称为 ASN。中央机构 (ICANN) 分发 ASN,但 64512 到 65535 之间的数字供私人使用。当您在数据中心内使用 BGP 时,您必须使用此数字空间或您拥有的单个 ASN。
ASN 是 BGP 构建转发拓扑结构的核心。BGP 路由通告不仅携带发起者的 ASN,还携带此路由通告通过的 ASN 列表。转发路由通告时,BGP 扬声器会将自身添加到此列表中。AS 路径 包括 ASN 列表。BGP 使用 AS 路径来检测和避免环路。
FRR 支持 16 位和 32 位 ASN。
自动 BGP
在两层叶脊环境中,您可以使用自动 BGP 自动生成 32 位 ASN,这样您就不必考虑要配置哪些数字。自动 BGP 有助于在您的数据中心构建最佳 ASN 配置,以避免次优路由和路径搜索,这种情况在您分配错误的脊 ASN 时发生。自动 BGP 不会对标准 BGP 行为或配置进行任何更改。
自动 BGP 在 4200000000 到 4294967294 范围内分配专用 ASN。这是 RFC 6996 定义的私有空间。每个叶节点在 4200000001 到 4294967294 范围内都有一个随机且唯一的值。每个脊节点的值为 4200000000;范围内的第一个数字。有关配置自动 BGP 的信息,请参阅基本 BGP 配置。
- 在新部署中使用自动 BGP,以避免在现有配置中发生 ASN 冲突。
- 不必在配置中的所有交换机上都使用自动 BGP。例如,您可以使用自动 BGP 配置一个交换机,但手动将 ASN 设置为其他交换机。
- 在两层脊叶网络中使用自动 BGP。在具有超级脊的三层网络中使用自动 BGP 可能会导致错误的 ASN 分配。
leaf
关键字根据交换机 MAC 地址的哈希值生成 ASN。分配的 ASN 可能会在交换机更换后发生更改。- 您可以使用 NVUE 配置自动 BGP。
eBGP 和 iBGP
当您使用 BGP 在自治系统之间进行对等连接时,对等连接是 eBGP。当您在自治系统内使用 BGP 时,对等连接是 iBGP。eBGP 对等方具有不同的 ASN,而 iBGP 对等方具有相同的 ASN。
当用作 eBGP 或 iBGP 时,协议的核心是相同的,但 eBGP 和 iBGP 之间的协议行为存在关键差异。为了防止环路,iBGP 扬声器不会将从一个 iBGP 对等方学习的路由信息转发到另一个 iBGP 对等方。eBGP 使用 AS_Path
属性防止环路。
您需要将所有 iBGP 扬声器彼此对等连接在一个全网状网络中。在大型网络中,此要求可能会变得不可扩展。扩展 iBGP 网络最流行的方法是引入 路由反射器。
BGP 路径选择
BGP 是一种路径向量路由算法,与 IGP(如 OSPF)不同,它不依赖于单个路由指标来确定最低成本路由。
BGP 路径选择算法会查看多个因素来确定哪个路径是最佳路径。Cumulus Linux 默认启用 BGP 多路径,以便将多个等成本路由安装到路由表中,但仅将单个路由通告给 BGP 对等方。
BGP 算法过程的顺序如下
最高权重:权重是一个介于 0 到 65535 之间的值。BGP 不会在更新中携带权重,而是在本地使用它来影响最佳路径选择。本地生成的路由的权重为 32768。
最高本地优先级:只有 iBGP 邻居交换本地优先级。BGP 为来自 eBGP 对等方的路由分配本地优先级 0。权重在不向对等方发送其他信息的情况下进行路由选择,而本地优先级则影响到 iBGP 对等方的路由。
本地始发路由:本地交换机放入 BGP 的任何路由都是选定的最佳路由。这包括静态路由、聚合路由和重新分配的路由。
最短 AS 路径:BGP 选择 ASN 跳数最少的路径。
来源检查:优先选择具有 IGP 来源(您使用
network
语句放入 BGP 的路由)的路由,而不是不完整来源(您通过重新分配放入 BGP 的路由)。最低 MED:BGP 将多出口鉴别器 (MED) 发送到 eBGP 对等方,以指示流量如何进入 AS 的首选项。BGP 从 eBGP 对等方与 iBGP 对等方交换 MED,但在将前缀通告到另一个 AS 之前将其重置为值 0。
eBGP 路由:交换机使用来自 eBGP 对等方的路由,而不是从 iBGP 对等方学习的路由。
到下一跳的最低 IGP 成本:到达 BGP 下一跳的 IGP 指标最低的路由。
iBGP ECMP 优于 eBGP ECMP:如果您配置 BGP 多路径,则交换机使用相等的 iBGP 路由而不是相等的 eBGP 路由(除非您还配置 as-path multipath-relax。
最旧路由:交换机使用 BGP 表中最旧的路由。
最低路由器 ID:交换机使用来自具有最低路由器 ID 属性的对等方的路由。如果路由来自路由反射器,则交换机使用
ORIGINATOR_ID
属性进行比较。最短路由反射器集群列表:如果路由通过多个路由反射器,则交换机使用具有最短路由反射器集群列表的路由。
最高对等方 IP 地址:交换机使用来自具有最高 IP 地址的对等方的路由。
要查看 Cumulus Linux 选择一个路径而不是另一个路径的原因,请运行 vtysh show ip bgp
命令。
当您使用 BGP 多路径时,如果多个路径相等,BGP 仍然会选择单个最佳路径来通告给对等方。此路径显示为最佳路径,并带有原因,尽管 BGP 可以将多个路径安装到路由表中。
无编号 BGP
从历史上看,对等方通过 IPv4 和 TCP 端口 179 连接,并且在建立会话后,它们会交换前缀。当 BGP 对等方通告 IPv4 前缀时,它必须包含 IPv4 下一跳地址,即通告路由器的地址。这要求每个 BGP 对等方都具有 IPv4 地址,这在大型网络中可能会消耗大量地址空间,并且可能需要为每个面向对等方的接口单独分配 IP 地址。
RFC 5549 中的无编号 BGP 标准使用 ENHE,并且不需要您将 IPv4 前缀与 IPv4 下一跳一起通告。您可以在 Cumulus Linux 交换机之间配置 BGP 对等连接并交换 IPv4 前缀,而无需在每个交换机上配置 IPv4 地址;BGP 使用无编号接口。
每个前缀的下一跳地址是 IPv6 链路本地地址,BGP 会自动将其分配给每个接口。使用 IPv6 链路本地地址作为下一跳而不是 IPv4 单播地址,无编号 BGP 使您无需在每个接口上配置 IPv4 地址。
当您使用无编号 BGP 时,BGP 会学习前缀,计算路由并将它们安装在 IPv4 AFI 到 IPv6 AFI 格式中。Cumulus Linux 中的 ENHE 不会将路由以 IPv4 前缀到 IPv6 下一跳格式安装到内核中。对于您使用 IPv6 邻居发现路由器通告启用的链路本地对等连接,BGP 会将 IPv6 下一跳转换为 IPv4 链路本地地址。然后,它会使用从另一端的链路本地地址派生的 MAC 地址为 IPv4 链路本地地址安装静态邻居条目。
- 如果您为接口分配 IPv4 /30 或 /31 IP 地址,则 BGP 将使用 IPv4 对等连接而不是 IPv6 链路本地对等连接。
- 无编号 BGP 一次只能与两台交换机一起使用(使用点对点链路)。
- 对等设备上的 IPv6 实现使用 MAC 地址作为接口 ID,以便在分配 IPv6 链路本地地址时,如 RFC 4291 建议的那样。
- 每个路由器或终端主机都必须具有 IPv4 地址才能完成 IPv4 地址的
traceroute
。在这种情况下,使用的 IPv4 地址是环回设备的地址。即使在数据中心中未使用扩展下一跳编码 (ENHE),链路地址通常也不会被通告,因为它们会占用宝贵的 FIB 资源,并且还会为入侵者暴露一个额外的攻击向量,以用于闯入或进行 DDOS 攻击。为环回设备分配 IP 地址至关重要。
相关信息
- Dinesh G. Dutt 撰写的《数据中心 BGP》 - 现代数据中心边界网关协议完整指南
- 双向转发检测 (BFD) 和 BGP
- BGP 维基百科条目(包括有用的 RFC 列表)
- FRR BGP 文档
- IETF 草案讨论数据中心内 BGP 的使用
- RFC 1657,使用 SMIv2 的第四版边界网关协议 (BGP-4) 的管理对象定义
- RFC 1997,BGP 社区属性
- RFC 2385,通过 TCP MD5 签名选项保护 BGP 会话
- RFC 2439,BGP 路由震荡抑制
- RFC 2545,用于 IPv6 域间路由的 BGP-4 多协议扩展的使用
- RFC 2918,BGP-4 的路由刷新功能
- RFC 4271,边界网关协议 4 (BGP-4)
- RFC 4760,BGP-4 的多协议扩展
- RFC 5004,避免 BGP 最佳路径从一个外部路径转换到另一个外部路径
- RFC 5065,BGP 的自治系统联盟
- RFC 5291,BGP-4 的出站路由过滤功能
- RFC 5492,BGP-4 的功能通告
- RFC 5549,使用 IPv6 下一跳通告 IPv4 网络层可达性信息
- RFC 6793,BGP 对四字节自治系统 (AS) 编号空间的支持
- RFC 7911,BGP 中多路径的通告
- draft-walton-bgp-hostname-capability-02,BGP 的完全限定域名功能