BGP 路由振荡:互联网不是按最短路走的

我们平时打开一个网站,会下意识觉得数据包是在“找最近的路”。这个直觉在小网络里还凑合,但放到整个互联网就开始错了。互联网不是一张由中央系统统一规划的地图,而是很多自治系统,也就是 AS,彼此交换“我能到哪里、我愿意怎么走”的消息。

BGP 做的事,就是让这些 AS 互相通报路径。比如一个网络说:“我要去某个 IP 前缀,可以从 AS 10 → AS 25 → AS 80 过去。”另一个网络听到后,会根据自己的策略决定信不信、用不用。注意,BGP 选路不只看距离,它更看商业关系、运营策略和本地优先级。便宜的路、合作伙伴的路、避免竞争对手的路,都可能比“更短的路”优先。

麻烦也从这里来。当某条路断了,一个 AS 会撤回旧路径,邻居再重新计算,接着把新选择告诉更多邻居。问题是这些消息不是瞬间同时到达的,有的节点还拿着旧信息,有的已经换了新信息。于是网络可能在几条路径之间来回切换,这就是路由振荡。它不像一个程序里变量改错了那么直接,而是很多局部正确的选择叠在一起,最后让全局不稳定。

BGP 的难点在于:每个 AS 都只看自己的一小块世界,而且每个 AS 都有自己的利益。它没有一个“上帝视角”去强制大家走最优路径。所以 BGP 的稳定性,本质上不是单纯算法问题,而是分布式系统、策略冲突和现实商业规则混在一起的问题。



容易混淆的一点是,BGP 不是用来算“最快路径”的协议。它更像是在很多网络之间传播“可达性”和“策略选择”。如果把它理解成互联网版 Dijkstra,就会误判它的核心问题:BGP 最难的不是找路,而是在没有中央控制的情况下,让一群各有算盘的网络别把路选崩。

#CS