0. 课件来源
BGP(Border Gateway Protocol,边界网关协议)是互联网的**"骨干路由协议"** ——IGP(OSPF/IS-IS)负责 AS 内部可达,BGP 负责 AS 之间的路由传递。本节从 BGP 的设计思想出发,讲解邻居建立的全流程。
1. BGP 为什么存在?
1.1 AS 之间运行 IGP 的问题
AS 之间用 IGP(OSPF/IS-IS)有什么问题?
单链路:默认路由即可(但单点故障)
多链路:需要多点双向注入 → 环路/次优 → tag+过滤/preference 配置量巨大
IGP 的设计目标是 AS 内可达,不适合跨 AS 的场景。
→ 需要一个专门为 AS 间路由设计的协议 → BGP1.2 路由协议家族
| 按算法分类 | 代表协议 | 特点 |
|---|---|---|
| DV(距离矢量) | RIP | 传路由,资源小,可能环路和次优 |
| PV(路径矢量) | BGP | 传路由+路径属性,按 AS 防环 |
| LS(链路状态) | OSPF、IS-IS | 最短无环,资源消耗大 |
| 按 AS 范围 | 协议 |
|---|---|
| IGP(内部网关协议) | RIP、OSPF、IS-IS、EIGRP |
| EGP(外部网关协议) | BGP |
1.3 AS(自治系统)
定义:在同一个管理域下,运行相同 IGP 的路由器集合。
AS 是逻辑概念:小到一个公司,大到一个国家或洲
AS 号:2 字节(1-65535)或 4 字节(BGPv4 支持)
公有 AS 号必须全球唯一2. BGP 核心特性
| 特性 | 说明 |
|---|---|
| 运行在 TCP 上 | 端口 179,单播建立邻居,需先有 TCP 连接(IGP 支撑) |
| 稳定性 | 长计时器避免路由抖动;路由惩罚机制 |
| 丰富属性 | 10 个属性,13 条选路原则,选路灵活 |
| 按 AS 跳数 | AS-by-AS,一个 AS 算一跳 |
3. BGP 的三张表与报文
3.1 三张表
1. Peer 表:邻居(对等体)表 ← dis bgp peer
2. BGP Routing Table:BGP 路由表 ← dis bgp routing-table
3. RIB(全局路由表)3.2 五种报文
| 报文 | 作用 |
|---|---|
| Open | 建立邻居,协商参数(AS号、Router-ID、hold-time、能力) |
| Keepalive | 邻居保活(默认 60s) |
| Update | 通告/撤销路由,携带 NLRI + 属性 |
| Notification | 报错、断开邻居 |
| Route-Refresh | 请求对方重新发送路由(能力协商后) |
3.3 Update 报文结构
Update = NLRI(Network Layer Reachability Information)+ Path Attributes
NLRI:路由网段(Prefix + Mask)
Path Attributes:属性列表(AS-PATH、Next-Hop、Local-Pref、MED、Community…)4. EBGP 与 IBGP
| 对比项 | EBGP | IBGP |
|---|---|---|
| 定义 | 不同 AS 间的 BGP 邻居 | 同一 AS 内的 BGP 邻居 |
| 修改下一跳 | 默认修改 | 默认不修改(保持最优路径下一跳) |
| 防环机制 | AS-PATH(收到自己 AS 号的路由丢弃) | IBGP 水平分割(从 IBGP 学来的不传其他 IBGP) |
| TTL | EBGP=1(直连保护) | IBGP=255 |
| 非直连 | 需 peer x.x.x.x ebgp-max-hop | 需 peer x.x.x.x connect-interface LoopBack0 |
💡 IBGP 水平分割的后果
从 IBGP peer 学到的路由不能再传给其他 IBGP peer → 导致路由传递不过去 → 需要全互联、RR 或联邦解决(详见第 3 篇)。
5. 邻居状态机
┌─────────┐
│ Idle │ 初始状态 / 报错后返回
└────┬────┘
│ 检查是否有路由去往 Peer IP
┌────▼────┐
│ Connect │ TCP 3 次握手发起方(计时器 32s)
│ Active │ TCP 3 次握手接收方
└────┬────┘
│ TCP 连接建立
┌────▼────┐
│OpenSent │ 收到 Open 包,检查参数
└────┬────┘
│ ① AS 号一致 ② hold-time 协商 ③ RID 不冲突
│ ④ 协议能力匹配(AFI/SAFI)⑤ Route-Refresh 能力一致
│ ⑥ 4 字节 AS 号能力匹配
┌────▼────┐
│OpenConfirm│ 发送 Keepalive,等待对方 Keepalive
└────┬────┘
│ 收到 Keepalive
┌────▼────┐
│Established│ ✅ 邻居建立,可交换路由
└─────────┘5.1 Open 包中协商的关键参数
| 参数 | 说明 |
|---|---|
| AS 号 | 必须与 peer 配置的 AS 号一致,否则 notification |
| hold-time | 协商取两端较小值;keepalive ≤ 1/3 hold |
| Router-ID | 冲突则 notification(华为自动恢复) |
| Capability | AFI/SAFI(协议族能力)、Route-Refresh、4 字节 AS 号 |
5.2 常见 AFI/SAFI
| 协议 | AFI | SAFI |
|---|---|---|
| IPv4 单播 | 1 (ipv4) | 1 (unicast) |
| IPv4 组播 | 1 (ipv4) | 2 (multicast) |
| VPNv4 | 1 (ipv4) | 128 (vpn) |
| IPv6 单播 | 2 (ipv6) | 1 (unicast) |
| EVPN | 25 (layer2) | 70 (evpn) |
6. IBGP 邻居配置
6.1 直连 IBGP
AR2:
bgp 234
router-id 2.2.2.2
peer 10.1.23.3 as-number 234
AR3:
bgp 234
router-id 3.3.3.3
peer 10.1.23.2 as-number 2346.2 非直连 IBGP(Loopback 邻居)
多链路场景下,直连 IBGP 需要每条链路都建邻居 → TCP 连接太多。改用 Loopback 建邻居:一条 TCP 连接,物理链路冗余后自动切换。
AR2:
bgp 234
router-id 2.2.2.2
peer 10.1.4.4 as-number 234
peer 10.1.4.4 connect-interface LoopBack0 # 用 Loopback 作为 TCP 源 IP
AR4:
bgp 234
router-id 4.4.4.4
peer 10.1.2.2 as-number 234
peer 10.1.2.2 connect-interface LoopBack0⚠️ connect-interface 的原理
- BGP 建立 TCP 连接时,检查对端源 IP 是否为 peer 配置的 IP(源检测)
- 不用
connect-interface→ TCP 源 IP = 出接口 IP → 可能与 peer 配置不一致 → 被 RST 拒绝 - 建议两边都配
connect-interface,确保双向都能建立 TCP
7. EBGP 邻居配置
7.1 直连 EBGP
AR2:
bgp 234
router-id 2.2.2.2
peer 10.1.23.3 as-number 70000
AR3:
bgp 70000
router-id 3.3.3.3
peer 10.1.23.2 as-number 2347.2 非直连 EBGP(TTL 问题)
EBGP 默认 TTL=1,非直连时数据包经过中间路由器 TTL 会减到 0 → 邻居建不起来。
AR2:
bgp 234
peer 10.1.4.4 as-number 80000
peer 10.1.4.4 connect-interface LoopBack0
peer 10.1.4.4 ebgp-max-hop # 默认 255,修改 EBGP TTL8. BGP 三种组网
8.1 组网一:全互联(Full Mesh)
AS 234 内所有运行 BGP 的路由器两两建立 IBGP 邻居
优点:路由和数据转发都没有问题
缺点:n 台设备需要 n(n-1)/2 条 IBGP 连接,资源消耗大8.2 组网二:RR(Route Reflector)
通过路由反射器打破 IBGP 水平分割,详见第 3 篇
适用于互联网骨干网(IPv4/IPv6)8.3 组网三:MPLS VPN / GRE 隧道
部分互联场景:AR2 和 AR4 运行 BGP,但 AR3 不运行
→ 数据平面出现"黑洞"(AR3 没有 BGP 路由)
历史方案:BGP 同步(将 BGP 注入 IGP)— 因路由膨胀已废弃
现代方案:MPLS(LSP 动态隧道)或 GRE 隧道💡 BGP 同步的历史
BGP 同步(Sync)指"BGP 路由同时在 IGP 中存在时才算最优"。目的是确保没有数据黑洞。但随着互联网路由表膨胀(几十万条),把 BGP 全部注入 IGP 是不可行的 → 同步机制已取消。现代方案用 MPLS 或 RR 解决。
9. 易混淆点与考前速记
| 对比项 | 结论 |
|---|---|
| BGP 本质 | PV(路径矢量),运行在 TCP 179 上 |
| EBGP vs IBGP | EBGP:不同 AS,修改下一跳,AS-PATH 防环,TTL=1 |
| IBGP:同 AS,不修改下一跳,水平分割防环,TTL=255 | |
| 邻居 5 态 | Idle → Connect/Active → OpenSent → OpenConfirm → Established |
| Open 协商 | AS 号、hold-time(取最小)、RID(不冲突)、AFI/SAFI、能力 |
| connect-interface | 指定 TCP 源 IP,非直连 IBGP 必配(建议两边) |
| ebgp-max-hop | 修改 EBGP TTL,非直连 EBGP 必配 |
| IBGP 水平分割 | IBGP 学到的不传其他 IBGP → 需全互联/RR/联邦 |
| BGP 同步 | 历史机制,已废弃 |
考前速记 8 条:
BGP 是路径矢量(PV),TCP 179,EGPEBGP 改下一跳 + AS-PATH 防环;IBGP 不改下一跳 + 水平分割防环5 态:Idle→Connect/Active→OpenSent→OpenConfirm→EstablishedOpen 协商:AS 号、hold-time、RID、AFI/SAFI、能力IBGP 非直连:connect-interface 两边配EBGP 非直连:ebgp-max-hop + connect-interfaceIBGP 水平分割 → 全互联 / RR / 联邦BGP 同步已废弃;现代用 MPLS/RR 解决数据黑洞
🤖 AI 伴学
让 AI 帮你建立 BGP 的直觉理解:
"请把 BGP 想象成'国家之间的外交官':每个 AS 是一个国家,BGP 是外交官,TCP 是加密通信专线(可靠)。IGP(OSPF/IS-IS)在国内传递邮件,BGP 在国家间传递外交照会。EBGP 是跟邻国大使对话——出于安全距离(TTL=1)必须面对面;IBGP 是跟本国其他外交官对话——默认只能传一次,不能'传话'(水平分割),所以要么全员互相认识(全互联),要么设一个外交部发言人(RR 路由反射器)。Open 包就像外交官的证件交换:确认国籍(AS 号)、确认身份(Router-ID)、确认会谈话题(AFI/SAFI 能力)。"
