BGP入门科普:互联网的"大江大河"是如何选路的?
先说句题外话:IGP的”天花板”在哪?
在学习BGP之前,我们先看看它的”前辈”们——内部网关协议(IGP)。
RIP和OSPF是我们最熟悉的两个IGP。IGP的工作特点是:快速收敛、拓扑发现、周期性更新、环路避免。但它们有一个共同的”天花板”——只看得见AS内部。
IGP承载的路由前缀是本AS内的,数量不会特别庞大。但是,如果一个大型、高冗余性、多宿主的网络涉及AS之间交互路由,继续用IGP就会非常吃力。这就是为什么我们需要BGP。
从一个问路的故事开始
想象你开车要从上海到拉萨。没有导航的话你会怎么走?
你会打开一张全国高速公路地图——先上G2京沪高速到南京,转G42沪蓉高速到成都,再转G318。你不需要知道每个城市内部的街道怎么走,你只需要知道城市与城市之间的高速公路怎么连。
互联网的”城市”叫做自治系统(Autonomous System,AS)——由同一个管理机构控制、使用相同路由策略的一组网络设备。比如中国联通是一个AS,Google也是一个AS。不同AS通过AS号(ASN)区分,取值范围165535,其中6451265535是私有AS号,在组织内部随意使用。
城市内部的道路是IGP(内部网关协议)的地盘,而城市之间的高速公路就是BGP的天下。
BGP到底是什么?——互联网的”高富帅”
BGP(Border Gateway Protocol,边界网关协议)是互联网的”骨干路由协议”。简单说:
它告诉全世界的路由器:”要去Google,走AS 15169;要去阿里云,走AS 45102。”
没有BGP,就没有我们今天看到的互联网。它运行在TCP端口179上,是唯一被广泛使用的外部网关协议(EGP)。当前版本是BGP-4。
BGP之所以被称为路由协议中的”高富帅”,是因为这些特征:
- 🔗 使用TCP确保可靠传输(不像OSPF跑在IP上,也不像RIP用UDP)
- 🌍 BGP邻居可以跨路由器建立,不要求直连
- 📊 邻居建立时交换整个BGP路由表,后续只发增量/触发更新
- 🎨 拥有丰富的路径属性和强大的策略工具
- 🏋️ 能承载大批量路由前缀(全球约100万条)
BGP和其他路由协议的区别
| 协议 | 类型 | 适用范围 | 选路依据 |
|---|---|---|---|
| RIP | IGP | 小型网络 | 跳数 |
| OSPF | IGP | 企业网 | 链路带宽/开销 |
| IS-IS | IGP | 运营商内部 | 链路开销 |
| BGP | EGP | 全球互联网 | 路径属性+策略 |
关键区别:OSPF关心”哪条路最短”,BGP关心”哪条路应该走”——它在最短路径之外还加了策略(policy)。
BGP的核心概念:用五个问题理解
① 什么是AS(自治系统)?
AS是在同一个组织管理下、使用相同策略的设备的集合。
可以把AS理解为一个独立的机构或企业。比如中国联通就是一个AS。另一家大企业在网络规划上,可能把全球各区域划分为不同的AS:中国区是一个AS,南美区是另一个AS。
AS号由IANA(互联网号码分配机构)统一管理。使用公有AS号需要向IANA申请。AS内部用IGP(OSPF/IS-IS)搞定路由,AS之间用BGP交换信息。
② EBGP和IBGP有什么区别?
| 类型 | 连接对象 | 建立条件 |
|---|---|---|
| EBGP | 不同AS之间 | ①AS号不同 ②IP路由可达 ③TCP 179能通 |
| IBGP | 同一AS内部 | ①AS号相同 ②IP路由可达 ③TCP 179能通 |
注意,两种邻居关系都不要求设备直连——因为BGP跑在TCP之上,只要能建立TCP连接就行。这是BGP和OSPF/RIP最大的不同之一。
关键规则:IBGP邻居之间不转发从IBGP学到的路由(这叫”IBGP水平分割”)。为什么?防止路由环路。解决方案:要么全互联(full mesh),要么用路由反射器(Route Reflector)。这个话题在后续系列中会详细展开。
③ BGP怎么建立邻居?
BGP使用TCP 179端口,先建立TCP连接,再交换路由信息。
建立邻居的六个状态(理解这个很重要):
1 | |
- Idle:初始状态,等待触发
- Connect:正在尝试TCP连接
- Active:Connect失败,重试中
- OpenSent:TCP通了,发了Open报文,等对方回复
- OpenConfirm:收到对方的Open,等Keepalive确认
- Established:邻居建立成功,开始交换路由 ✨
④ BGP怎么选路?——AS_PATH的魔法
BGP是一个路径矢量协议。在某些层面上,它和RIP很像——同样更新路由表,同样有”距离”概念。但区别在于:在BGP眼里,一跳不是一个路由器,而是一个AS。
举个例子(来自华为论坛的一篇经典教程):
1 | |
10.1.1.0/24 从 AS500 传出时,边界路由器给它加上 AS_PATH = 500。
- R1 收到后传给 R2(iBGP),AS_PATH 不变,仍是
500 - R2 传给 R5(eBGP),因为是跨AS传递,R2 在AS_PATH前面插入自己的AS号 →
100, 500 - R4 也传给了 R5,路径是
300, 200, 500
现在 R5 同时收到两条去往 10.1.1.0/24 的路由:
| 来源 | AS_PATH | AS跳数 |
|---|---|---|
| 从R2走 | 100, 500 |
2跳 |
| 从R4走 | 300, 200, 500 |
3跳 |
AS_PATH越短越优先,所以 R5 选 R2 的路。
更重要的是,AS_PATH 还是天然的防环机制:如果 R3 从别人那收到一条路由,AS_PATH 里包含自己的 AS 号(300),它会直接丢弃——“这条路由曾经从我这出去过,不能再收回来”。
⑤ BGP的四种报文是什么?
| 报文 | 作用 | 类比 |
|---|---|---|
| Open | 建立邻居,”你好我是AS 4134” | 握手 |
| Update | 撤销旧路由,发布新路由 | 送快递 |
| Keepalive | 维持邻居关系(默认60秒一次) | 心跳 |
| Notification | 出错时通知,”出问题了,断开!” | 报警 |
一个快递员的比喻(总结)
把BGP想象成全球快递的干线调度:
- 每个AS是一个省的分拣中心
- EBGP是省际干线:广东→湖南→湖北→河南→北京
- IBGP是省内地市调度:广州→深圳→东莞
- AS-Path就是快递单上的中转记录
- AS_PATH在跨AS时会加自己的章,省内传递时就原样传
- 选路时先看中转次数(AS_PATH长短),再看其他条件
- 如果中转记录里出现了”自己省”的章→说明绕圈了→直接丢掉
2025年全球BGP路由表大约有100万条前缀。这意味着每台互联网骨干路由器要在100万条路中找出最佳路径——而且要在网络拓扑变化(光纤断了、路由器挂了)时秒级更新。
下一步学什么?
读到这里你已经理解了BGP的核心思想。下一步你可以:
- 学认证备考版:13条选路原则每条配上配置命令和排错
- 学工程实战版:状态机卡死怎么排、路由震荡怎么治、常见的坑有哪些
- 动手做实验:GNS3/EVE-NG搭一个多AS拓扑,亲手配EBGP和IBGP
本文是”网络工程”系列的第一篇(入门科普),参考了华为企业互动社区 NE路由器官方教程。下一篇将深入BGP的13条选路原则和认证考点。