2. BGP基础与协议机制
BGP(Border Gateway Protocol,边界网关协议)是互联网域间路由的事实标准。它要解决的核心问题不是“如何在一个网络内部找到最短路径”,而是“如何在成千上万个自治系统之间交换可达性信息,并让每个 AS 依据策略选择一条可用的出口路径”。理解 BGP,必须先把 AS、邻居、消息、状态机、路径向量和无类别路由这六个基础概念串成一条完整的逻辑链。
一、自治系统 AS:BGP 的作用域边界
自治系统(Autonomous System,AS)是由单一行政机构管理、采用统一路由策略的一组网络。每个 AS 拥有一个由 IANA 分配的 AS 号,早期为 16 位(1~65535),现在广泛使用 32 位 AS 号(如 4200000000 以上)。AS 号分为两类:公有 AS 号用于互联网上真实交换路由,私有 AS 号(64512~65534、4200000000~4294967294)仅限内部使用,不能出现在全球路由表中。
AS 之间通过 BGP 交换路由,形成 AS 路径。按连接关系可分为:单归属(只连一个上游)、多归属(连多个上游但不转发他人流量)、过渡 AS(为其他 AS 转发流量并可能收费)和对等 AS(两个 AS 互免费用交换流量)。BGP 的策略性正体现在:同一目的地可能有多条路径,选哪条由 AS 的本地策略决定,而非单纯的距离。
二、BGP 邻居:对等体的建立与分类
BGP 邻居(peer)是两台运行 BGP 的路由器之间建立的 TCP 连接,端口 179。BGP 使用 TCP 而非 UDP,是因为它需要可靠、有序地传输大量路由更新。邻居分为两类:
- EBGP(外部 BGP):位于不同 AS 的邻居,默认 TTL 为 1,通常直连;若需多跳,需配置
ebgp-multihop。 - IBGP(内部 BGP):位于同一 AS 内的邻居,不要求直连,但要求全互联或使用路由反射器/联盟来避免水平分割问题。
建立邻居前,双方必须能通过底层 IGP 或直连路由到达对方,且 AS 号、认证、能力协商一致。邻居关系一旦建立,双方会交换完整的路由表,之后只发送增量更新。
三、BGP 消息类型:四种报文各司其职
BGP 只有四种消息类型,却支撑起整个域间路由系统:
| 消息类型 | 作用 | 关键字段 |
|---|---|---|
| OPEN | 建立邻居时协商版本、AS 号、Hold Time、能力 | My AS、Hold Time、BGP Identifier、Optional Parameters |
| UPDATE | 通告或撤销路由 | Withdrawn Routes、Path Attributes、NLRI |
| KEEPALIVE | 周期性保活,默认 60 秒 | 仅 19 字节头部 |
| NOTIFICATION | 检测到错误时发送并关闭连接 | Error Code、Error Subcode、Data |
其中 UPDATE 是核心。它携带路径属性(如 AS_PATH、NEXT_HOP、LOCAL_PREF、MED)和NLRI(Network Layer Reachability Information,即前缀)。撤销路由通过 Withdrawn Routes 字段或带 MP_UNREACH_NLRI 属性实现。
四、BGP 状态机:从 Idle 到 Established
BGP 邻居的建立过程由有限状态机描述,共六个状态:Idle、Connect、Active、OpenSent、OpenConfirm、Established。只有进入 Established,邻居才真正可用。下图展示了状态迁移与触发条件:
实际排障中,若邻居长期停留在 Active,通常说明 TCP 179 被阻断或对端未配置邻居;停留在 OpenSent 则可能是 AS 号或版本不匹配;进入 Established 后又断开,多因 Hold Time 超时或收到 NOTIFICATION。
五、路径向量:BGP 的本质数据结构
BGP 是路径向量协议,而非距离向量或链路状态。它通告的不是“到某目的地距离多少”,而是“到达某目的地需要经过哪些 AS”。AS_PATH 属性记录了路径上依次经过的 AS 号序列。路由器收到一条路由时,会检查 AS_PATH 中是否已包含自己的 AS 号——若包含,则丢弃,从而天然避免环路。
路径选择时,BGP 依次比较:Weight(Cisco 私有)→ LOCAL_PREF → 本地起源 → AS_PATH 长度 → ORIGIN → MED → EBGP 优于 IBGP → IGP 度量 → Router ID。其中 LOCAL_PREF 和 MED 是策略控制的关键:LOCAL_PREF 越高越优先,用于出站选路;MED 越低越优先,用于影响入站选路。
六、无类别路由:CIDR 与 VLSM 的支撑
BGP 支持无类别路由(Classless Inter-Domain Routing,CIDR),即路由通告中携带子网掩码,不再受 A/B/C 类地址边界限制。这使得:
- 路由聚合成为可能,例如将 192.168.0.0/24 到 192.168.3.0/24 聚合为 192.168.0.0/22,减少路由表规模。
- VLSM(可变长子网掩码)可在同一主网内划分不同大小的子网,提高地址利用率。
- BGP 的 NLRI 字段直接携带“前缀+掩码长度”,因此可以精确通告任意长度的前缀。
需要注意的是,BGP 默认不会自动聚合,聚合需显式配置 aggregate-address,并可通过 summary-only 抑制明细路由。聚合不当可能造成黑洞或次优路径,因此聚合点应选择在拥有完整明细路由的路由器上。
掌握这些基础后,后续配置 BGP 邻居、过滤路由、调整选路策略时,才能清楚每条命令作用于哪个环节、影响哪条路径属性,而不是机械地照搬配置模板。