1、BGP基础回顾:BGP协议概述、BGP路径属性、BGP选路原则

1.1 BGP协议概述:互联网的“交通总指挥”

BGP,全称是边界网关协议。说白了,它就是互联网的“交通总指挥”。

你想想看,互联网不是一台电脑,而是成千上万个网络(我们叫它AS,自治系统)连在一起。每个AS都有自己的“地盘”,比如电信、联通、阿里云。BGP干的事,就是让这些AS之间互相告诉对方:“我这里有这些IP地址,你可以通过我访问到它们。”

我个人习惯把BGP分成两类:

  • EBGP(外部BGP):不同AS之间的对话。比如电信和联通之间跑的就是EBGP。
  • IBGP(内部BGP):同一个AS内部的对话。比如电信内部的路由器之间同步路由信息。

嗯,这里要注意:IBGP有一个“防环”机制。BGP规定,从IBGP学到的路由,不能再传给其他IBGP邻居。所以IBGP需要全互联,或者用路由反射器。我在项目中遇到过有人忘了配路由反射器,结果全网路由不通,排查了半天才发现是IBGP没传透。

核心要点:BGP是路径矢量协议,不是链路状态协议。它不关心链路带宽、延迟,只关心“怎么走”和“走哪条路更靠谱”。

1.2 BGP路径属性:路由的“身份证”

BGP选路靠什么?靠路径属性。每个BGP路由都带着一堆属性,就像人的身份证一样,记录了这条路由的各种信息。

我整理了一下,最常用的属性有这些:

属性名称 类型 作用
AS_PATH 公认必遵 记录经过的AS编号,用于防环和选路
NEXT_HOP 公认必遵 告诉下一跳路由器是谁
LOCAL_PREF 公认自决 本地优先级,越高越优先(只在IBGP传递)
MED 可选非传递 度量值,越低越优先(用于影响对端选路)
ORIGIN 公认必遵 路由来源:IGP、EGP、incomplete
Community 可选传递 打标签用的,方便做策略

举个例子。AS_PATH就像快递的转运记录。如果一条路由的AS_PATH是“100 200 300”,另一条是“100 400”,那BGP会优先选路径短的。但注意,AS_PATH长度是选路规则之一,不是唯一标准。

我曾经遇到过一个坑:客户想控制流量从特定出口出去,结果配了LOCAL_PREF没生效。后来发现,LOCAL_PREF只在IBGP邻居之间传递,EBGP邻居收到后会重置。嗯,这个细节很多人会忽略。

避坑指南:MED属性只能在相邻的AS之间传递,不会传给第三个AS。如果你想影响远端AS的选路,得用AS_PATH prepend或者Community属性。

1.3 BGP选路原则:路由的“十项全能”比赛

BGP选路,说白了就是一场“十项全能”比赛。当BGP收到多条到达同一目的地的路由时,它会按顺序比较这些属性,直到选出唯一胜出者。

我习惯把选路原则记成“口诀”:

  1. 权重(Weight):Cisco私有,越高越优先。本地有效,不传给邻居。
  2. LOCAL_PREF:本地优先级,越高越优先。
  3. 本地生成:本地通过network或aggregate生成的路由,优于学来的。
  4. AS_PATH长度:越短越优先。
  5. ORIGIN类型:IGP优于EGP,EGP优于incomplete。
  6. MED:越低越优先。
  7. EBGP优于IBGP:外部学来的路由优先于内部学来的。
  8. 下一跳可达性:下一跳不可达的路由直接淘汰。
  9. IGP度量值:到下一跳的IGP开销越小越优先。
  10. Router ID:最小的Router ID胜出(最后手段)。

你想想看,这十条规则就像一场淘汰赛。第一条权重就分出胜负了,后面的规则根本用不上。所以调优时,优先考虑权重和LOCAL_PREF。

我在项目中遇到过这样一个场景:两个出口分别连电信和联通,想实现电信流量走电信、联通流量走联通。我用了Community属性打标签,然后在入方向修改LOCAL_PREF。嗯,效果立竿见影。

警告:选路原则是逐条比较的,一旦某条规则分出胜负,后面的规则就不看了。所以不要指望用MED去覆盖LOCAL_PREF的效果,那是徒劳的。

1.4 知识体系框架图

下面这张图,是我自己画的BGP基础知识框架。你可以把它当作本章的“思维导图”。

BGP基础回顾 BGP协议概述 • EBGP:AS间通信 • IBGP:AS内同步 • 路径矢量协议 • 防环机制 BGP路径属性 • AS_PATH:路径记录 • NEXT_HOP:下一跳 • LOCAL_PREF:优先级 • MED:度量值 • Community:标签 BGP选路原则 ① Weight(权重) ② LOCAL_PREF ③ 本地生成 ④ AS_PATH长度 ⑤ ORIGIN类型 ⑥ MED → ⑦ EBGP优于IBGP ⑧ 下一跳可达 → ⑨ IGP度量 ⑩ Router ID 核心:BGP选路 = 属性比较 + 策略控制 理解属性才能控制选路,控制选路才能构建安全防御

1.5 实战小贴士

最后,分享几个我自己的实战经验:

  • 调试命令要记牢show ip bgp 看路由表,show ip bgp neighbors 看邻居状态,debug ip bgp updates 看路由更新(慎用,生产环境别开)。
  • 属性修改时机:入方向用route-map改LOCAL_PREF,出方向用route-map改MED或AS_PATH。
  • 不要迷信默认值:LOCAL_PREF默认是100,但不同厂商可能不一样。我建议显式配置,避免歧义。

一句话总结:BGP选路就是一场属性比较的“淘汰赛”。你掌握了属性,就掌握了流量。

专注资料整理