第一章 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条,但实际工作中常用的就前几条。我按优先级列出来:
- Weight(权重):Cisco私有,值越大越优先。本地有效。
- Local_Preference(本地优先级):值越大越优先。整个AS内有效。
- 本地生成路由:比如network命令注入的,优先于从邻居学来的。
- AS_PATH长度:越短越优先。
- Origin类型:IGP < EGP < Incomplete。
- MED:值越小越优先。
- EBGP优于IBGP:EBGP学来的路由优先。
- 下一跳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先建立邻居关系(概述),然后通过路径属性描述路由,最后用选路原则挑出最好的那条。每一步都环环相扣。
1.5 实战中的几点体会
做了这么多年网络,我总结了几条BGP基础阶段的「铁律」:
- 先通IGP,再建BGP:BGP的下一跳必须IGP可达,否则路由不会生效。
- IBGP全互联:IBGP邻居之间要建立全互联,或者用路由反射器。否则路由学不全。
- 同步问题:虽然现在默认关闭了同步检查,但理解它的含义很重要——BGP路由要等IGP也学到才用。
- 路由过滤:别把所有BGP路由都往IGP里倒,用network或redistribute controlled方式注入。
我的习惯:每建一个BGP邻居,我都会先配好过滤策略。哪怕只是简单的前缀列表,也比裸奔强。你永远不知道邻居会给你发什么「惊喜」。
好了,第一章的内容就到这里。BGP的基础打牢了,后面学安全配置才会顺手。记住:路径属性是BGP的灵魂,选路原则是BGP的骨架。这两样东西搞明白了,BGP就算入门了。