禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!
BGP 协议
BGP 的作用
上一篇博客谈了 OSPF 协议,该协议是 AS 内部路由选择协议,但是当分组需要跨越多个 AS 进行路由时,涉及到了多个 AS 之间的协调,就需要自治系统间的路由选择协议。在因特网中,所有的 AS 运行相同的路由选择协议——边界网关协议(BGP)。BGP 协议和 IP 协议在所有的互联网中,都是极其重要的协议,因为 BGP 协议能够将因特网数以千计的 ISP 粘合起来。
BGP 协议起到了什么作用呢?对于一个 AS 和 AS 内的某一个路由器,在路由器中有一个转发表,用于选择和确定分组在路由器的输出链路。对于分组需要发送到 AS 之外时,BGP 提供的并不是特定的目的地址,而是提供了一个通过 CIDR 得到的网络前缀,这个网络前缀能够标志一个子网或一个子网的集合。概括起来,BGP 的作用是:容许子网向路由器其余部分通告它的存在。
BGP 的任务
BGP 对于每一台路由器来说,需要完成 2 个任务:
- 从临近的 AS 获得前缀可达性信息:BGP 允许每个子网向因特网的其他部分告知自己的存在,同时 BGP 确保在因特网中所有的 AS 都知道该子网;
- 确定到达子网的最佳路由:路由器将在本地允许 BGP 路由选择过程,此时 BGP 协议需要基于网络前缀的可达性信息,向路由器提供最佳路由。
BGP 路由信息
现在我们的问题是:转发表需要 AS 内部路由算法与 AS 间路由算法共同配置,则不同的自治系统之间如何通信?首先考虑简单的情况,将整个 AS 看做一个整体,假设现在需要向所有路由器通告 3d 的可达性信息。首先 AS3 向 AS2 发送 BGP 报文,告知 3d 为与 AS3 中,接着 AS2 向 AS1 发送 BGP 报文告知 AS1 可以通过 AS2 访问 3d。通过这种我们熟悉的交互方式,就可以使所有 AS 知晓 3d 的存在并得到路径。
下面就来看看这个功能具体怎么实现,首先我们需要引入一些说法。对于每个 AS,每台路由器只有 2 种情况,即内部路由器或网关路由器,其中内部路由器仅链接在 AS 中的主机和路由器。网关路由器位于 AS 边缘,通过链路连接其他的 AS 的网关路由器。在 BGP 中,没对路由器都是使用 179 端口的半永久 TCP 连接交换路由信息,每条连接及其通过连接的报文被称之为 BGP 连接。由于 BGP 连接可能是 AS 内的,也可能存在于 AS 间,因此我们把跨越 2 个 AS 的 BGP 连接称之为外部 BGP(eBGP),相同 AS 中的两台路由器间的 BGP 连接称之为内部 BGP(iBGP)连接。
如图就给出了网关路由器、eBGP 和 iBGP 的示意,注意 iBGP 连接并不一定要与物理链路对应。
这里再提一下什么是 BGP 会话,就是两个 BGP 路由器交换 BGP 报文,通告去往不同目的前缀的路径。此时为了传播可达性信息,就可以通过 eBGP 和 iBGP 会话,还是刚才的例子,如图我们就可以看出可达性信息的实际传播流程。当路由器获得了新的前缀可达性信息时,就在其转发表中增加官员该前缀的入口。
实际情况往往会更为复杂,例如从某一路由器到某一目的地可能存在多条路径,通过了不同的 AS。此时 BGP 也允许 2 条路径同时存在,并且都有相关的路由信息被记录。
路由选择
如上文所述,从一个路由器到达一个目的子网可能存在多条路径,BGP 是怎么在这些路径中选择路径呢?
BGP 属性
BGP 连接通告前缀时,前缀及其属性被称之为路由,前缀中包含一些称之为“属性”的信息。我们着重关注 2 个重要的属性:
- AS-PATH:包含前缀通告所经过的 AS 序列,例如在上文中的 “AS2 AS3”。同时这个属性还可以用于检测和防止通告环路,尤其是路由器在该属性中发现包含了自己所在的 AS,这种通告会被直接拒绝;
- NEXT-HOP:即下一跳,这个属性表示的是 AS-PATH 起始路由器接口的 IP 地址。
有了这 2 个属性,对于一条 BGP 路由就包含了 3 个重要的组件:AS-PATH、NEXT-HOP 和目的前缀。
热土豆路由选择
对于 AS 间的路由选择,路由器要如何学习到那些网络可供转发?BGP 路由选择的原理是热土豆路由选择,即从所有路由中选择到开始该路由的 NEXT-HOP 路由器具有的最小开销作为学习的信息。通过热土豆路由选择添加 AS 外前缀的步骤如图所示,当 路由表学习可达性信息时,BGP 协议和 AS 内路由选择协议(OSPF 协议)需要协同工作。
热土豆路由选择的思想是:将分组发给最近的网关路由器,用尽可能最低开销将分组送出其所在 AS。之所以称之为热土豆,就是当分组被类比为“热土豆”时,由于烫手,所以我们要尽可能快地把“热土豆”扔给下一个人。因此热土豆路由选择是一种自私的算法,它只考虑到减小自己 AS 内传输分组的开销,但是忽略了 AS 外端到端的其他开销。
路由选择算法
BGP 路由选择的原理是热土豆路由选择,下面就看一下 BGP 实际使用的路由选择算法。首先如果只有一条路由,则 BGP 只能选择这条路由进行传输。当存在多条路由时,按照下面的消除规则,直到剩下一条路由:
- 比较本地偏好:路由会拥有一个本地偏好属性,该属性的值是一种策略性决定,它取决于 AS 的网络管理员。本地偏好信息可能从该路由器设置,或者相同 AS 中的其他路由器学习到,拥有较高本地偏好的路由会被选择;
- 选择最短 AS-PATH:值得一提的是若 BGP 只使用这个规则来选择路由的话, BGP 会使用 DV 算法来决定路径,此时度量路径的是 AS 的跳数;
- 使用热土豆路由选择:选择具有最靠近 NEXT-HOP 路由器的路由;
- 如果仍然剩下多条路由,参考 BGP 标识符选择。
通过这种算法,BGP 的路由选择可以考虑到尽可能低的开销,而不是自私的路由选择。
路由选择策略
情景模拟
我们可以看到在路由选择算法中,首先是根据本地偏好来选择路由,本地偏好将由本地 AS 策略来决定。为了理解本地偏好起到的作用,我们来看一个情景。其中 A、B、C 是提供商网络,X、W、Y 是客户网络,其中 W、Y 由于只和一个 AS 相连接被称之为桩网络,X 连接 2 个 AS 被称之为双宿网络。
双宿网络
首先我们关注双宿网络 X。由于提供商网络会提供 AS 间的路由服务,因此它们会交互彼此之间知道的路由信息。由于 B->C 的路由有 2 条,可以是 B->X->C,但是 x 作为一个客户只想要享受服务,而不愿意转发 B->C 的流量。此时 X 将不会通告 B 或 C 关于存在 B->X->C 路径的事实,规避转发 B->C 流量。
提供商网络
接下来关注提供商网络 B、C。由于提供商网络会提供 AS 间的路由服务,因此 A 会向 B 通告路径 A->W,而 X 是 B 的客户,B 会向 X 通告路径 B->A->W。
此时 B 会向 C 通告 B->A->W 路径吗?绝对不会,因为 W 和 C 都不是 B 的客户,B 转发非客户的数据报不会产生任何收益,B 希望强制 C 向 W 转发数据报时不通过 B。
虽然没有强制主干 ISP 之间的路由选择标准,但是商业运行的 ISP 们拥有约定俗成的规则——任何穿越 ISP 主干网的流量必须是源或目的位于该 ISP 的某个客户网络中。通俗的说,就是 ISP 仅为自己的客户提供服务,否则会出现蹭网络的“白嫖”行为。具体的协定,由 ISP 双方自行磋商,而且往往是对外保密的。
BGP 报文
BGP-4 共使用四种报文:
- 打开 (OPEN) 报文,用来与相邻的另一个网关路由器建立关系。
- 更新 (UPDATE) 报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
- 保活 (KEEPALIVE) 报文,用来确认打开报文和周期性地证实邻站关系。
- 通知 (NOTIFICATION) 报文,用来发送检测到的差错。
通用首部如下:
为什么有 AS 内/间路由选择协议?
最后我们解决一个问题:为什么所使用的的 AS 间和 AS 内路由选择协议是不同的?对于这个问题,我们从以下 3 个方面展开。
策略
在 AS 之间,策略会起到主导作用。一个给定的 AS 产生的流量不能穿过另一个特点的 AS,一个给定的 AS 也许会向控制它承载的其他 AS 之间穿越的流量。在一个 AS 内部,一切都是在相同的管理控制下进行的。
规模
通过层次路由可以节省路由表的大小,减少路由产生的流量。通过将单个较大的 ISP 分成多个 AS,可以适应大规模的互联网。
性能
AS 间路由选择是面向策略的,因此路由的性能问题往往不是首要的。但是在一个 AS 内部就可以忽视策略问题,把重心放在选择性能更好的路由上。
参考资料
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社