一、BGP 基础概念
1. 网络分类与协议定位
- IGP(内部网关协议):用于自治系统(AS)内部路由,如 RIP、OSPF、EIGRP,关注选路效率、收敛速度和资源占用。
- EGP(外部网关协议):用于 AS 之间的路由传递,BGP 是主流 EGP 协议,负责跨 AS 路由信息交换。
2. 自治系统(AS)
- 定义:由单一组织管理的网络(含设备),通过AS 号唯一标识。
- 编号规则:
- 传统 16 位 AS 号范围:0-65535(如中国骨干网 AS 号为 4134)。
- 扩展 32 位 AS 号:解决 16 位 AS 号耗尽问题,由 IANA 管理。
3. BGP 版本特性
- BGPv4:传递 IPv4 路由,是最常用版本。
- BGPv4+:支持 IPv6 等多网络环境,适应复杂拓扑。
二、BGP 协议核心特性
1. 路由协议类型
- 路径矢量路由协议:以 AS 为单位传递路由,下一跳为发送设备,不依赖算法计算路径,仅传递路由表中已存在的路由。
- 无类别路由协议:路由条目携带子网掩码,支持 CIDR(无类域间路由)。
2. 可靠性与可控性
- 可靠性:
- 基于 TCP(端口 179)传输,通过确认机制保证报文可靠交付,无需周期更新。
- 唯一使用 TCP 的路由协议,其他 IGP 多基于 UDP 或跨层封装(如 OSPF)。
- 可控性:通过路径属性(如 AS_PATH、本地优先级 LP、MED 等)干预选路,解决 AS 间路由冗余和策略控制问题。
三、BGP 对等体(邻居)机制
1. 对等体类型与建邻规则
- EBGP 对等体:
- 位于不同 AS,需直连建立(默认 TTL=1,仅一跳),路由传递时携带 AS_PATH 防环。
- 例:AS100 与 AS200 的边界设备通过直连接口建立 EBGP 邻居。
- IBGP 对等体:
- 同一 AS 内,支持非直连建邻(TTL=255),推荐使用环回接口(LoopBack)建立逻辑连接,需确保 IGP 可达。
- 例:AS 内部设备通过环回接口 IP 建立 IBGP 邻居,需配置
connect-interface
指定更新源。
2. 建邻过程与状态机
- TCP 连接建立:
- 双方发起 TCP 三次握手,建立两个连接,最终保留 Router ID 较小者发起的连接(Router ID 生成规则与 OSPF 一致,需唯一)。
- Open 报文协商:
- 携带版本、AS 号、保活时间(默认 180 秒,协商取最小值)、Router ID 等参数,AS 号不一致会导致建邻失败。
- Keepalive 确认与保活:
- 周期发送 Keepalive 报文(默认 60 秒),确认参数协商成功并维持连接活性。
四、BGP 报文类型与功能
报文类型 | 功能描述 | 关键字段 / 特性 | 发送时刻 |
---|---|---|---|
Open | 协商建邻参数,建立对等体关系 | 版本、AS 号、保活时间、Router ID、可选参数(认证、路由刷新) | BGP TCP连接建立成功之后 |
Update | 发布路由更新(新增 / 撤销路由),携带路径属性和可达网络信息 | 撤销路由列表、路径属性(AS_PATH、MED 等)、NLRI(网络层可达信息) | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Keepalive | 确认 Open 参数,周期保活(默认 60 秒),维持对等体连接 | 无有效负载,仅公共头部 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Notification | 报告错误(如参数不匹配、路由无效),终止对等体关系 | 错误代码、子代码、错误数据 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 请求对等体重新发送路由(需双方支持路由刷新功能) | 用于策略变更后同步路由,减少人工干预 | 当路由策略发生变化时,触发请求对等体重新 通告路由 |
open报文---建立BGP对等体
update报文--更新报文用来承载BGP路由信息的报文
公共头部格式:
- Marker(16 字节):用于认证(若启用),通常为全 0 或特定值。
- Length(2 字节):报文总长度(含头部)。
- Type(1 字节):标识报文类型(1-5 分别对应 Open 到 Route-refresh)。
五、BGP 工作流程与状态机
1. 状态机阶段与迁移
BGP 建邻通过 6 种状态机实现:
Peer状态名称 | 用途 |
---|---|
Idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接 |
Active | TCP连接没建立成功,反复尝试TCP连接 |
OpenSent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立 |
OpenConfirm | 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包 |
Established | 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
Idle--空闲状态:在指定建立对等体对象时,监测设备是否存在路由,如果存在那么进入下一 个状态并准备建立三次握手,如果没有路由,那么停留在idle状态
2. 完整工作流程
- 路由可达性:依赖 IGP(如 OSPF、静态路由)确保 BGP 设备间 IP 连通,为 TCP 连接建立的前提。
- 对等体建立:通过 TCP 三次握手和 Open/Keepalive 报文完成参数协商,生成邻居表。
- 路由交换:
- 使用 Update 报文传递路由,携带 AS_PATH、MED 等属性,存储于 BGP 路由表。
- 仅传递最优路由(默认无负载均衡),路由表中标记 “>” 为优选路由。
- 选路与安装:根据路径属性筛选最优路由,加载到全局路由表(需下一跳可达)。
- 连接维护:周期发送 Keepalive(默认 60 秒);路由变化时触发 Update,故障时发送 Notification 终止连接。
六、路由黑洞与防环机制
1. 路由黑洞问题与解决方案
- 问题本质:AS 内部非 BGP 设备无路由,导致控制平面可达但数据平面不可达(如 IGP 与 BGP 路由不一致)。
- 解决方案:
- 全互联 IBGP:AS 内所有设备两两建立 IBGP 邻居(适用于小规模 AS)。
- 路由反射器(RR):通过反射器减少邻居数量,Client 与非客户机制优化路由传递(反射规则:Client→全反射,非客户→仅反射给 Client)。
- MPLS(多协议标签交换):通过标签转发绕过 IGP 路由缺失问题。
- 重发布 IGP 到 BGP:将 AS 内路由注入 BGP,但需结合路由策略过滤无关路由。
2. 防环机制
- EBGP 防环:
- AS_PATH 属性:路由每经过一个 AS,其 AS 号添加到路径列表,接收方若发现本地 AS 号在列表中则拒绝路由(核心防环手段)。
- AS_PATH 属性:路由每经过一个 AS,其 AS 号添加到路径列表,接收方若发现本地 AS 号在列表中则拒绝路由(核心防环手段)。
- IBGP 防环:
- 水平分割原则:从 IBGP 邻居学到的路由不转发给其他 IBGP 邻居。
- 路由反射器辅助防环:通过Originator ID(反射源 RID)和Cluster List(反射器 RID 列表)避免环路。
- 联邦防环:将大 AS 划分为小联邦 AS(私有 AS 号 64512-65535),内部使用 EBGP 规则防环,外部统一为公共 AS 号。
七、路由发布与聚合
1. 路由发布方式
- Network 命令:
- 精确发布路由表中存在的网段(需掩码完全匹配),Origin 属性为 “i”(IGP)。
- 例:
[r1-bgp] network 1.1.1.0 24
发布直连路由,要求路由表中存在该精确路由。
- 重分布(Import-route):
- 引入 IGP 路由(如 OSPF)到 BGP,Origin 属性为 “?”(Incomplete),需结合路由策略(如 IP 前缀列表、Route-policy)过滤。
- 例:
[r2-bgp] import-route ospf 1 route-policy filter
引入 OSPF 路由并过滤非目标网段。
2. 路由聚合
- 自动聚合:
- 仅对重分布路由有效,聚合成主类网络(如 192.168.0.0/16),生成空接口路由防环,但灵活性低,易产生黑洞路由,默认不推荐。
- 手工聚合:
- 自定义聚合网段和掩码,支持抑制明细路由(
detail-suppressed
)和保留 AS_PATH(as-set
)。 - 例:
[r1-bgp] aggregate 172.16.0.0 22 detail-suppressed as-set
聚合路由并抑制明细,保留 AS 路径防止环路。
- 自定义聚合网段和掩码,支持抑制明细路由(
八、路径属性与选路规则
1. 关键路径属性详解
属性名称 | 类型 | 传递范围 | 选路逻辑 | 典型应用场景 |
---|---|---|---|---|
Preferred-Value(PV) | 本地属性 | 不传递 | 值越大越优(华为私有,仅影响本地选路) | 单设备多路径选路策略 |
Local Preference(LP) | 公认强制 | IBGP 内传递 | 值越大越优(AS 内出口策略控制) | AS 内统一路由出口优先级 |
MED(多出口鉴别) | 可选非过渡 | EBGP 间传递 | 值越小越优(影响相邻 AS 选路) | 控制相邻 AS 进入本 AS 的路径 |
AS_PATH | 公认强制 | 所有对等体 | 路径越短越优,防环核心属性 | 选路时优先选择 AS 跳数少的路径 |
Origin | 公认强制 | 所有对等体 | 优先级:i(IGP)> e(EGP)> ?(Incomplete) | 路由来源可信度判断 |
2. 选路规则优先级(自上而下)
- 丢弃下一跳不可达的路由:BGP 路由表中 “* valid” 表示可用,下一跳不可达则无效。
- 比较 PV 值:华为设备本地属性,值大优先(如
[r4-bgp] peer 3.3.3.3 preferred-value 100
)。 - 比较 LP 值:AS 内统一策略,值大优先(如
[r3-bgp] default local-preference 200
全局设置)。 - 本地始发路由优先:优先级顺序为手工聚合 > 自动聚合 > Network > 重分布。
- AS_PATH 最短优先:通过策略添加 AS 号(如
apply as-path 123 additive
)延长路径,引导选路。 - Origin 类型优先:i > e > ?,可通过策略修改(如
apply origin igp
将路由来源标记为 IGP)。 - MED 值最小优先:仅在相同 AS 的 EBGP 邻居间比较,跨 AS 比较需配置
compare-different-as-med
。 - EBGP 路由优先于 IBGP:相同路由来源时,EBGP 路由优先级更高。
- IGP 度量值最小优先:到下一跳的 IGP 路径开销越小越优(如 OSPF Cost)。
- Cluster List 最短优先:路由反射器环境中,簇列表越短越优,避免环路。
- Router ID 或对等体 IP 较小者优先:当所有属性相同时,取设备标识较小者。
起源者ID--在一个AS内部反射路由的源头设备的RID--当设备产生反射路由时如果没有起源者ID 那么将添加该属性,如果反射器反射路由时该路由已经存在起源者ID那么将仅反射
簇列表--AS_path---每经过一个反射器的反射均会添加该反射器的RID(簇ID)到簇列表中,之 后设备一旦收到一条IBGP路由时,如果路由携带的簇ID和自身设备的簇ID一致,那么将拒绝 学习该路由
九、BGP 基础配置示例
1. 启动 BGP 与基本参数配置
[r1] bgp 100 # 启动BGP,指定AS号为100
[r1-bgp] router-id 1.1.1.1 # 配置Router ID(需全局唯一)
2. 建立 EBGP 对等体(直连)
[r1-bgp] peer 12.0.0.2 as-number 200 # 对端IP为12.0.0.2,AS号为200
3. 建立 IBGP 对等体(环回接口,非直连)
[r3-bgp] peer 4.4.4.4 as-number 100 # 对端Router ID为4.4.4.4,同属AS100
[r3-bgp] peer 4.4.4.4 connect-interface LoopBack0 # 指定更新源为环回接口
[r3-bgp] peer 4.4.4.4 ebgp-max-hop 255 # 允许非直连建邻(默认TTL=1,需调整)
4. 发布路由与策略配置
- Network 发布精确路由:
[r1-bgp] network 1.1.1.0 24 # 发布路由表中存在的1.1.1.0/24网段
- 重分布 IGP 路由并过滤:
[r2] ip ip-prefix filter permit 3.3.3.0/24 # 抓取目标网段 [r2] route-policy filter permit node 10 # 创建路由策略 [r2-route-policy] if-match ip-prefix filter # 匹配目标网段 [r2-bgp] import-route ospf 1 route-policy filter # 引入OSPF路由并应用策略
5. 路由反射器(RR)配置
[r3-bgp] peer 2.2.2.2 reflect-client # 将2.2.2.2设为客户端,允许反射路由
6. 联邦(Confederation)配置
[r2] bgp 64512 # 启动联邦内AS号(私有AS号)
[r2-bgp] confederation id 2 # 声明所属公共AS号为2
[r2-bgp] peer 3.3.3.3 as-number 64512 # 联邦内IBGP邻居使用私有AS号建邻
十、常见问题与解决方案
- 下一跳不可达:
- 原因:IBGP 环境中,路由下一跳为对端环回接口 IP,若 IGP 未通告该路由则不可达。
- 解决:配置
[r2-bgp] peer 3.3.3.3 next-hop-local
,将下一跳修改为本地接口 IP。
- IBGP 全互联规模问题:
- 原因:AS 内设备较多时,全互联邻居数量呈平方级增长(N*(N-1)/2)。
- 解决:引入路由反射器(RR)或联邦,减少邻居数量,优化拓扑。
- 聚合路由环路:
- 原因:手工聚合未保留 AS_PATH,导致路由环路风险。
- 解决:聚合时添加
as-set
参数(如aggregate ... as-set
),继承明细路由的 AS 路径。