BGP(Border Gateway Protocol)在交换路由时遵循的规则
BGP(Border Gateway Protocol)在交换路由时遵循一系列严格的规则,这些规则决定了如何选择、传播和优选路由。以下是BGP路由交换的核心规则和流程:
一、BGP路由交换的基本规则
1. 路由通告规则
- 只通告最优路由:BGP Speaker(路由器)只会将 自己最优的(Best Path) 路由通告给邻居。
- 水平分割(Split Horizon):
- 从 IBGP邻居 学到的路由,不会 通告给其他 IBGP邻居(防止环路)。
- 从 EBGP邻居 学到的路由,可以通告给 IBGP和EBGP邻居。
- Next-Hop 处理:
- EBGP路由:下一跳(Next-Hop)会被改为自己的出口IP。
- IBGP路由:默认不修改下一跳(除非配置
next-hop-self
)。
2. 路由接收规则
- 合法性检查:
- 检查
AS_PATH
是否包含自己的AS(防止环路)。 - 检查
ORIGIN
、NEXT_HOP
是否有效。
- 检查
- 路由优选(Best Path Selection):
- 如果收到多条相同前缀的路由,BGP会按照 选路规则 选择最优路由。
二、BGP路由传播流程
1. EBGP 路由传递
- 从EBGP邻居学习路由:
- 检查
AS_PATH
,确保不包含自己的AS。 - 修改
NEXT_HOP
为自己的出口IP。 - 可以传递给 IBGP和EBGP邻居。
- 检查
2. IBGP 路由传递
- 从IBGP邻居学习路由:
- 不会修改
NEXT_HOP
(除非配置next-hop-self
)。 - 不会传递给其他IBGP邻居(水平分割)。
- 必须通过 路由反射器(RR) 或 全互联(Full Mesh) 解决IBGP传播问题。
- 不会修改
三、BGP路由优选规则(Best Path Selection)
BGP在收到多条相同前缀的路由时,会按 顺序 比较以下属性,直到选出最优路由:
顺序 | 比较规则 | 说明 |
---|---|---|
1 | 最高 Weight(Cisco私有) | 本地优先级,越大越优(仅本地有效)。 |
2 | 最高 LOCAL_PREF | 默认100,越大越优(IBGP范围内有效)。 |
3 | 本地生成的路由(Network/聚合) | 优于从邻居学习的路由。 |
4 | 最短 AS_PATH | AS_PATH 越短越优(可配置 bgp bestpath as-path ignore 跳过)。 |
5 | 最低 ORIGIN 类型 | IGP(0) < EGP(1) < Incomplete(2) 。 |
6 | 最低 MED(Multi-Exit Discriminator) | 越小越优(影响入站流量)。 |
7 | EBGP 优于 IBGP | 从EBGP学到的优先于IBGP。 |
8 | 到 NEXT_HOP 的 IGP 开销最小 | 检查BGP下一跳的IGP cost(如OSPF、ISIS)。 |
9 | 最老的 EBGP 路由 | 稳定性优先(较长时间未变化的路由)。 |
10 | 最低 Router ID | 作为最后的比较条件。 |
11 | 最短 Cluster List(路由反射器环境) | 适用于RR场景。 |
12 | 最低邻居 IP 地址 | 最终决胜条件。 |
四、BGP路由策略控制
1. 影响入站流量
- MED(Multi-Exit Discriminator):告诉邻居从哪个入口进来(值越小越优)。
- AS_PATH Prepending:在
AS_PATH
中重复添加自己的AS,使路径看起来更长(降低优先级)。
2. 影响出站流量
- LOCAL_PREF:调整IBGP路由的优先级(值越大越优)。
- Weight(Cisco私有):本地有效,不影响邻居。
3. 过滤路由
- Prefix-List / Distribute-List:基于IP前缀过滤。
- AS_PATH Filter:基于正则表达式过滤特定AS的路由。
- Route-Map:灵活控制路由属性(如修改
LOCAL_PREF
、MED
)。
五、典型场景示例
1. 多宿主(Multi-Homing)
- 目标:优化入站和出站流量。
- 方法:
- 使用
LOCAL_PREF
控制出站流量。 - 使用
MED
或AS_PATH Prepending
影响入站流量。
- 使用
2. 路由反射器(Route Reflector)
- 问题:IBGP全互联难以维护。
- 解决方案:
- 指定路由反射器(RR),允许IBGP路由反射给其他客户端。
3. 联盟(BGP Confederation)
- 问题:AS太大,IBGP全互联复杂。
- 解决方案:
- 将大AS划分为多个子AS(联盟),内部运行EBGP,但对端仍视为单个AS。
六、总结
- BGP路由交换的核心规则:
- 只通告最优路由,遵循 水平分割。
- EBGP路由修改NEXT_HOP,IBGP默认不修改。
- 优选路由时按顺序比较12个属性(Weight > LOCAL_PREF > AS_PATH > …)。
- 策略控制:
- 入站流量:
MED
、AS_PATH Prepending
。 - 出站流量:
LOCAL_PREF
、Weight
。 - 过滤路由:
Prefix-List
、Route-Map
。
- 入站流量:
BGP的灵活性使其成为互联网路由的核心协议,但同时也需要精细的策略控制以避免路由振荡和次优路径问题。