《计算机网络-自顶向下方法》5.4 ISP之间的路由选择:BGP 读书笔记

目录

  • 导语
  • [一、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邻居学到一条路由后,它会:

  1. 根据进口策略(import policy)决定是否接受这条路由
  2. 如果接受,把路由加入BGP路由表
  3. 通过iBGP通告给AS内的其他BGP路由器
  4. 根据出口策略(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设备):

  1. 权重(Weight):Cisco私有属性,本地有效,值越大越优。
  2. 本地优先级(LOCAL_PREF):AS内部传播,值越大越优。用于告诉AS内的路由器"优先走哪条出口"。
  3. 本地始发(Locally Originated):本路由器自己聚合或引入的路由优先于从邻居学到的。
  4. AS路径长度(AS Path Length):AS路径越短越优。
  5. 起源代码(Origin):IGP引入的优于EGP,EGP优于不完备的(incomplete)。
  6. MED(Multi-Exit Discriminator):值越小越优。用于告诉邻居AS"优先从哪个入口进我的AS",只在相邻AS之间传播。
  7. eBGP优于iBGP:从外部AS学到的路由优先于从AS内部学到的。
  8. 到下一跳的IGP度量:到下一跳的IGP代价越小越优。
  9. 最老的路由:先学到的路由优先(减少路由振荡)。
  10. 邻居BGP路由器ID:邻居ID小的优先。
  11. 邻居地址:邻居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):

  1. 你的电脑:把数据包发给默认网关(家里的路由器)。
  2. 家里的路由器:通过NAT转换,把数据包发给电信的BRAS设备。
  3. 电信AS(4134)内部:通过OSPF把数据包路由到电信的边界路由器。
  4. 电信边界路由器:通过BGP查找Google前缀(8.8.8.0/24)的最优路由。电信可能有多个出口到Google(直连对等、经过Cogent、经过NTT等),根据本地优先级和AS路径选择最优出口。
  5. eBGP通告:电信把数据包从选中的出口发给Google的边界路由器。
  6. Google AS(15169)内部:通过iBGP和OSPF把数据包路由到最近的服务器(通过IP任播选择)。
  7. 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协议的细节,以及数据平面和控制平面的交互过程。让我们继续前进吧!

  如果你觉得这篇笔记对你有帮助,欢迎点赞收藏~有问题也欢迎留言讨论,我们一起进步!

相关推荐
Delite8023 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
啊阿狸不会拉杆3 小时前
《计算机网络-自顶向下方法》4.6 小结、课后习题与Wireshark实验 读书笔记
计算机网络·wireshark·智能路由器
ACP广源盛139246256733 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256734 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
我爱cope4 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
OIDCAT5 小时前
国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
网络·嵌入式硬件·智能硬件·国产芯片·usb转千兆网卡
M--Y7 小时前
Docker数据持久化与网络架构
网络·docker·架构
zyf1044168 小时前
暑期实践日志 Day49:复盘题库出题成果,夯实章节考点
学习·计算机网络·剪辑·暑期实践·课题任务