Understanding BGP

BGP 协议基础知识概述。

理解 BGP

Border Gateway Protocol(BGP,边界网关协议)是一种外部网关协议(EGP)。它允许你建立域间动态路由系统。当网络拓扑发生变化时,该系统会自动更新 BGP 路由器上的路由表。

BGP 是一种基于 path-vector(路径向量)算法的自治系统间路由协议。它在整个互联网上交换路由信息,是唯一设计用于在互联网规模下运行并处理与不相关路由域之间多个连接的协议。

BGP 的设计允许管理员实现复杂的路由策略。它不交换有关网络拓扑的信息,而是交换可达性信息。因此,BGP 更适合 inter-AS 环境以及诸如信息馈送之类的特殊情况。如果你需要在网络中启用动态路由,请改用 OSPF。

信息

SMIPS 设备(hAP lite、hAP lite TC 和 hAP mini)不支持 BGP。

术语

  • AS - 自治系统(Autonomous System)是处于单一技术管理之下、具有共同度量值集合的一组路由器。
  • ASN - 自治系统号(Autonomous System Number)是自治系统的唯一标识符。ASN 可以是私有或公共的。公共 ASN 在全球范围内唯一,由 RIPE 等监管机构分配。
  • AS Path - 路由所经过的自治系统序列。
  • Path Attributes - 包含有关 AS path 的附加信息,用于路由策略。
  • Routing policy - 一组规则,用于控制路由信息的重分发,并在多个可用路径中选择最佳路径。
  • NLRI - Network Layer Reachability Information,是在 BGP 对端之间交换的内容,表示如何到达前缀。
  • IGP - 内部网关协议,例如 OSPF 或 ISIS。
  • EGP - 外部网关协议,例如 BGP。
  • RR - route reflector 是一种 BGP 路由器,在 iBGP speaker 之间反射路由信息,从而消除对全互联连接的需求。
  • Route server - 一种不参与流量转发的 BGP 路由器。路由通常甚至不会安装到 FIB 中。
  • Loopback address - 在可作为 loopback 的 dummy bridge 接口上配置的 /32(IPv4)或 /128(IPv6)地址。

BGP 连接有两种类型:

  • iBGP - 连接来自同一 AS 的对端的 "internal"(内部)链路。
  • eBGP - 连接属于两个不同 AS 的对端的 "external"(外部)链路。

协议基础

BGP 路由器借助传输协议交换可达性信息;对于 BGP,该协议是 TCP(端口 179)。在形成 TCP 连接后,这些路由器交换 OPEN 消息以协商并确认支持的能力。

在就使用的 capabilities 达成一致后,会话被视为 established(已建立),对端可以开始通过 UPDATE 消息交换 NLRI。这些消息指示路由到达目标网络(NLRI 前缀)应经过的 AS 序列(AS Path)。

对端最初交换完整的路由表,在初始交换之后,随着路由表的变化发送增量更新。因此,BGP 不需要定期刷新整个 BGP 路由表。

BGP 维护路由表版本号,在连接期间,任意两个给定对端之间的该版本号必须相同。

KEEPALIVE 消息会定期发送,以确保连接处于运行状态。如果在 Hold Time 间隔内未收到消息,连接将关闭。

为响应错误或特殊情况,可以生成并将 NOTIFICATION 消息发送到远程对端;此消息类型还指示连接是否应立即关闭。

一个 AS 可能有多个 BGP speaker,并与其他 AS 提供中转服务。这意味着 BGP speaker 必须维护 AS 内一致的路由视图。AS 外部路由的一致视图通过让 AS 内的所有 BGP 路由器彼此建立直接的 iBGP 连接(全互联)或利用 route reflector 配置来提供。

使用一组管理策略(路由策略),AS 内的 BGP speaker 就特定目的地使用哪个入口或出口点达成一致。此信息使用内部路由协议(IGP)(例如 OSPF、RIP 或静态路由)传达给 AS 的内部路由器。在某些配置中,iBGP 也可以承担 IGP 协议的角色。

对于某些 BGP 属性,处理行为可能因连接类型而异;例如,LOCAL-PREF 属性不会通告给 eBGP 对端。

RouterOS 将配置和会话监控分为四个菜单:

路由源

首次通告某条路由的 BGP 路由器会分配其 origin,并将其写入 ORIGIN 属性。
有三种 origin 类型:

  • 0 - 路由器最初通过 IGP 学到该路由。如果路由是通过 BGP output.network 学到的,RouterOS 会分配此值。
  • 1 - 路由器最初通过 EGP 学到该路由。
  • 2 - Origin 未知/不完整。如果路由是通过 BGP output.redistribute 学到的,RouterOS 会分配此值。

最佳路径选择

BGP 路由器可以从多个提供商接收全局路由表的多份副本,但默认情况下 BGP 只能有一条最佳路径。为选择最佳路由,BGP 使用 Best Path Selection Algorithm(最佳路径选择算法)。

只有当路由有效时,算法才会对其进行评估。通常,如果满足以下条件,该路由被视为有效:

  • 该路由的 NEXT_HOP 有效且可达
  • 从外部对端收到的 AS_PATH 不包含本地 AS
  • 该路由未被 routing filters 拒绝

有关更多信息,请阅读 nexthop selection and validation。

最佳路径算法也只比较由 单个 BGP instance 接收的路由。由不同 BGP instance 安装的路由通过通用算法比较;即比较路由距离,优先选择距离较低的路由。

如果满足所有条件,则发生以下操作:

  1. 收到的第一条路径自动被视为 'best path'。任何后续收到的路径都会与第一条收到的路径进行比较,以确定新路径是否更好。

  2. 优先选择具有最高 WEIGHT 的路径。 此参数不是 BGP 标准的一部分,它的发明是为了快速在本地选择最佳路由。该参数是路由器本地的(在 BGP 输入中通过路由过滤器分配),无法通告。未分配 WEIGHT 的路由默认值为 0。

  3. 优先选择具有最高 LOCAL_PREF 的路径。 此属性仅在 AS 内使用。没有 LOCAL_PREF 属性的路径默认值为 100。

  4. 优先选择具有最短 AS_PATH 的路径(如果 ignore-as-path-len 设置为 yes,则跳过)。
    每个 AS_SET 计为 1,无论集合大小如何。AS_CONFED_SEQUENCE 和 AS_CONFED_SET 不包含在 AS_PATH 长度中。

  5. 优先选择通过 aggregate 或 BGP network 本地产生的路径

  6. 优先选择具有最低 ORIGIN 类型的路径。

    Interior Gateway Protocol (IGP) 低于 Exterior Gateway Protocol (EGP),EGP 低于 INCOMPLETE。

    换句话说,IGP < EGP < INCOMPLETE。

  7. 优先选择具有最低 multi-exit discriminator(MED)的路径。

    路由器仅对具有相同相邻(最左侧)AS 的路径比较 MED 属性。确定相邻 AS 时不考虑 Confederations。
    没有明确 MED 值的路径按 MED 为 0 处理。

  8. 优先选择 eBGP 路径而非 iBGP 路径。

  9. 如果启用了 multipath,则在此处停止并将路径视为相等。这将安装 BGP ECMP 路由。

  10. 优先选择最低的 IGP metric。

  11. 优先选择来自具有最低 router ID 的 BGP 路由器的路由。如果路由带有 ORIGINATOR_ID 属性,则使用 ORIGINATOR_ID 代替 router ID。

  12. 优先选择具有最短 route reflection cluster list 的路由。没有 cluster list 的路由被视为 cluster list 长度为 0。

  13. 优先选择来自最低邻居地址的路径。

多个实例

可能需要为依赖于实例的功能(如 Layer3 VPN 和 EVPN)运行多个 BGP 实例。RouterOS 允许你在 /routing/bgp/instance 菜单中添加多个实例。

请记住,best path selection 不适用于来自不同实例的路由。此外,默认重分发策略不会重分发从不属于同一实例的会话接收的 BGP 路由。在这种情况下,如果需要此类重分发,请设置 output.redistribute=bgp。

支持的标准

  • RFC 4271 Border Gateway Protocol 4
  • RFC 4456 BGP Route Reflection
  • RFC 5065 Autonomous System Confederations for BGP
  • RFC 1997 BGP Communities Attribute
  • RFC 8092 BGP Large Communities
  • RFC 4360, 5668 BGP Extended Communities
  • RFC 2385 TCP MD5 Authentication for BGPv4
  • RFC 5492 Capabilities Advertisement with BGP-4
  • RFC 2918 Route Refresh Capability
  • RFC 4760 Multiprotocol Extensions for BGP-4
  • RFC 2545 Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
  • RFC 4893 BGP Support for Four-octet AS Number Space
  • RFC 4364 BGP/MPLS IP Virtual Private Networks (VPNs)
  • RFC 4761 Virtual Private LAN Service (VPLS) Using BGP for Auto-Discovery and Signalling
  • draft-ietf-l2vpn-signaling-08 Cisco VPLS BGP-based auto-discovery
  • RFC 6286 AS-wide Unique BGP Identifier for BGP-4
  • RFC 4273 SNMP peer table monitoring (OID 1.3.6.1.2.1.15.3.1) (IPv4 only)
  • RFC 6793 4-byte ASN support and Aggregator attribute.
  • RFC 4486 Subcodes for BGP Cease Notification Message
  • RFC 4659 MPLS VPN Extension for IPv6
  • RFC 8950 Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop
  • RFC 6811 BGP Prefix Origin Validation
  • RFC 6996 Autonomous System (AS) Reservation for Private Use
  • RFC 9234 Route Leak Prevention and Detection Using Roles in UPDATE and OPEN Messages
  • RFC 5549 Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop