BGP中的Next_Hop




1. 核心思想(记住这一句就够了)
IBGP 默认不改下一跳,是为了让内部路由器知道"真正的出口在哪"。
但前提是:内部路由器得能"找到"那个出口地址。
找不到怎么办?用next-hop-local把下一跳改成"自己人"。
2. 用一个图讲清楚
AS100 AS200 AS300
┌──────┐ ┌───────────┐ ┌──────┐
│ R4 │────EBGP───────│ R1 │────IBGP───────│ R3 │────EBGP───────│ R5 │
└──────┘ 10.1.14.4 └─────┬─────┘ 1.1.1.1 └──────┘ └──────┘
│
┌─┴─┐
│R2 │ (OSPF 内部)
└───┘
问题出在哪
| 步骤 | 发生什么 | 下一跳是谁 |
|---|---|---|
| 1 | R4 告诉 R1 路由 4.4.4.0/24 |
10.1.14.4 (R4 的接口) |
| 2 | R1 传给 R3 (IBGP) | 默认不改,还是 10.1.14.4 |
| 3 | R3 查路由表找 10.1.14.4 |
找不到! (因为这是外部地址,OSPF 里没有) |
| 4 | 结果 | 路由无效,流量丢弃 ❌ |
怎么修?
在 R1 上配一句:peer R3 next-hop-local
| 步骤 | 发生什么 | 下一跳是谁 |
|---|---|---|
| 1 | R4 告诉 R1 路由 4.4.4.0/24 |
10.1.14.4 |
| 2 | R1 传给 R3 (IBGP) | 改成 R1 自己 1.1.1.1 |
| 3 | R3 查路由表找 1.1.1.1 |
找到了! (OSPF 里有 R1 的地址) |
| 4 | 结果 | 路由有效,流量正常 ✅ |
3. 为什么默认不改?(一句话)
因为有时候"不改"更好 ------如果内部路由器能直接找到原始出口,就可以选最近的路出去,不用绕路。
但现网中,为了简单稳定,我们通常直接配 next-hop-local,保证路由一定能用。
4. 常见误区(只记这 3 个)
| 误区 | 正确理解 |
|---|---|
| "IBGP 像 OSPF 一样会自动改下一跳" | ❌ IBGP 默认不改,必须手动配 next-hop-local |
| "配在 R3 上" | ❌ 配在 R1 上(发布路由的人) |
| "只要配了就一定能通" | ❌ 还要保证 R3 到 R1 的 IGP 是通的 |
BGP 的 Next_Hop 属性逻辑

GP 的 Next_Hop 属性逻辑非常清晰,它本质上就是为了解决一个问题:"数据包到了我这,下一步该给谁?"
我们可以把这三种情况归纳为**"换个新地标"** 和**"保持旧地标"**两种逻辑。
核心逻辑图解
你可以把 BGP 路由器想象成**"转信站"** ,Next_Hop 就是信封上写的**"下一个投递点"**。




| 场景 | 动作 | 下一跳变成什么? | 简单记忆 |
|---|---|---|---|
| 发给 EBGP | 修改 | 自己的接口 IP | 跨越边界,我是出口 |
| 本地始发 -> IBGP | 修改 | 自己的接口 IP | 我是源头,找我 |
| EBGP 学到 -> IBGP | 不修改 (默认) | 保持外部 IP 不变 | 保持原样,直达出口 |
这样理解是不是清晰多了?核心就在于:默认情况下,BGP 希望内部路由器知道真正的出口在哪里,除非出口不可达(需要 next-hop-local 修正)。
黑洞产生的原因 以及两种解决方法的原理。
1. 实验拓扑与配置回顾


2. 路由传递过程(以 10.10.4.4 → 10.10.5.5 方向为例)

3. 为什么 R2 会产生路由黑洞?




