BGP 与骨干路由协议:自治域、路径选择与运维

深入讲解 BGP 协议的核心机制,包括自治域 AS、eBGP/iBGP 与路径属性、路由决策流程、多路径与 ECMP,以及黑洞与震荡等故障场景、与 OSPF/IS-IS 的协同及云数据中心实践。

BGP 是互联网的「黏合剂」:它把全球数十万个自治域(AS)连接成一张可路由的网络。与 OSPF 这类内部网关协议(IGP)不同,BGP 的决策以策略为主导而非单纯的最短路径。理解 BGP,是理解互联网路由骨架、构建多云与数据中心网络的必修课。

一、BGP 基本概念

1.1 自治域 AS 与 BGP 分类

自治域(AS) 是拥有统一路由策略的单一网络实体,用 16/32 位 ASN 标识(公网 1-64511,私网 64512-65535)。

AS 100 ── eBGP ──► AS 200 ── eBGP ──► AS 300
   │                 │
   └── iBGP(域内)──┘

eBGP:不同 AS 之间的邻居(External BGP)
  - 邻居关系跨 AS,用于传递全网可达性
iBGP:同一 AS 内部的路由器之间(Internal BGP)
  - 邻居关系在域内,用于传播学习到的 eBGP 路由
类型邻居所在传递范围关键规则
eBGP不同 AS跨 AS 传播默认 TTL=1,路径属性可修改
iBGP同一 AS域内传播默认不修改 NEXT_HOP/AS_PATH
联盟/反射器域内优化简化 iBGP 全网状Route Reflector、BGP Confederation

1.2 路径属性(Path Attributes)

BGP 路由携带一组路径属性,决策正是基于这些属性:

属性类别作用
AS_PATHWell-known记录经过的 AS 序列,防环
NEXT_HOPWell-known下一跳地址
ORIGINWell-known路由来源(IGP/EGP/Incomplete)
LOCAL_PREFWell-known(可选)本地优先值,越大越优
MED可选向邻居建议进入本 AS 的优选路径,越小越优
COMMUNITY可选标记路由,便于策略批量操作
AS_PATH 示例:
route 192.0.2.0/24
  AS_PATH: [100, 200, 300]   # 经过 AS300→AS200→AS100 传到本地
  防环:路由器不会再次通告包含自己 ASN 的路由

一句话:BGP 不是找「最短路径」,而是按「策略最优」选路——AS_PATH 只是众多决策因子之一。

二、BGP 会话与配置实战

2.1 eBGP 邻居配置(FRR/Bird 示例)

# FRR(Free Range Routing)中的 BGP 配置
# /etc/frr/frr.conf

router bgp 65001
  bgp router-id 10.0.1.1
  no bgp default ipv4-unicast

  # eBGP 邻居:上游运营商 AS 64512
  neighbor 203.0.113.1 remote-as 64512
  neighbor 203.0.113.1 ebgp-multihop 2
  neighbor 203.0.113.1 description "ISP-A uplink"

  # iBGP 邻居:域内核心路由器
  neighbor 10.0.1.2 remote-as 65001
  neighbor 10.0.1.2 update-source lo0

  # 通告本地网段
  address-family ipv4 unicast
    network 192.0.2.0/24
    neighbor 203.0.113.1 activate
    neighbor 10.0.1.2 activate
  exit-address-family

2.2 邻居状态机

BGP 邻居经历 Idle → Connect → OpenSent → OpenConfirm → Established 五个状态:

Idle ──启动──► Connect ──TCP 建立──► OpenSent ──收到 OPEN──► OpenConfirm ──收到 KEEPALIVE──► Established
  │             │                                                                             │
  └─◄──重试─────┘              OPEN 携带 holdtime/capability                            正常收发 UPDATE
                                                                                        │
                                                                                        └─◄─ KEEPALIVE 每 60s
# 查看 BGP 邻居状态
vtysh -c "show bgp summary"
# BGP router identifier 10.0.1.1, local AS number 65001
# Neighbor        V   AS  MsgRcvd  MsgSent  InQ OutQ  Up/Down State/PfxRcd
# 10.0.1.2        4 65001     102       98   0    0 00:12:33 Established
# 203.0.113.1     4 64512     918      912   0    0 02:14:09 Established

# 查看学习到的路由
vtysh -c "show bgp ipv4 unicast 192.0.2.0/24"

三、路由决策流程

3.1 BGP 选路顺序

当收到同一条前缀的多条路由时,BGP 按以下顺序择优(遇到第一个能区分的属性即定胜负):

1. 优选权重最大(Weight,Cisco 私有,本地有效)
2. 优选 LOCAL_PREF 最大
3. 本地始发路由优先于学习到的路由
4. 优选 AS_PATH 最短
5. 优选 ORIGIN 类型(IGP > EGP > Incomplete)
6. 优选 MED 最小
7. 优选 eBGP 路由(优于 iBGP)
8. 优选到 NEXT_HOP 的 IGP 度量最小
9. 若多条等价,可负载均衡(ECMP)或继续比较 Router-ID
同前缀 3 条路径决策示例:
路径 A:LOCAL_PREF 100, AS_PATH [64512]
路径 B:LOCAL_PREF 200, AS_PATH [64512]     ← 胜出(LOCAL_PREF 更大)
路径 C:LOCAL_PREF 100, AS_PATH [64512, 64513]

一句话:BGP 选路是「逐条比较属性优先级」的确定性过程,运维通过修改 LOCAL_PREF/MED/AS_PATH 来影响路由走向。

3.2 基于 COMMUNITY 的选路策略

# 常见运营商做法:用 COMMUNITY 标记路由再统一动作
# 例如 AS 64512 的 community 规则:
#   64512:90   → 本地优先值 90
#   64512:120  → 本地优先值 120(更优先)
#   64512:666  → 丢弃(黑洞路由)

router bgp 65001
  bgp community-list standard DROP seq 5 permit 64512:666

  neighbor 203.0.113.1 route-map ISP-IN in
  !
route-map ISP-IN permit 10
  match community DROP
  set ipv4 next-hop 192.0.2.1   # 或者直接 deny 实现黑洞
route-map ISP-IN permit 20
  set community additive   # 保留原始 community 并附加本地标记

四、多路径与 ECMP

4.1 ECMP 与多路径 BGP

同一前缀存在多个等价下一跳时,可以启用多路径负载均衡:

# 开启 BGP 多路径(FRR)
router bgp 65001
  maximum-paths 4          # eBGP 多路径
  maximum-paths ibgp 2     # iBGP 多路径

# 查看 ECMP 明细
vtysh -c "show bgp ipv4 unicast 0.0.0.0/0"
#   Network          Next Hop        Metric LocPrf Weight Path
# *> 0.0.0.0/0       203.0.113.1           0         0 64512 i
# *                  203.0.113.5           0         0 64512 i
# *                  198.51.100.1          0         0 64512 i

一句话:ECMP 让多条等价 BGP 路径同时承载流量,是「多出口带宽聚合」的基础,也天然提升了链路冗余性。

4.2 ECMP 的哈希一致性

ECMP 按流哈希分流,必须保证同一五元组固定走同一路径,否则乱序:

ECMP 哈希输入:src IP + dst IP + src port + dst port + proto
   → 哈希取模映射到下一跳
   → 同一 TCP 流的包始终选同一路径
# Linux 内核 ECMP 路由(等价下一跳 + 逐流哈希)
ip route add default \
  nexthop via 203.0.113.1 dev eth0 weight 1 \
  nexthop via 203.0.113.5 dev eth1 weight 1

五、BGP 故障场景:黑洞与震荡

5.1 路由黑洞(Black Hole)

路由黑洞指路由有通告、无实际转发能力——报文被静默丢弃:

产生黑洞的典型原因:
1. 设备上通告了路由,但实际没有对应的转发条目
2. 边界设备误将流量引入不通的下一跳
3. 防火墙/ACL 放行控制面却丢转发面流量
4. 部分集群黑洞:聚合路由存在但内部节点已失效
# 排查黑洞:用回环源探测 + 逐跳查看转发
ping -S 192.0.2.1 -c 3 203.0.113.9

# 追踪路由是否在本地有真实出接口
ip route get 203.0.113.9

# 查看 BGP 是否把路由学到了但未装表
vtysh -c "show ip route 203.0.113.9"

DDoS 场景的反向黑洞(RTBH):被攻击时把受害 IP 通告为黑洞路由,让上游丢弃攻击流量——常见用 community 标记 64512:666 触发上游丢弃。

5.2 路由震荡(Route Flap)

路由频繁撤销与通告(Flap)会导致全网路由表抖动、CPU 飙升。缓解手段:

# 路由阻尼(Route Damping)——FRR 配置示例
router bgp 65001
  bgp dampening 15 750 2000 60
  # 参数:半衰期 15min,上限 750,抑制阈值 2000,最大抑制 60min
故障症状定位手段
黑洞连通性中断但路由表正常ping + ip route get 对比
震荡BGP 会话反复 Up/Downshow bgp summary 看 Flap 计数
环路路由来回传播检查 AS_PATH 是否含自己
收敛慢切换链路后仍访问旧路径检查 holdtime、KEEPALIVE 间隔
前缀劫持流量被错误引导到第三方 ASRPKI / IRR 校验

5.3 前缀劫持与 RPKI

BGP 信任模型脆弱,任何人可通告任意前缀。RPKI(Resource Public Key Infrastructure) 用 ROA 记录验证「AS 是否有权通告该前缀」:

# 查看 RPKI 生效状态(FRR 集成)
vtysh -c "show bgp ipv4 unicast 192.0.2.0/24"
# ... Path #1: Received by 203.0.113.1 from 203.0.113.1
#     Origin AS 64512, VALID   ← RPKI 验证结果
RPKI 状态含义建议动作
VALIDROA 匹配,可安全接收正常接收
INVALIDROA 明确不匹配(劫持嫌疑)拒绝/降低优先级
NOT_FOUND无 ROA 记录按本地策略处理

六、与 OSPF/IS-IS 的协同

6.1 IGP 与 BGP 的分工

控制面分层:
┌────────────────────────────────────────────┐
│  BGP(EGP):域间路由,跨 AS 可达性          │
│  - 策略驱动、属性丰富、规模可达几十万条       │
├────────────────────────────────────────────┤
│  OSPF / IS-IS(IGP):域内路由,内部可达性    │
│  - 算法驱动(SPF 最短路径)、秒级收敛         │
│  - 只承载内部网段,规模数千条                │
└────────────────────────────────────────────┘
维度BGPOSPFIS-IS
适用域域间/全网域内域内
协议路径矢量链路状态链路状态
算法策略比较SPFSPF
收敛慢(秒~分钟级)快(秒级)快(秒级)
规模数十万条数千条数万条
承载IP 路由IPv4/IPv6CLNS + IP

6.2 典型的协同架构

数据中心/骨干的标准分工:IGP 管内部直连,BGP 管对外与域间;eBGP 学到的路由再经过 iBGP 在域内分发。

核心路由器(BGP 边界 + OSPF 骨干)
  ├── eBGP → 运营商/其他 AS
  ├── iBGP → 域内其他核心路由器
  ├── OSPF → 接入交换机/服务器网段
  └── 路由重分发边界:BGP → OSPF 只引默认路由,避免打满 IGP
# FRR 中 BGP 引用 OSPF 学到的高可用网段
router bgp 65001
  address-family ipv4 unicast
    network 10.0.0.0/8        # 直接通告内部大段
    # 或重分发静态/直连
    redistribute connected
  exit-address-family

# OSPF 进程:域内快速收敛
router ospf
  network 10.0.0.0/16 area 0

一句话:BGP 决定「互联网怎么到你家」,OSPF/IS-IS 决定「你家内部怎么到服务器」,两者在边界有节制地重分发。

七、云与数据中心的 BGP 实践

7.1 云上动态路由

云厂商普遍通过 BGP 实现专线与 VPC 的动态互通:

企业 IDC ──专线/MPLS──► 云边界网关(云厂商)
                         │ BGP 会话(VGW/Gateway)
                         ▼
                    云 VPC 路由表(动态学习)
                    对端网段通告 = 免手工配置静态路由
# 云厂商 BGP 配置要点(以 AWS Direct Connect / 阿里云高速通道为例)
# 1. 创建虚拟接口,指定本地 ASN 与 BGP 认证密钥
# 2. 云侧通告 VPC 网段,本侧通告 IDC 网段
# 3. 用 MED 控制多专线的主备/负载:
#    主专线 MED=100,备专线 MED=200

7.2 数据中心 BGP 架构

现代数据中心(CLOS 拓扑)常用 eBGP 作为数据中心 IGP 的替代,每台 ToR 一个 ASN:

Spine 层(AS 65000 集群,ibgp 全互联)
   │  eBGP
ToR-1 (AS 65001)   ToR-2 (AS 65002)   ToR-3 (AS 65003)
   │                  │                  │
Server / Pod 网段    Server / Pod 网段  Server / Pod 网段

为什么用 eBGP 替代 OSPF?
- 每 ToR 独立 ASN → 天然隔离故障域
- eBGP 会话比 OSPF 更简单、更可控
- 支持 underlay + overlay 分离(VXLAN 封装)
# 典型的数据中心 ToR BGP(FRR)配置片段
router bgp 65001
  bgp router-id 10.1.1.1
  neighbor 10.0.0.1 remote-as 65000     # 上联 Spine
  neighbor 10.0.0.2 remote-as 65000
  address-family ipv4 unicast
    network 10.1.0.0/16                 # 本 ToR 下挂网段
    neighbor 10.0.0.1 allowas-in 1
  exit-address-family

7.3 云环境下 BGP 排障速查

# 核心排查三板斧
vtysh -c "show bgp summary"            # 邻居是否 Established
vtysh -c "show bgp ipv4 unicast"       # 路由是否学习到
vtysh -c "show ip route"               # 路由是否装表并转发

# BGP 会话抓包(DEBUG)
tcpdump -i eth0 -s 0 -w bgp.pcap 'tcp port 179'
# BGP 端口 179(TCP),KEEPALIVE 默认 60s,HOLD 默认 180s

八、总结

主题核心知识点运维建议
AS 与邻居eBGP 跨域 / iBGP 域内私网 ASN 用 64512-65535
路径属性LOCAL_PREF/MED/AS_PATH/COMMUNITY用 Community 统一策略
选路属性优先级逐条比较修改 LOCAL_PREF 而非盲目调 IGP
多路径ECMP 逐流哈希保证五元组一致性,防乱序
故障黑洞/震荡/劫持RPKI 校验 + 路由阻尼 + 快速收敛
协同IGP 管内部、BGP 管外部边界有节制重分发,勿打满 IGP

BGP 是互联网路由的「大脑」,它的难点不在协议本身,而在策略的规模化管理:从邻居配置、属性操纵、到故障收敛与安全(RPKI),每一步都决定着一台设备、一个 AS、乃至全网的路由稳定性。对后端工程师而言,理解 BGP 的决策逻辑,才能在与云网络、数据中心网络协作时准确判断「流量为什么走这条路」。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「network」更多文章

  1. 云原生网络:CNI 容器网络、Overlay/Underlay 与 Service Mesh 数据面
  2. SSE 与实时通信方案:Server-Sent Events、WebSocket 对比与选型实战
  3. 网络故障排查实战:tcpdump/Wireshark/ss/iperf 工具链与分层诊断方法论