目录
- 导语
- [一、5.4.1 BGP的作用](#一、5.4.1 BGP的作用)
- [二、5.4.2 通告BGP路由信息](#二、5.4.2 通告BGP路由信息)
- [三、5.4.3 确定好的路由](#三、5.4.3 确定好的路由)
- [四、5.4.4 IP任播](#四、5.4.4 IP任播)
- [五、5.4.5 路由选择策略](#五、5.4.5 路由选择策略)
- [六、5.4.6 拼装在一起:在因特网中呈现](#六、5.4.6 拼装在一起:在因特网中呈现)
- 本节核心总结(必看)
- 结语
导语
大家好呀~这一节我们要学习整个计算机网络中最复杂、最重要的路由协议------BGP(Border Gateway Protocol,边界网关协议)!如果说OSPF是一个城市内部的交通系统,那BGP就是连接全世界所有城市的国际高速公路网------它让几十万个自治系统(AS)互联互通,构成了今天的因特网。
BGP和我们之前学的路由协议都不一样。OSPF用链路状态算法,目标是找最短路径;而BGP用的是路径向量(Path Vector)算法,目标不仅仅是找最短路径,更重要的是实现策略路由------每个ISP可以根据自己的商业关系和策略,决定哪些路由可以接受、哪些路由可以通告、走哪条路径。BGP是因特网的"胶水",把全世界的ISP粘在一起。
这一节内容很多,是第5章的重头戏。我们会从BGP的作用讲起,然后学习BGP如何通告路由、如何选择最优路由、IP任播是什么、路由策略怎么配置,最后看看BGP在真实因特网中是怎么工作的。准备好了吗?让我们走进BGP的世界~

一、5.4.1 BGP的作用
1. 为什么需要BGP?
回顾一下:AS内部用OSPF等IGP协议,目标是找最短路径,因为AS内部是统一管理的,大家都希望数据包走最快的路。但AS之间呢?
AS之间是不同的组织(不同的ISP、公司、大学),它们之间有复杂的商业关系。比如:
- 我是一个小ISP,我付钱给大ISP买带宽(客户-提供商关系)
- 我和另一个同级ISP对等互联,免费交换流量(对等关系)
- 我不想让我的流量经过某个竞争对手的网络
在这种情况下,"最短路径"不一定是"最好的路径"。我可能宁愿绕远路,也不想经过竞争对手的网络;我可能宁愿走贵的链路,也要保证流量不经过某些AS。这就需要一种支持策略控制的路由协议------这就是BGP。
2. BGP是什么?
BGP(Border Gateway Protocol,边界网关协议)是因特网的外部网关协议(EGP),用于AS之间的路由选择。当前版本是BGP-4(RFC 4271),广泛用于IPv4;BGP也支持IPv6(MP-BGP)。
BGP的核心特点:
- 路径向量协议(Path Vector):BGP通告的路由信息包含完整的AS路径(经过了哪些AS),而不只是距离。这让BGP能检测路由环路(如果自己的AS号出现在路径中,就说明有环路)。
- 策略路由:每个AS可以根据自己的策略决定接受、拒绝或偏好某些路由。
- 可靠传输:BGP使用TCP(端口179)作为传输层协议,保证路由信息可靠传输。
- 增量更新:BGP只在路由变化时发送更新,不需要周期性泛洪整个路由表。
- CIDR支持:BGP支持无类域间路由,支持路由聚合。
3. BGP会话
BGP路由器之间建立**BGP会话(BGP session)**来交换路由信息。BGP会话分为两种:
- eBGP(external BGP):不同AS之间的BGP会话。eBGP邻居通常是直连的(在同一个子网),用于交换AS之间的路由。
- iBGP(internal BGP):同一个AS内部的BGP会话。iBGP邻居不需要直连,可以通过IGP(OSPF)可达,用于在AS内部传播从eBGP学到的外部路由。
为什么需要iBGP?因为一个AS可能有多个边界路由器(连接到其他AS),从一个边界路由器学到的外部路由需要传播到AS内的其他边界路由器,这样所有边界路由器都有完整的外部路由信息。iBGP就是干这个的。
二、5.4.2 通告BGP路由信息
1. BGP路由通告

BGP路由器向邻居通告路由时,包含以下关键信息:
- NLRI(Network Layer Reachability Information):可达的IP前缀(如192.168.0.0/16)
- AS路径(AS Path):从通告者到目的地经过的AS号列表,如65001, 65002
- 下一跳(Next Hop):到达该前缀的下一跳IP地址
- 其他属性:本地优先级(LOCAL_PREF)、多出口鉴别器(MED)、团体属性(Community)等
当BGP路由器从eBGP邻居学到一条路由后,它会:
- 根据进口策略(import policy)决定是否接受这条路由
- 如果接受,把路由加入BGP路由表
- 通过iBGP通告给AS内的其他BGP路由器
- 根据出口策略(export policy)决定是否通过eBGP通告给其他AS的邻居
2. AS路径与环路检测
AS路径是BGP最重要的属性之一。它记录了路由从起源AS到当前AS经过的所有AS号。比如AS 65001从AS 65002学到了到10.0.0.0/8的路由,AS路径是65002,说明这条路由经过了AS 65002。
AS路径的作用:
- 环路检测:如果路由器在AS路径中看到了自己的AS号,说明这条路由已经经过了自己,再接受就会形成环路,直接拒绝。
- 路径长度:AS路径越短,通常越优(但BGP不一定选最短路径,因为策略优先)。
- 策略控制:可以根据AS路径中的AS号决定是否接受路由(比如"不接受经过竞争对手AS的路由")。
3. 路由聚合
因特网的路由表非常庞大(目前全球BGP路由表超过90万条前缀),如果每个AS都通告所有明细路由,路由表会爆炸。BGP支持路由聚合(Route Aggregation)------把多个连续的小前缀聚合成一个大前缀通告。
比如一个AS拥有192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24,可以聚合成192.168.0.0/22一条路由通告出去,大大减少了路由表的大小。
三、5.4.3 确定好的路由
1. BGP路由选择过程

当BGP路由器学到多条到同一前缀的路由时,需要选择一条最优路由。BGP的路由选择是一个按优先级依次比较属性的过程,不是简单的最短路径优先。BGP选路的标准顺序(Cisco设备):
- 权重(Weight):Cisco私有属性,本地有效,值越大越优。
- 本地优先级(LOCAL_PREF):AS内部传播,值越大越优。用于告诉AS内的路由器"优先走哪条出口"。
- 本地始发(Locally Originated):本路由器自己聚合或引入的路由优先于从邻居学到的。
- AS路径长度(AS Path Length):AS路径越短越优。
- 起源代码(Origin):IGP引入的优于EGP,EGP优于不完备的(incomplete)。
- MED(Multi-Exit Discriminator):值越小越优。用于告诉邻居AS"优先从哪个入口进我的AS",只在相邻AS之间传播。
- eBGP优于iBGP:从外部AS学到的路由优先于从AS内部学到的。
- 到下一跳的IGP度量:到下一跳的IGP代价越小越优。
- 最老的路由:先学到的路由优先(减少路由振荡)。
- 邻居BGP路由器ID:邻居ID小的优先。
- 邻居地址:邻居IP地址小的优先。
看到了吗?BGP选路非常复杂,AS路径长度只排在第4位!前面还有权重、本地优先级、本地始发三个更优先的比较项。这就是BGP的策略路由本质------管理员可以通过设置本地优先级等属性,完全控制流量的走向,而不只是走最短路径。
2. 热土豆路由(Hot Potato Routing)
热土豆路由 是BGP中一个经典的策略。想象你手里拿着一个烫手的土豆,想尽快把它扔出去------热土豆路由就是:当一个AS有多个出口可以到达某个目的地时,选择最近的出口(到下一跳的IGP度量最小),尽快把数据包送出自己的AS,不关心出了AS之后怎么走。
热土豆路由的好处是减少了AS内部的传输成本------数据包在自己AS里走的路越短越好。这对应BGP选路的第8条(到下一跳的IGP度量)。
与之相对的是冷土豆路由(Cold Potato Routing):选择离目的地最近的出口,让数据包在自己AS里多走一段,但出了AS之后走更短的路。冷土豆路由通常用于内容提供商(如Google、Netflix),它们希望控制流量走向,保证用户体验。
四、5.4.4 IP任播

1. 什么是IP任播?
**IP任播(IP Anycast)**是一种让多个地理位置不同的服务器共享同一个IP地址的技术。当用户访问这个IP地址时,BGP会把用户路由到"最近"的那个服务器(根据AS路径长度和IGP度量)。
通俗类比:IP任播就像连锁咖啡店------同一个品牌(同一个IP)在城市各处都有分店(多个服务器),你去最近的那家就行。BGP就是"导航系统",把你引导到最近的分店。
2. IP任播的工作原理
IP任播的实现很简单:在不同地理位置的服务器上配置相同的IP地址,然后每个服务器所在的AS都通过BGP通告这个IP前缀。因特网中的路由器会根据BGP选路规则,选择到这个前缀的"最优"路径,通常就是最近的那个服务器。
当某个服务器故障时,它所在的AS停止通告这个前缀,BGP会自动把流量切换到其他正常的服务器,实现了高可用和负载均衡。
3. IP任播的应用
IP任播在因特网中广泛应用:
- DNS根服务器:全球13组根DNS服务器(A-M),每组都有多个实例分布在全球,通过任播让用户访问最近的根服务器。
- CDN(内容分发网络):Cloudflare、Akamai等CDN服务商使用任播把用户引导到最近的缓存节点。
- DDoS防护:任播可以把DDoS攻击流量分散到多个清洗节点,提高抗攻击能力。
- Google 8.8.8.8 DNS:Google的公共DNS使用任播,全球用户访问最近的DNS节点。
IP任播的一个限制是:它是无状态的------同一个用户的不同请求可能被路由到不同的服务器。所以任播适合无状态服务(如DNS、HTTP),不适合有状态的长连接服务(如TCP会话)。
五、5.4.5 路由选择策略

1. AS之间的商业关系
BGP策略路由的基础是AS之间的商业关系。主要有三种关系:
- 客户-提供商(Customer-Provider):客户向提供商付钱购买因特网接入。客户的所有流量都可以经过提供商,提供商向客户通告全网路由,但客户只向提供商通告自己的客户路由。
- 对等(Peer-Peer):两个同级AS免费交换流量,只交换各自客户的路由,不交换从其他对等或提供商学到的路由。
- 兄弟(Sibling):同一个组织下的两个AS,完全共享路由。
2. 进口策略和出口策略
每个AS通过**进口策略(Import Policy)和出口策略(Export Policy)**来控制路由:
进口策略:决定从邻居学到的哪些路由可以接受。比如:
- 只接受客户和对等AS的路由,不接受提供商的某些路由
- 根据AS路径过滤(如拒绝经过竞争对手的路由)
- 设置本地优先级(LOCAL_PREF)来偏好某些路由
出口策略:决定把哪些路由通告给邻居。比如:
- 向客户通告全网路由(客户的所有流量都可以经过我)
- 向对等AS只通告自己和客户的路由(不转发对等之间的流量)
- 向提供商通告自己和客户的路由
3. 防止路由泄漏
**路由泄漏(Route Leak)**是指一个AS把从一个对等或提供商学到的路由,通告给另一个对等或提供商------这违反了商业关系,可能导致流量被错误引导。
最著名的路由泄漏事件是2008年巴基斯坦电信误通告了YouTube的IP前缀,导致全球YouTube流量被引导到巴基斯坦,造成YouTube大面积中断。BGP本身没有内置的认证机制来防止路由泄漏,目前主要靠RPKI(资源公钥基础设施)来验证路由起源,但部署率还不高。
六、5.4.6 拼装在一起:在因特网中呈现
让我们把前面的内容拼起来,看看一个数据包在真实因特网中是怎么通过BGP路由的。
1. 一个完整的例子
假设你在家(AS 65001,中国电信的客户)访问Google的服务器(AS 15169):
- 你的电脑:把数据包发给默认网关(家里的路由器)。
- 家里的路由器:通过NAT转换,把数据包发给电信的BRAS设备。
- 电信AS(4134)内部:通过OSPF把数据包路由到电信的边界路由器。
- 电信边界路由器:通过BGP查找Google前缀(8.8.8.0/24)的最优路由。电信可能有多个出口到Google(直连对等、经过Cogent、经过NTT等),根据本地优先级和AS路径选择最优出口。
- eBGP通告:电信把数据包从选中的出口发给Google的边界路由器。
- Google AS(15169)内部:通过iBGP和OSPF把数据包路由到最近的服务器(通过IP任播选择)。
- Google服务器:处理请求,回复数据包走反向路径。
整个过程中,BGP负责AS之间的路由选择,OSPF负责AS内部的路由选择,两者配合完成端到端的数据传输。
2. BGP的挑战与未来
BGP虽然是因特网的基石,但也面临很多挑战:
- 路由表膨胀:全球BGP路由表已超过90万条,对路由器内存和CPU压力很大。
- 安全问题:BGP没有内置认证,路由劫持和泄漏事件时有发生。RPKI正在逐步部署。
- 收敛慢:BGP路由变化时收敛较慢,可能导致短暂的丢包和延迟。
- 配置复杂:BGP策略配置非常复杂,容易出错。
尽管有这些挑战,BGP仍然是因特网不可或缺的协议。未来的改进方向包括RPKI部署、BGP安全扩展、以及SDN在特定场景下替代部分BGP功能。
本节核心总结(必看)
这一节是第5章的重头戏,核心要点:
一、BGP的作用
- BGP是AS之间的外部网关协议,路径向量协议
- 支持策略路由,不只是找最短路径
- 使用TCP(端口179)可靠传输
- eBGP(AS间)和iBGP(AS内)两种会话
二、BGP路由通告
- 通告NLRI(IP前缀)+ AS路径 + 下一跳 + 其他属性
- AS路径用于环路检测和路径长度比较
- 支持路由聚合,减少路由表大小
三、BGP路由选择
- 按优先级依次比较:权重→本地优先级→本地始发→AS路径→起源→MED→eBGP/iBGP→IGP度量→最老→邻居ID
- AS路径长度只排第4位,策略优先
- 热土豆路由:选最近出口,尽快送出AS
四、IP任播
- 多个服务器共享同一IP,BGP路由到最近的服务器
- 用于DNS根服务器、CDN、DDoS防护
- 适合无状态服务
五、路由策略
- 客户-提供商、对等、兄弟三种商业关系
- 进口策略控制接受哪些路由,出口策略控制通告哪些路由
- 路由泄漏是严重安全问题,RPKI用于防护
关键概念清单
- BGP(边界网关协议):AS之间的路径向量路由协议
- 路径向量(Path Vector):包含完整AS路径的路由信息
- eBGP/iBGP:AS间/AS内的BGP会话
- AS路径(AS Path):路由经过的AS号列表
- 本地优先级(LOCAL_PREF):AS内的路由偏好
- MED(多出口鉴别器):影响邻居AS的入口选择
- 热土豆路由:选最近出口尽快送出AS
- IP任播(Anycast):多服务器共享IP,路由到最近
- 路由泄漏(Route Leak):违反商业关系的错误路由通告
- RPKI:资源公钥基础设施,验证路由起源
结语
这一节我们全面学习了BGP------因特网的"胶水"。从BGP的作用和路径向量机制,到复杂的路由选择过程,到IP任播和策略路由,再到BGP在真实因特网中的工作方式,BGP展现了协议设计的复杂性和灵活性。
BGP可能是整个计算机网络中最难理解的协议,但也是最重要的协议。没有BGP,就没有今天互联互通的因特网。理解BGP,你就理解了因特网是怎么"粘"在一起的。
下一节5.5我们将学习SDN控制平面------和传统分布式路由不同,SDN用集中控制器来计算和下发路由,是网络架构的一次革命。我们会学习SDN控制器的架构、OpenFlow协议的细节,以及数据平面和控制平面的交互过程。让我们继续前进吧!
如果你觉得这篇笔记对你有帮助,欢迎点赞收藏~有问题也欢迎留言讨论,我们一起进步!