2. BGP基础回顾:BGP协议原理、AS路径属性、路由通告机制

好,咱们正式开始聊BGP。说实话,很多搞网络的朋友一听到BGP就觉得头大,觉得它太复杂。我个人觉得,BGP其实没那么玄乎,你只要抓住几个核心点,剩下的都是细节。今天这一节,我就带你把这些核心点捋清楚。

2.1 BGP协议原理:它到底是个啥?

BGP,全称是边界网关协议。说白了,它就是互联网的“交通调度员”。你想啊,互联网上有几十万个网络(我们叫它AS,自治系统),这些网络之间怎么互相知道对方的存在?怎么知道去某个IP地址该走哪条路?靠的就是BGP。

BGP和咱们平时用的OSPF、IS-IS这些内部网关协议(IGP)不一样。IGP是在一个“院子”里用的,比如你公司内部。BGP是在“院子”和“院子”之间用的,比如你家公司和隔壁公司。所以,BGP的核心任务就是:在不同的AS之间交换路由信息

核心要点:BGP是一个基于策略的路径矢量协议。它不关心链路带宽,不关心延迟,它只关心“你经过哪些AS到达目的地”。这个“经过的AS列表”,就是它做决策的依据。

我记得刚入行那会儿,有个老工程师跟我说:“BGP不是用来找最快路径的,是用来找‘最符合你商业意图’的路径的。” 这句话我到现在都觉得是真理。

2.2 AS路径属性:BGP的“身份证”和“履历表”

BGP之所以强大,很大程度上归功于它的路径属性。你可以把每个BGP路由想象成一个人,它身上挂着一堆标签,这些标签就是属性。其中最重要的一个,就是AS_PATH

2.2.1 AS_PATH:路由的“旅行记录”

AS_PATH属性记录了这条路由从源头到当前路由器,一路上经过了哪些AS。它是一个有序的列表。比如,一个路由的AS_PATH是 [65001, 65002, 65003],意思就是:这条路由是从AS 65001发出来的,然后经过了AS 65002,最后到了AS 65003。

这个属性有两个核心作用:

  • 防环:路由器收到一条BGP路由,如果发现自己的AS号已经在AS_PATH里了,那就说明这条路由是自己发出去的又传回来了,直接丢弃。这是BGP最基础的防环机制。
  • 选路:一般来说,AS_PATH越短,路由优先级越高。因为路径短,意味着经过的网络少,理论上更稳定、更可控。

我的经验:我曾经处理过一个跨国公司的路由环路问题。排查了半天,最后发现是某台路由器上配置了错误的AS号,导致AS_PATH里出现了重复的AS。所以,配置BGP时,AS号一定要核对清楚,尤其是跟外部对等体建立邻居时。

2.2.2 其他关键属性

除了AS_PATH,还有几个属性你必须要懂:

属性名称 类型 作用
Next Hop 公认必遵 告诉路由器,去往目标网络,下一跳该发给谁。这是路由转发的关键。
Local Preference 公认自决 只在同一个AS内传递。值越高,优先级越高。用于控制AS内部的出站流量。
MED (Multi-Exit Discriminator) 可选非传递 用于告诉邻居AS,从哪个入口进我的网络更好。值越低,优先级越高。
Origin 公认必遵 标记路由的来源。IGP(i)优于EGP(e),EGP优于Incomplete(?)。

你想想看,有了这些属性,BGP就能做出非常精细的路由控制。比如,你可以通过调整Local Preference,让某个AS内的所有路由器都优先走某条链路出去。

2.3 路由通告机制:BGP是怎么“说话”的?

BGP的路由通告,不是像OSPF那样“我有一条路由,大家快来学”。BGP的通告机制非常严谨,甚至可以说有点“吝啬”。它遵循一个核心原则:我只告诉你我用的路由,而且我只告诉你我认为对你有用的路由。

2.3.1 从IGP到BGP的注入

BGP本身不产生路由,它需要从IGP(比如OSPF)或者静态路由中学习。这个过程叫“路由注入”。通常,我们会使用 network 命令或者 redistribute 命令。

# 示例:在BGP进程中宣告一个网段
router bgp 65001
 network 192.168.1.0 mask 255.255.255.0

这里要注意,network 命令不是“创建”路由,而是“匹配”路由。它要求你的路由表里必须有一条完全匹配的路由,BGP才会把它宣告出去。这一点,很多新手容易搞混。

2.3.2 BGP路由的传播规则

BGP路由器从邻居学到一条路由后,不会马上转发给其他邻居。它会先做一系列检查:

  1. 检查Next Hop是否可达:如果下一跳不可达,这条路由就是无效的,不会参与选路。
  2. 检查AS_PATH防环:如果自己的AS号在AS_PATH里,丢弃。
  3. 执行选路策略:从多条到达同一目的地的路由中,选出最优的那一条。
  4. 通告给其他邻居:只把最优路由通告出去。而且,通告给EBGP邻居时,会把自己的AS号追加到AS_PATH前面。

避坑指南:我曾经遇到过一个案例,某台路由器上配置了多条去往同一目的地的BGP路由,但流量总是走一条不期望的路径。排查后发现,是Next Hop不可达导致最优路由失效,次优路由被选中。所以,一定要确保BGP的Next Hop在IGP或直连路由中可达

2.3.3 IBGP与EBGP的区别

BGP邻居分为两种:IBGP(内部BGP)和EBGP(外部BGP)。

  • EBGP:邻居位于不同的AS。默认TTL为1,AS_PATH会追加AS号。
  • IBGP:邻居位于同一个AS。默认TTL为255,AS_PATH不追加AS号。

这里有个重要的规则:从IBGP学到的路由,不能直接通告给另一个IBGP邻居。这是为了防止IBGP内部产生环路。所以,在AS内部,通常需要全互联(Full Mesh)或者使用路由反射器(Route Reflector)来解决这个问题。

嗯,说到路由反射器,这又是一个大话题。简单来说,它允许一台路由器(反射器)把从IBGP邻居学到的路由,反射给其他IBGP邻居,从而打破全互联的限制。但要注意,反射器不会修改路由的Next Hop和AS_PATH等属性。

2.4 本章知识体系

为了让你更直观地理解BGP的核心逻辑,我画了一张图。你可以把它当作本章的“思维导图”。

BGP基础回顾:核心知识体系 BGP协议 协议原理 • 路径矢量协议 • 基于策略选路 • AS间路由交换 AS路径属性 • AS_PATH:防环 & 选路 • Next Hop:下一跳可达性 • Local Preference:出站控制 • MED:入站控制 路由通告机制 • 从IGP注入BGP • 选路后只通告最优 • IBGP vs EBGP规则 • 防环:AS_PATH & IBGP水平分割 核心思想 BGP不是找最快路径,而是找最符合商业意图的路径 属性是BGP的灵魂,理解属性才能玩转BGP

这张图把BGP的三大块串起来了。你从“协议原理”出发,理解它是个什么东西;然后掌握“AS路径属性”,这是它的工具;最后搞懂“路由通告机制”,这是它的工作流程。三块都通了,BGP就算入门了。

好了,这一节的内容就到这里。BGP的基础知识是后面所有攻击检测和修复的基石。你把这些概念吃透了,后面讲路由泄露攻击的时候,你就能一眼看穿攻击者到底在搞什么鬼。


专注资料整理