Skip to content

BGP 协议 (Border Gateway Protocol)

一、BGP 概述

什么是 BGP

BGP (Border Gateway Protocol,边界网关协议):一种基于路径向量的域间路由协议,是当前互联网唯一广泛使用的 EGP (Exterior Gateway Protocol)。

BGP 主要解决:

  • 自治系统之间的可达性交换
  • 大规模网络中的策略控制
  • 跨运营商、跨国家的路由选择
  • 灵活的路径属性过滤与操纵
AS 100 ──── eBGP ──── AS 200 ──── eBGP ──── AS 300
   │                        │                        │
   │ iBGP                   │ iBGP                  │ iBGP
   ▼                        ▼                        ▼
 内部 IGP                 内部 IGP                 内部 IGP

为什么需要 BGP

如果没有 BGP:

互联网由数十万个 AS 组成
每个 AS 包含数以万计的前缀
路径、策略、运营商关系千差万别

距离向量(RIP)和链路状态(OSPF/IS-IS)都难以胜任:

  • 拓扑规模不足
  • 策略表达力弱
  • 不携带商业关系信息
  • 收敛后仍无法反映策略

BGP 通过 AS_PATH 和丰富的路径属性承载策略,是事实上的互联网骨干协议。

BGP 的特点

  • 基于路径向量(Path Vector)
  • 基于 TCP 179 可靠传输
  • 增量更新 + 周期性刷新
  • CIDR 支持(携带前缀 + 长度)
  • 丰富的路径属性(Path Attributes)
  • 以策略(Policy)而非单纯 metric 决策
  • eBGP 防环使用 AS_PATH
  • iBGP 防环需要全互联或反射器 / 联盟
  • 不主动发现邻居,需手动指定 Peer
  • 默认不做负载均衡,按策略选单一最优路径

BGP 角色与术语

术语 作用
AS (Autonomous System) 一组被统一管理的 IP 前缀与路由策略
AS Number (ASN) 2 字节或 4 字节自治系统编号
BGP Speaker 运行 BGP 并参与对等体关系的路由器
BGP Peer / Neighbor 与本地 Speaker 建立 BGP 会话的远端 Speaker
Speaker 角色 由 AS 内配置决定谁是 PE / CE / RR / 边界
IGP 内部网关协议(OSPF、IS-IS 等)
EBGP / External BGP 不同 AS 之间的 BGP
IBGP / Internal BGP 同一 AS 内部的 BGP

二、BGP 端口与通信方式

1. 传输层

方向 本端端口 对端端口
任一端发起 任意端口 TCP 179
建立后双向 179 或高端口 179 或高端口

BGP 通过 TCP 三次握手建立连接,因此:

  • 依赖底层 IGP 或静态路由保证 Peer 之间 IP 可达
  • 报文可靠传输,无需自己重传
  • 默认不对等体报文做认证(除 TCP MD5 / GTSM)

2. Peer 类型

类型 说明
eBGP Peer 不同 AS 之间的 BGP 邻居,默认 TTL=1
iBGP Peer 同一 AS 之内的 BGP 邻居,默认 TTL=255
Confederation Peer 联盟内部的 BGP,行为类似 eBGP
Route Reflector Client RR 与其客户机之间的 iBGP
Confederation eBGP 跨子 AS 的 eBGP,类似 eBGP

3. Peer 发现方式

  • 静态指定:对端 IP 手工配置
  • 不使用组播发现
  • 不像 OSPF / IS-IS 自动发现邻居
  • Peer 之间通常建立 BFD 或 KEEPALIVE 监控

4. 多跳 Peer

R1 ── 链路 ── R2 ── 链路 ── R3

R1 与 R3 之间建立 BGP:

neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 ebgp-multihop 2

需要:

  • 双方相互可达的 IGP / 静态路由
  • ebgp-multihop 大于实际跳数
  • TTL 安全机制(GTSM)

5. AS Number

  • 公有 ASN:2 字节 1–64511,4 字节 4200000000–4294967294(早期 4 字节)
  • 私有 ASN:64512–65534(2 字节),需要约定或转换
  • 4 字节 ASN:RFC 6793,ASPLAIN 与 ASDOT 两种格式
ASPLAIN:  23456
ASDOT:    2.3.0.56   = 23456

私有 ASN 传递给运营商时通常会被剥离,需明确协商。


三、BGP 五种报文

1. 报文类型

Type 名称 作用
1 OPEN 建立邻居,协商参数
2 UPDATE 通告或撤销路由
3 NOTIFICATION 错误通知并拆链
4 KEEPALIVE 保活,防 Hold Timer 超时
5 ROUTE-REFRESH 请求对端重发指定 AFI/SAFI 的路由

2. OPEN

对端收到 OPEN 后校验参数,同意则回 KEEPALIVE 建立。

BGP Speaker A                         BGP Speaker B
  │                                        │
  │ TCP 三次握手                           │
  ├───────────────────────────────────────→│
  │←───────────────────────────────────────┤
  │                                        │
  │ OPEN (AS, Router-ID, Hold Time...)     │
  ├───────────────────────────────────────→│
  │                                        │
  │ KEEPALIVE                              │
  │←───────────────────────────────────────┤
  │                                        │
  │ KEEPALIVE                              │
  ├───────────────────────────────────────→│
  │                                        │
  │              Established               │

常见字段:

  • Version:当前为 4
  • My AS:发送方 ASN
  • Hold Time:双方取较小值
  • BGP Identifier:发送方 Router-ID
  • Optional Parameters:能力参数(MP-BGP、Route Refresh、Add-Path、4 字节 ASN 等)

3. KEEPALIVE

不携带路由信息,仅用于保活:

  • 协商 Hold Time 的三分之一默认发送一次
  • 实际频率可被 timers 调整
  • 长时间无 UPDATE / KEEPALIVE 到达 Hold Time 内则拆链

4. UPDATE

携带:

  • NLRI:新增或更新的路由
  • 撤销路由(Withdrawn Routes)
  • 路径属性(Path Attributes)
┌────────────────────────────────────────┐
│ Withdrawn Routes Length                │
├────────────────────────────────────────┤
│ Withdrawn Routes                       │
├────────────────────────────────────────┤
│ Total Path Attribute Length            │
├────────────────────────────────────────┤
│ Path Attributes                        │
├────────────────────────────────────────┤
│ NLRI                                  │
└────────────────────────────────────────┘

一条 UPDATE 可同时包含撤销与新增属性/路由,但实现上常常分开发送。

5. NOTIFICATION

检测到错误后发送并拆链:

  • Message Header Error
  • OPEN Message Error
  • UPDATE Message Error
  • Hold Timer Expired
  • Finite State Machine Error
  • Cease(管理员主动拆链)

收到 Notification 后会话立即终止,需要重新建立。

6. ROUTE-REFRESH

不携带路由,用于触发对端重发全部指定 AFI/SAFI 路由,常发生在:

  • 策略变更后
  • 收到错误路由希望重新协商
  • BGP RR 客户机做策略刷新
Route Refresh (AFI=1, SAFI=1)
      ↓
对端重发整张 BGP 表

四、BGP 报文格式

1. 通用 Header

所有 BGP 报文都以 19 字节固定头开始:

+---------------------------------------+
| Marker (16 bytes): all 1s             |
+---------------------------------------+
| Length (2 bytes)                      |
+---------------------------------------+
| Type (1 byte)                         |
+---------------------------------------+
字段 长度 含义
Marker 16 字节 全 1,用于鉴权场景历史
Length 2 字节 包含头在内的总长度,最小 19,最大 4096
Type 1 字节 1=OPEN,2=UPDATE,3=NOTIFICATION,4=KEEPALIVE,5=ROUTE-REFRESH

2. OPEN 格式

+---------------------------------------+
| Version (1)                           |
+---------------------------------------+
| My AS (2 or 4 bytes)                  |
+---------------------------------------+
| Hold Time (2 bytes)                   |
+---------------------------------------+
| BGP Identifier (4 bytes, Router-ID)   |
+---------------------------------------+
| Opt Parm Len (1)                      |
+---------------------------------------+
| Optional Parameters                   |
+---------------------------------------+

3. UPDATE 格式

+---------------------------------------+
| Withdrawn Routes Length (2)           |
+---------------------------------------+
| Withdrawn Routes (variable)           |
+---------------------------------------+
| Total Path Attribute Length (2)       |
+---------------------------------------+
| Path Attributes                       |
|   Attr Flags + Type Code + Length     |
|   Attribute Value                     │
+---------------------------------------+
| NLRI                                  │
+---------------------------------------+

4. NOTIFICATION 格式

+---------------------------------------+
| Error Code (1)                        |
+---------------------------------------+
| Error Subcode (1)                     │
+---------------------------------------+
| Data (variable)                       │
+---------------------------------------+

5. ROUTE-REFRESH 格式

+---------------------------------------+
| AFI (2)                               |
+---------------------------------------+
| Reserved (1)                          |
+---------------------------------------+
| SAFI (1)                              │
+---------------------------------------+

五、BGP 路径属性

1. 属性分类

类别 含义
Well-known Mandatory 所有 BGP 实现必须识别且必须随路由通告
Well-known Discretionary 必须识别,但可选择是否通告
Optional Transitive 不识别也要传递给下一跳
Optional Non-transitive 不识别则丢弃

2. 常见属性一览

属性 类型代码 分类 说明
ORIGIN 1 Well-known Mandatory IGP / EGP / Incomplete
AS_PATH 2 Well-known Mandatory 经过的 AS 序列
NEXT_HOP 3 Well-known Mandatory 下一跳 IP
MULTI_EXIT_DISC (MED) 4 Optional Non-transitive 影响入向选路
LOCAL_PREF 5 Well-known Discretionary 影响出向选路(iBGP)
ATOMIC_AGGREGATE 6 Well-known Discretionary 通告汇总时不携带明细 AS_SET
AGGREGATOR 7 Optional Transitive 汇总路由器与 AS
COMMUNITY 8 Optional Transitive 团体标识
ORIGINATOR_ID 9 Optional Non-transitive RR 起源 ID
CLUSTER_LIST 10 Optional Non-transitive RR 反射路径
MP_REACH_NLRI 14 Optional Non-transitive 多协议可达
MP_UNREACH_NLRI 15 Optional Non-transitive 多协议撤销

3. ORIGIN

含义
IGP 来自本 AS 内部(如 network 重发布)
EGP 历史 EGP 协议,已不再使用
Incomplete 通过重发布学到,来源不明

ORIGIN 越具体越优先:IGP 优于 EGP 优于 Incomplete。

4. AS_PATH

AS_PATH 类型
├── Sequence       正常顺序:100 200 300
├── Set            无序集合:{100, 200}
└── Confederation  联盟子 AS 序列
AS 100 把路由发给 AS 200 时
原本 AS_PATH 为空
通告给 AS 200 后变成:
AS_PATH = [100]
AS 200 再通告给 AS 300
AS_PATH = [200 100]

AS_PATH 是 BGP 防环的基础:收到含自身 ASN 的路由即丢弃。

5. NEXT_HOP

场景 NEXT_HOP 行为
eBGP 默认是通告路由器的接口 IP
iBGP 默认沿用 eBGP Peer 通告的下一跳
Next-Hop-Self 修改为 iBGP 本端地址,常用于 RR
多跳 eBGP 通常需手工 Next-Hop-Self
AS 100 (R1) ── eBGP ── AS 200 (R2) ── iBGP ── AS 200 (R3)

R1 把 10.0.0.0/8 通告给 R2
NEXT_HOP = R1 的互联接口地址
R3 通过 iBGP 收到时 NEXT_HOP 仍为 R1 接口地址
R3 需要 IGP 可达 R1 才能递归查表

6. LOCAL_PREF

  • 仅在 iBGP 内传递
  • 默认值:100
  • 数值越大越优先
  • 用于决定本 AS 出向流量方向
AS 200 内部:
R2 LOCAL_PREF=200
R4 LOCAL_PREF=150
去往 AS 300 优先选 R2 出口

7. MED

  • 在 eBGP 之间传递
  • 默认值:0
  • 数值越小越优先
  • 用于影响对端 AS 进本 AS 的入向流量
AS 100 通过两条链路连接 AS 200
链路 1 通告 MED=10
链路 2 通告 MED=20
AS 200 内选路时偏向 MED 较小的链路 1

8. COMMUNITY

  • 32 位整数标签
  • 著名团体:
团体 含义
no-export 不通告给 eBGP Peer
no-advertise 不通告给任何 Peer
no-export-subconfed 不通告给联盟外 eBGP
internet 不做特殊处理
graceful-shutdown 平滑退出
  • 扩展团体(Extended Community):8 字节,用于 VPN / MPLS 等
  • 大团体(Large Community):12 字节

六、BGP 选路原则

1. 总体顺序

BGP 选路严格按以下顺序比较,第一条不唯一即比较下一条:

1.  Highest Weight             (Cisco 私有,Local)
2.  Highest LOCAL_PREF
3.  Locally Originated         (本 AS 内部产生)
4.  Shortest AS_PATH
5.  Lowest ORIGIN              (IGP < EGP < Incomplete)
6.  Lowest MED
7.  eBGP > iBGP
8.  Lowest IGP metric to NEXT_HOP
9.  Oldest eBGP Path
10. Lowest Router-ID
11. Lowest Peer IP (Cluster List Length)
12. Lowest Neighbor Address

不同厂商顺序略有差别,但核心一致:Weight → Local Pref → AS Path → Origin → MED → eBGP/iBGP → IGP Metric。

2. Weight

  • Cisco 私有:本地有效,不可传递
  • 默认值:本地产生路由 = 32768,其他学到的 = 0
  • 通过 weight、route-map、邻居配置修改

3. LOCAL_PREF 优先级最高(厂商无关属性)

R1 ─ AS 100 ─ R2
R3 ─ AS 100 ─ R4
LOCAL_PREF=300 → R1 出口
LOCAL_PREF=200 → R3 出口

4. AS_PATH 长度

AS_PATH: 100 200 300
长度 = 3

运营商常通过 AS_PATH 预置(Prepend)控制流量方向。

5. 决策示例

路由 Weight LocalPref AS_PATH MED 选择
A 0 100 300 400 0
B 0 100 200 500 0

最终选择 AS_PATH 更短的 B。

6. ECMP 与 Add-Path

  • 默认 BGP 不做等价负载均衡
  • Add-Path 协商后允许通告多条等价路径
  • 不同厂商名称略有差别(max-path、maximum-paths)

七、BGP 状态机

1. 六大状态

状态 含义
Idle 初始或停止状态,等待启动事件
Connect 等待 TCP 连接完成
Active TCP 连接失败,不断重试
OpenSent 已发送 OPEN,等待响应
OpenConfirm 已收到 OPEN,等待 KEEPALIVE
Established 对等体已建立,可交换 UPDATE

2. 状态转移

Idle
 │ Start
 ▼
Connect ──────── TCP 失败/重置 ──→ Active
 │ TCP 建立成功                         │
 │ OPEN 发送                            │ TCP 成功
 ▼                                      ▼
OpenSent ─ OPEN 错误 ─→ Idle         OpenSent
 │ 收到 OPEN/Keepalive
 ▼
OpenConfirm ─ KEEPALIVE ─→ Established
   │ Notify / Hold Expired
   ▼
 Idle

3. 常见卡滞状态

卡滞 可能原因
Active 邻居 IP、AS 错;TCP 被 ACL 阻断;接口 down
OpenSent Router-ID、Hold Time、能力协商失败
OpenConfirm Hold Time 不匹配;KEEPALIVE 未发
持续 Idle 配置未启用;启动事件缺失

4. Hold Timer 与 KEEPALIVE

参数 默认
Hold Time 180 秒
KEEPALIVE 间隔 Hold Time / 3 = 60 秒
Connect Retry 120 秒
MinRouteAdvInterval 30 秒(eBGP)
MinASOriginationInterval 15 秒

可在 Peer 视图修改,但两端最终取较小值。


八、BGP 路由通告规则

1. 基本原则

  • eBGP:学到的路由可以通告给本 AS 内的 iBGP Peer
  • iBGP:学到的路由默认不通告给其他 iBGP Peer
  • eBGP Peer:通告路由时附加本 AS

2. iBGP 水平分割

        iBGP Full-Mesh
  R1 ───── R2
   │  \    │
   │   \   │
  R3 ───── R4

不允许:
R2 从 R1 学到路由后再通告给 R3
(除非 R2 是 RR 或联盟边界)

iBGP 学到的路由不通告给其他 iBGP,原因是 AS 内部无 AS_PATH 防环机制,因此必须构建全互联或使用 RR / 联盟打破。

3. eBGP 防环

R1 (AS 100) ── eBGP ── R2 (AS 200) ── eBGP ── R3 (AS 300)

R3 把 10.0.0.0/8 通告给 R2
AS_PATH = [300]
R2 通告给 R1
AS_PATH = [200 300]

R1 通告回 R2,AS_PATH = [100 200 300]
R2 看到自身 AS 200 已存在,丢弃

4. RR 反射例外

  • RR 打破 iBGP 水平分割
  • 使用 ORIGINATOR_ID / CLUSTER_LIST 防环

5. 联盟例外

  • 联盟子 AS 之间如同 eBGP,使用 AS_PATH 防环
  • 整个联盟对外表现为单一 AS

九、路由反射器 (Route Reflector) 与联盟

1. RR 角色

角色 关系
RR (Reflector) 反射路由
Client RR 的客户机,仅与 RR 形成 iBGP
Non-Client RR 之间互连

2. 反射规则

RR 收到路由来自:
├── Client        → 反射给 所有 Client + 所有 Non-Client
├── Non-Client    → 仅反射给 Client(不通告给其他 Non-Client)
└── eBGP Peer     → 通告给所有 Client + 所有 Non-Client

3. ORIGINATOR_ID & CLUSTER_LIST

RR1 (Cluster A) 收到 client 路由
ORIGINATOR_ID = 客户端 Router-ID
CLUSTER_LIST  = [Cluster_A]

RR2 (Cluster B) 收到 RR1 反射的路由
增加自己的 Cluster_ID
CLUSTER_LIST = [Cluster_B, Cluster_A]

若 RR 收到 CLUSTER_LIST 包含自身 Cluster_ID 则丢弃

4. RR 设计原则

  • 同一 Cluster 多个 RR 实现冗余
  • 不同 Cluster 之间仍需 Full-Mesh 或多层 RR
  • Client 与 RR 之间即可简化连接,不需全互联

5. 联盟 (Confederation)

AS 200 (Confederation AS 65001)
   ├── Sub-AS 65001
   │    ├── R1
   │    └── R2
   └── Sub-AS 65002
        ├── R3
        └── R4

对外 AS_PATH 仅出现 [200],内部使用 CONFED_AS_PATH

每个子 AS 内仍需 Full-Mesh 或 RR;子 AS 之间用类似 eBGP 的方式通告。


十、BGP 路由聚合

1. 聚合方式

类型 方式
Static Aggregate 手工通过 aggregate-address / network 通告汇总
Dynamic Aggregate 通过 IGP 重发布自动汇总(Cisco 自动汇总历史特性)

2. aggregate-address 选项

选项 含义
summary-only 只通告汇总,明细被抑制
as-set AS_PATH 使用 AS_SET,包含明细 AS
suppress-map 选择性抑制明细
attribute-map 修改汇总的属性
advertise-map 仅当条件前缀存在才通告汇总
route-map 过滤可被聚合的前缀

3. ATOMIC_AGGREGATE

  • as-set 缺失或聚合过程中丢失路径信息时设置
  • 收到此属性的路由器不应再解聚合
  • 用于告知下游聚合路径不完整

4. 聚合中的 AS_PATH

明细:AS_PATH = [300]    10.1.0.0/16
明细:AS_PATH = [400]    10.2.0.0/16
汇总(as-set):AS_PATH = [200] {300 400}    10.0.0.0/14
汇总(无 as-set):AS_PATH = [200]                10.0.0.0/14 ATOMIC_AGGREGATE

as-set 能保留明细 AS 但引入 Set 与 Sequence 的复杂度,影响选路确定性,需根据场景选择。


十一、BGP 路由过滤与策略

1. 入向与出向

方向 作用
Inbound 控制本路由器从邻居接收哪些路由
Outbound 控制向邻居通告哪些路由

2. 常用工具

工具 用途
prefix-list 前缀与长度范围匹配
filter-list (AS_PATH ACL) AS_PATH 正则匹配
route-map 复杂策略与属性修改
community-list 团体匹配
extcommunity-list 扩展团体匹配
distribute-list 基于 ACL 的过滤

3. 正则表达式

AS_PATH 过滤常用正则:

^100$        完全等于 100
^100_        以 100 开头
_100$        以 100 结尾
_100_        中间包含 100
^[0-9]+$     仅含数字
.*           任意

4. 常见过滤组合

Inbound:
  route-map FROM_PEER permit 10
    match ip address prefix-list ALLOW_CUSTOMER
    set local-preference 200

Outbound:
  route-map TO_PEER deny 10
    match community BLACKHOLE
  route-map TO_PEER permit 20

5. 最大前缀限制

neighbor 10.0.0.1 maximum-prefix 100000

超过上限后处理方式:

  • warning-only:只警告
  • restart N:N 分钟后重建会话
  • 丢弃并停止会话

十二、BGP 团体属性

1. 标准团体

32 位,写成 AA:NN

65001:100
65001:200

2. 著名团体

团体 行为
no-export 不通告到 eBGP Peer
no-advertise 不通告给任何 Peer
no-export-subconfed 联盟内部不外传
internet 默认行为
graceful-shutdown GR 期间声明 graceful 退出

3. 扩展团体

用于 MPLS VPN、FlowSpec 等:

Route Target: 65001:100
Site of Origin: 65001:50

格式:

Type:2bytes Administrator:4bytes Assigned Number:2bytes
2bytes : 4bytes : 2bytes

4. 大团体 (RFC 8092)

12 字节:

Global Administrator:4bytes Local Administrator:6bytes
4294967296:1

5. 团体传递规则

  • 默认不向 eBGP 邻居通告标准团体(除非配置 send-community
  • iBGP 邻居默认传递
  • 需根据厂商开启对应参数

十三、BGP 安全

1. 路由劫持 (Hijack)

AS 65000 本应通告 10.0.0.0/8
AS 65500 冒充分配 10.0.0.0/8 给其他 Peer
其他 AS 选择更短的 AS_PATH 或 MOAS 接受
导致流量被错误引导

类型:

  • Prefix Hijack:完全冒充分配
  • Sub-Prefix Hijack:更具体的伪造(如 /24 冒充 /8)
  • Path Manipulation:冒用其他 AS 的 AS_PATH

2. 路由泄漏 (Leak)

更具体或更优选的路由意外通告到非授权 Peer:

  • 违反商业关系(Provider → Customer → Peer 错误方向)
  • 通常因缺少 filter、route-map 或误操作

3. 安全防护

手段 作用
TCP MD5 / TCP-AO Peer 之间 TCP 报文认证
GTSM / TTL Security 限制 Peer 报文 TTL
IPsec 链路或 Peer 加密
RPKI / ROA 验证 ASN 是否被授权通告该前缀
BGP Origin Validation 根据 ROA 标记 Valid / Invalid / NotFound
IRR / RADB 维护 whois 注册信息
BGP Monitoring (BGPMon, RIPE RIS) 全球多 vantage point 监控

4. RPKI

Prefix: 10.0.0.0/8
Origin AS: AS65000
ROA 通过 RPKI 验证 → 标记 Valid

未匹配 ROA → NotFound
匹配但 ASN 不同 → Invalid

5. MaxPrefix 与 Bogons

  • maximum-prefix 抑制邻居通告过多前缀
  • Bogon 前缀列表过滤未分配地址空间
  • 应同时在入向 / 出向都过滤

6. MD5 / GTSM 示例

neighbor 10.0.0.1 password BGPsecret123
neighbor 10.0.0.1 ttl-security hops 1

十四、BGP 收敛与震荡控制

1. 路由抖动 (Flapping)

  • Peer / 链路频繁 UP / DOWN
  • 每次状态变化触发大量 UPDATE
  • 全网路由器都要重算

2. Dampening

参数 默认
Half-Life (分钟) 15
Reuse 750
Suppress 2000
Max-Suppress-Time (分钟) 60
首次惩罚值 = 1000
每次重新抖动 × 2
到达 Suppress 阈值则抑制
Half-Life 时间惩罚减半
到 Reuse 阈值才再次通告

常用于:

  • 客户 Peer 抖动
  • 不稳定的 eBGP
  • iBGP 不建议启用(影响收敛)

3. BFD

neighbor 10.0.0.1 fall-over bfd
  • 毫秒级故障检测
  • 替代 KEEPALIVE + Hold Timer 的慢检测
  • 链路层需支持或进程级实现

4. Peer Group / Peer Template

批量配置,减少策略变更同步风险:

neighbor GROUP_PEERS peer-group
neighbor GROUP_PEERS remote-as 65001
neighbor GROUP_PEERS route-map SET_LP in
neighbor 10.0.0.1 peer-group GROUP_PEERS
neighbor 10.0.0.2 peer-group GROUP_PEERS

十五、IPv6 BGP (MP-BGP)

1. MP_REACH_NLRI / MP_UNREACH_NLRI

  • 通过 AFI / SAFI 携带 IPv6、VPNv4、VPNv6、FlowSpec 等
  • 使用属性 14 / 15 替代传统 NLRI
AFI = 2   IPv6
SAFI = 1  Unicast
AFI = 1   IPv4
SAFI = 4  MPLS Labels
AFI = 1
SAFI = 128 MPLS-labeled VPN

2. IPv6 Peer 配置

neighbor 2001:db8::1 remote-as 65001
address-family ipv6
 neighbor 2001:db8::1 activate
 neighbor 2001:db8::1 route-map IPv6-IN in

3. IPv6 AS_PATH 处理

  • AS_PATH 与 IPv4 共用格式
  • AS_CONFED_* 标识联盟子 AS
  • AS4_PATH / AS4_AGGREGATOR 兼容 4 字节 ASN

4. Next Hop

  • IPv6 邻居默认下一跳是链路本地地址(启用 next-hop-self 可改为全球地址)
  • RR 场景下 iBGP 中常用 next-hop-self

十六、BGP 与 IGP 交互

1. 互操作问题

  • BGP 依赖 IGP 提供 Next Hop 可达性
  • iBGP 全互联或 RR 需要 IGP 内部互通
  • 重发布 (Redistribution) 会引发路径选择与环路

2. 重发布场景

OSPF → BGP
  network 命令
  redistribute ospf X route-map OSPF-to-BGP

BGP → OSPF
  redistribute bgp X route-map BGP-to-OSPF

应避免双向重发布不收敛造成环路,使用 Tag、Metric、Route-Map 控制。

3. 默认路由

方式 用途
default-information originate iBGP / eBGP 下发默认路由
neighbor default-originate 向特定邻居通告默认路由
静态默认路由 + network 0.0.0.0 本地产生默认路由
conditional default-originate 依赖条件(如另一路由存在)

4. Next-Hop 递归

BGP 路由:10.0.0.0/8  NEXT_HOP=192.168.1.1
        │
        ▼
需要 IGP 提供 192.168.1.1/32 或接口内路由

Next-Hop 不可达时,BGP 路由虽收到但不可用,应关注:

  • IGP 是否覆盖了 Peer 的互联地址
  • 是否需要使用 next-hop-self
  • RR 上是否需要 next-hop-self

十七、常见默认值与调优

1. 定时器

参数 默认
Hold Time 180s
KEEPALIVE 60s
Connect Retry 120s
Advertisement Interval eBGP 30s / iBGP 0
Originate Interval 15s
MinASOrigination 15s

neighbor X timers 30 90 可同时修改 KEEPALIVE 与 Hold Time(30/90)。

2. 自动汇总

  • 部分厂商默认启用 Auto-Summary,但仅在 EIGRP / RIP 等 Classful 协议下显著
  • 现代部署强烈建议关闭:no auto-summary / no synchronization

3. 同步 (Synchronization)

  • 历史规则:iBGP 学到的路由不应在 IGP 同步前通告给 eBGP
  • 现代网络中通过全互联或 RR 解决,默认关闭即可
  • 早期 Cisco 平台默认开启,需手动关闭

4. 资源限制

限制 典型值
每 Peer 最大前缀 部署上限 80 万—200 万
全局 BGP 容量 平台 / IOS / 内存决定
Update 组 共享同一 out-policy 的 Peer

十八、抓包分析

1. tcpdump

# 抓 BGP 报文
sudo tcpdump -i any -n -s 0 -w bgp.pcap 'tcp port 179'

# 同时显示内容
sudo tcpdump -i any -n -vvv 'tcp port 179'

2. Wireshark 过滤器

bgp
bgp.type == 2                        UPDATE
bgp.type == 1                        OPEN
bgp.type == 4                        KEEPALIVE
bgp.type == 5                        ROUTE-REFRESH
bgp.type == 3                        NOTIFICATION
bgp.update.nlri                      NLRI
bgp.update.withdrawn                 Withdrawn Routes
bgp.as_path                                           AS_PATH
bgp.community                                        COMMUNITY
bgp.next_hop                                          NEXT_HOP
bgp.mp_reach_nlri_ipv6_prefix                        IPv6 NLRI

3. BGP 表导出

R1# show ip bgp
R1# show ip bgp 10.0.0.0/8
R1# show ip bgp neighbors 10.0.0.1
R1# show ip bgp neighbors 10.0.0.1 routes

4. bgpdump / RIPE RIS

# RIPE RIS 数据
bgpdump -m rib.20250701.0000.gz
# BIRD show 协议
birdc show route
birdc show protocols all bgp1

5. 关键字段

字段 分析价值
BGP Identifier Router-ID 与预期是否一致
AS_PATH 是否包含预期 AS,是否回环
NEXT_HOP 是否被 next-hop-self 改写
ORIGIN 来源是否标注正确
Community 策略是否生效
LocalPref iBGP 内策略影响
MED 入向影响

十九、Linux 与开源工具

1. BIRD

router id 1.2.3.4;

protocol bgp my_peer {
  local as 65001;
  neighbor 10.0.0.1 as 65002;
  hold time 90;
  keepalive time 30;
  ipv4 {
    import filter { ... };
    export filter { ... };
  };
}

常用命令:

birdc show route
birdc show route 10.0.0.0/8
birdc show protocols
birdc reload

2. FRR (Quagga 继任)

router bgp 65001
 neighbor 10.0.0.1 remote-as 65002
 address-family ipv4 unicast
  network 10.10.0.0/16
  neighbor 10.0.0.1 activate
  neighbor 10.0.0.1 route-map AS65002-IN in
 exit-address-family

常用命令:

vtysh -c 'show ip bgp'
vtysh -c 'show ip bgp summary'
vtysh -c 'show ip bgp neighbors'

3. GoBGP / ExaBGP

  • 用于控制平面测试、监控注入、Route Server
  • ExaBGP 通过 JSON 配置注入路由,适合网络测试
  • GoBGP 常用于 SDN 与编排系统

4. bgpq4 / bgpq3

bgpq4 -h whois.radb.net AS65001

根据 IRR 数据库自动生成 prefix-list / filter。

5. Looking Glass / Route Server

  • 与 IRR / RPKI 集成
  • 显示 ASN、AS-SET、ROA 等信息
  • 常用工具:bgp.tools、RouteViews、PeeringDB

二十、设备命令

1. Cisco IOS / IOS-XE

show ip bgp
show ip bgp summary
show ip bgp neighbors
show ip bgp neighbors 10.0.0.1
show ip bgp neighbors 10.0.0.1 advertised-routes
show ip bgp neighbors 10.0.0.1 received-routes
show ip bgp path 10.0.0.0 255.0.0.0
show ip bgp regexp _65001_
show ip bgp community no-export
show ip bgp dampening dampened-paths
show ip bgp update-group
debug ip bgp 10.0.0.1 updates

2. Cisco Nexus

show bgp ipv4 unicast
show bgp ipv6 unicast
show bgp neighbors
show bgp community

3. 华为 VRP

display bgp peer
display bgp routing-table
display bgp routing-table 10.0.0.0 8
display bgp path 10.0.0.0 255.0.0.0
display bgp community
display bgp network
display bgp update-peer

4. H3C

display bgp peer
display bgp routing-table
display bgp routing-table statistic

5. Juniper JunOS

show bgp summary
show route protocol bgp
show route protocol bgp 10.0.0.0/8
show bgp neighbor
show bgp neighbor 10.0.0.1
show bgp group
show policy

二十一、BGP 故障排查

1. 分层流程

1. 物理层 / 链路 / 接口状态
2. IGP / Next Hop 可达性
3. TCP 179 可达性(ACL / 防火墙)
4. BGP 配置(AS 号、Peer IP、update-source)
5. 能力协商(Capability / NLRI)
6. 路由策略(route-map / prefix-list)
7. 资源与稳定(Dampening / BFD / MaxPrefix)
8. 跨厂商验证(抓包 / show 命令 / RPKI)

2. 邻居无法建立

  • AS 配置不一致
  • 邻居 IP 写错
  • update-source 不一致
  • TTL 不匹配(多跳 / ebgp-multihop)
  • MD5 密码不一致
  • ACL 阻挡 TCP 179
  • Peer 两端能力不支持(4 字节 ASN、Add-Path)

3. Established 但未收到路由

  • 对端没有 network 或重发布
  • 出口策略过滤了
  • 入口策略拒绝
  • 最大前缀触发
  • Dampening 抑制

4. Established 但未通告出去

  • 本地策略过滤
  • 对端 inbound 拒绝
  • next-hop-self 未启用,IGP 不可达
  • iBGP 全互联 / RR 配置缺失

5. 路由震荡

  • 链路不稳定
  • Peer 频繁重置
  • 缺少 BFD
  • Dampening 阈值过于敏感

6. 收到 AS_PATH 回环

  • 自身 AS 出现:检查意外通告
  • 联盟子 AS 出现:检查 Confederation Path
  • 双向发布或配置错误

7. 选路不符合预期

  • 检查 Weight / LocalPref
  • 检查 AS_PATH / Prepend
  • 检查 MED / Origin
  • 检查 IGP Metric
  • 检查 eBGP vs iBGP 优先级

8. 路由被 RPKI 判定为 Invalid

  • 检查 ROA 与实际 Origin 是否一致
  • 运营商或客户通告了不属于 AS 的前缀
  • AS_PATH Manipulation 引发 Invalid

9. RR 故障

  • CLUSTER_LIST 长度异常
  • ORIGINATOR_ID 不一致
  • 客户端 Full-Mesh 残留

10. 常见问题对照

现象 常见原因 排查重点
邻居 Active IP/AS/TCP 问题 show tcp, ACL, routing
邻居 OpenSent 参数不匹配 Hold Time, Capability
收到路由不优 MED/LP/Origin show ip bgp prefix
AS_PATH 回环 双向发布 filter, RR 拓扑
eBGP iBGP 选择不一致 MED/LP/Weight Inbound Policy
路由延迟大 IGP 收敛 / Dampening Timers, BFD
部分 Peer 不可达 单点路径 IGP, BFD, 协议状态
RPKI Invalid ROA 不匹配 RPKI 验证器
内存 / CPU 占用高 Prefix 数量大 Dampening, max-prefix

二十二、BGP 设计建议

1. AS 编号规划

  • 公有 / 私有 ASN 区分使用
  • 客户 ASN 长度与可见性
  • 4 字节 ASN 兼容
  • 联盟子 AS 使用私有 ASN

2. iBGP 拓扑

场景 拓扑
小型网络 iBGP Full-Mesh
中等规模 路由反射器 RR + Client
大规模 RR Cluster + Hierarchical RR
超大规模 联盟 + 多层 RR

3. eBGP 接入

  • 与多个 Transit Provider 多线接入
  • 与多个 Peer 直连(IXP)
  • 使用 Peer Group 降低复杂度
  • 监控 AS_PATH / RPKI / BGP MON

4. 安全策略

  • 强制 MD5 / TCP-AO
  • TTL-Security 限制 eBGP Peer
  • MaxPrefix 限制邻居通告数量
  • 入口 / 出口双向过滤
  • RPKI 验证部署 (Origin Validation)
  • 定期检查 IRR 注册

5. 监控指标

指标 意义
BGP Peer 状态变化 稳定性
Prefix 数量 容量与威胁
UPDATE 速率 抖动检测
Dampening 命中 异常 Peer
RPKI Invalid 数量 劫持 / 错误通告
Hold Time 接近超时 链路质量
CPU / 内存 控制平面负载
MaxPrefix 触发 邻居异常
路径属性变化 策略生效

6. 高可用设计

  • 同一 Peer 多条链路(BFD)
  • 同一 AS 多 RR Cluster
  • 跨地理位置 iBGP 多路径
  • eBGP 多 Transit 出口
  • 必要时使用 Add-Path 提升多路径利用率

二十三、eBGP 与 iBGP 对比

维度 eBGP iBGP
对端 AS 不同 相同
默认 TTL 1 255
默认 Next Hop 发送方接口 沿用 / next-hop-self
AS_PATH 防环 否(水平分割)
LocalPref 不携带 携带
MED 通告 在 AS 内部比较
需要全互联 默认需要(RR 例外)
Dampening 常用 少见
主要场景 AS 间互连 AS 内部传递
大前缀限制 严格 较宽松

二十四、MP-BGP 与地址族扩展

1. 常见 AFI / SAFI

AFI SAFI 含义
1 1 IPv4 Unicast
1 2 IPv4 Multicast
1 4 IPv4 Labeled (MPLS)
1 128 IPv4 VPN (VPNv4)
1 132 IPv4 FlowSpec
2 1 IPv6 Unicast
2 4 IPv6 Labeled
2 128 IPv6 VPN (VPNv6)

2. 能力协商

OPEN 报文携带 Capability,常见:

Capability 作用
Multiprotocol Extensions 启用 MP_REACH_NLRI
Route Refresh 支持路由刷新
Outbound Route Filtering (ORF) 出口过滤前缀
4-byte ASN 4 字节 AS
Add-Path 多条等价路径通告
Graceful Restart 控制平面重启数据不中断
Enhanced Route Refresh 增强路由刷新
Long-lived Graceful Restart (LLGR) 长时 GR

3. 跨 AFI / SAFI 路由

VPNv4 路由格式:

RD + IPv4 Prefix
例:65001:100 || 10.0.0.0/8

RT 与 SOO 等扩展团体携带在 MP_REACH_NLRI 路径属性中。


二十五、核心要点速记

  • BGP 是路径向量协议,基于 TCP 179
  • eBGP 防环依靠 AS_PATH,iBGP 防环依靠水平分割
  • OPEN 协商 AS、Hold Time、Router-ID 与 Capability
  • KEEPALIVE 默认 60 秒发一次,Hold 默认 180 秒
  • UPDATE 同时携带 NLRI、撤销路由和路径属性
  • ROUTE-REFRESH 用于策略变更后刷新
  • NOTIFICATION 表示错误并拆链
  • Well-known Mandatory 属性必须识别且随路由传递
  • ORIGIN 优先级:IGP > EGP > Incomplete
  • LocalPref 影响 AS 内出向选路,默认 100,越大越优
  • MED 影响 AS 间入向选路,默认 0,越小越优
  • AS_PATH 长度是最常见策略工具,Prepend 可人为加长
  • Weight 是 Cisco 私有的本地优先级
  • 选路顺序:Weight > LocalPref > 本地产生 > AS_PATH > Origin > MED > eBGP/iBGP > IGP Metric
  • 团体属性用于 AS 间协调,标准 32 位、扩展 8 字节、大 12 字节
  • no-export/no-advertise/no-export-subconfed 控制通告范围
  • iBGP 默认全互联,RR 用 ORIGINATOR_ID + CLUSTER_LIST 防环
  • 联盟使子 AS 之间使用类似 eBGP 的防环
  • MaxPrefix 防止邻居通告过多导致资源耗尽
  • Dampening 抑制路由抖动,常用于 eBGP
  • BFD 提供毫秒级故障检测,替代慢 KEEPALIVE
  • MP-BGP 通过 AFI/SAFI 扩展支持 IPv6 / VPN
  • GTSM (TTL-Security) 防止远程伪造 eBGP 报文
  • MD5 / TCP-AO 提供 TCP 完整性保护
  • RPKI 用于 Origin Validation,可识别劫持
  • BGP 不主动发现邻居,必须静态指定 Peer IP
  • BGP 不依赖 IGP 收敛路径,但需 IGP 提供 Next Hop 可达
  • IGP 与 BGP 之间重发布易形成环路,应使用 Tag
  • 常见故障:邻居 Active、OpenSent、Hold Expired、Invalid Origin、eBGP/iBGP 选路不一致
  • 排障先看 Peer 状态,再查 Capability、Policy、Next Hop 可达性
  • RR / 联盟 / Add-Path 是扩展 iBGP 的关键手段
  • 生产环境建议部署 RPKI + MaxPrefix + Dampening + BFD
  • 运营商应双向过滤,配合 IRR 与 ROA 维持全球路由表健康