第一章 BGP基础回顾:BGP概述、BGP路径属性、BGP选路原则

1.1 BGP到底是什么?

BGP,全称是边界网关协议。说白了,它就是互联网的「交通调度员」。

你想想看,全球几万个自治系统(AS)之间怎么交换路由信息?靠的就是BGP。我经常跟刚入行的朋友说:OSPF是内部用的,BGP才是连接世界的协议

BGP有几个关键特点,我挑重要的说:

  • 路径矢量协议:它不关心链路开销,只关心「怎么走」——也就是AS路径。
  • 基于TCP 179端口:所以它可靠,但也意味着TCP出问题BGP就断。
  • 触发式更新:不像OSPF每30分钟刷一次,BGP只在路由变化时才发更新。
  • 携带大量路径属性:这是BGP最强大的地方,也是选路的依据。

核心记忆点:BGP不是用来「发现」路由的,而是用来「传递」和「选择」路由的。它假设底层IGP已经打通了。

我在项目中遇到过一家企业,内部跑OSPF,出口跟运营商建EBGP。结果他们想用OSPF把默认路由灌进来,搞得全网路由表爆炸。嗯,这里要注意:BGP和IGP要分工明确,别混着用。

1.2 BGP路径属性——选路的「筹码」

BGP之所以灵活,就是因为它有丰富的路径属性。每个BGP路由都带着一堆属性,就像快递包裹上的标签。路由器根据这些标签决定「走哪条路」。

我习惯把属性分成四类:

类别 属性名称 传递范围 作用
公认必遵 AS_PATH、Next_Hop、Origin 所有BGP更新 每个路由都必须携带
公认可选 Local_Pref、Atomic_Aggregate 所有BGP更新(可选) 不一定有,但所有设备都认识
可选传递 Community、Aggregator 跨AS传递 不认识也得传下去
可选非传递 MED、Cluster_List、Originator_ID 仅在当前AS内 不认识就丢弃

这里我重点说几个最常用的:

AS_PATH

这是BGP的「防环机制」。每经过一个AS,就把自己的AS号加在路径前面。路径越短,路由越优。我曾经见过有人手动修改AS_PATH来影响选路,结果搞出了路由黑洞——千万别乱改AS_PATH长度,除非你清楚后果。

Local_Preference(本地优先级)

这是IBGP选路时最重要的属性。值越大越优先。默认值是100。我习惯在入口路由器上对特定路由设置较高的Local_Pref,比如设为200,让流量从指定出口走。

MED(多出口区分)

MED是告诉邻居AS:「你从我这走这条路更近」。值越小越优先。注意:MED只在相邻AS之间传递,不会跨AS传播。

Community(团体属性)

这个属性太实用了。你可以给路由打标签,然后在策略里统一处理。比如打上 NO_EXPORT,路由就不会传出AS。我经常用Community来做路由过滤,比写一堆前缀列表省事多了。

我的小技巧:在部署BGP时,先规划好Community策略。比如用100:100标记「客户路由」,200:200标记「内部路由」。后期维护起来特别清晰。

1.3 BGP选路原则——到底走哪条?

当BGP收到多条到达同一目的地的路由时,它怎么选?答案是:一条一条比,直到分出胜负

完整的选路原则有13条,但实际工作中常用的就前几条。我按优先级列出来:

  1. Weight(权重):Cisco私有,值越大越优先。本地有效。
  2. Local_Preference(本地优先级):值越大越优先。整个AS内有效。
  3. 本地生成路由:比如network命令注入的,优先于从邻居学来的。
  4. AS_PATH长度:越短越优先。
  5. Origin类型:IGP < EGP < Incomplete。
  6. MED:值越小越优先。
  7. EBGP优于IBGP:EBGP学来的路由优先。
  8. 下一跳IGP度量:到下一跳的IGP开销越小越优先。

为什么会这样设计?你想想看,Weight和Local_Pref是管理员可以主动控制的,所以排在最前面。AS_PATH是客观的路径长度,排在中间。MED是邻居给的建议,排在后面。

我记得有一次排查故障,两条BGP路由去同一个目标,一条走A出口,一条走B出口。结果流量全走B,但B出口带宽不够。我一看,原来是A出口的Local_Pref设成了默认值100,B出口设成了150。调整一下就好了——选路原则就是你的「遥控器」

避坑指南:我曾经见过有人把Weight设得很大,结果路由只从一台设备走,另一台完全空闲。选路原则要结合负载均衡需求来设计,不是一味追求「最优」。

1.4 知识体系总览

下面这张图是我自己画的,把BGP基础的核心逻辑串起来了。你看一遍就能明白:BGP从建立邻居到选路,每一步都离不开路径属性。

BGP基础核心逻辑 BGP概述 BGP路径属性 AS_PATH | Local_Pref | MED | Next_Hop | Community | Origin BGP选路原则(前8条) ① Weight → ② Local_Pref → ③ 本地生成 → ④ AS_PATH ⑤ Origin → ⑥ MED → ⑦ EBGP优于IBGP → ⑧ IGP度量 最优路由 → 加入路由表 核心基础 决策依据 最终结果

这张图你看懂了吗?从上到下,BGP先建立邻居关系(概述),然后通过路径属性描述路由,最后用选路原则挑出最好的那条。每一步都环环相扣。

1.5 实战中的几点体会

做了这么多年网络,我总结了几条BGP基础阶段的「铁律」:

  • 先通IGP,再建BGP:BGP的下一跳必须IGP可达,否则路由不会生效。
  • IBGP全互联:IBGP邻居之间要建立全互联,或者用路由反射器。否则路由学不全。
  • 同步问题:虽然现在默认关闭了同步检查,但理解它的含义很重要——BGP路由要等IGP也学到才用。
  • 路由过滤:别把所有BGP路由都往IGP里倒,用network或redistribute controlled方式注入。

我的习惯:每建一个BGP邻居,我都会先配好过滤策略。哪怕只是简单的前缀列表,也比裸奔强。你永远不知道邻居会给你发什么「惊喜」。

好了,第一章的内容就到这里。BGP的基础打牢了,后面学安全配置才会顺手。记住:路径属性是BGP的灵魂,选路原则是BGP的骨架。这两样东西搞明白了,BGP就算入门了。


专注资料整理