4-6 路由选择
# 460.4-6 路由选择
路由器的重点:路由选择。
# 4.6.1 路由选择协议概述
本节课我们介绍路由选择协议的相关基本概念,路由选择可分为静态路由选择和动态路由选择两类:
- 静态路由选择是指采用人工配置的方式给路由器添加网络路由、默认路由、特定主机路由、黑洞路由等路由信息。
- 而动态路由选择是指路由器通过路由选择协议自动获取路由信息。
对于路由器自身而言,静态路由选择简单,开销小,但不能及时适应网络状态的变化;而动态路由选择比较复杂,开销比较大,但能较好的适应网络状态的变化。因此静态路由选择一般只在小规模网络中采用,而动态路由选择适用于大规模网络。
因特网是全球最大的互联网络,它所采用的路由选择协议具有以下三个主要特点,分别是自适应,分布式,分层次:
- 自适应:是指因特网采用的是动态路由选择,能较好的适应网络状态的变化
- 分布式:是指因特网中的各路由器,通过相互间的信息交互,共同完成路由信息的获取和更新
- 分层次:是指将整个因特网划分为许多较小的自治系统 AS,例如一个较大的因特网服务提供商,就可划分为一个自治系统,在自治系统内部和自治系统外部,采用不同类别的路由选择协议,分别进行路由选择
下面我们来举例说明,因特网采用的分层次路由选择协议,假设这是因特网中的很小的一部分,我们可以将这些网络和路由器划归到一个自治系统,而将这些网络和路由器划归到另一个自治系统。
- 自治之间的路由选择,简称为域间路由选择。自治系统内部的路由选择,简称为域内路由选择
- 域间路由选择使用外部网关协议 EGP 类别的路由选择协议,域内路由选择使用内部网关协议 IGP 这个类别的路由选择协议
需要说明的是外部网关协议 EGP 和内部网关协议 IGP 只是路由选择协议的分类名称,而不是具体的路由选择协议。另外名称中使用的是网关这个名词,是因为在因特网早期的 RFC 文档中没有使用路由器,而使用的是网关这一名词。
现在新的 RFC 文档中又改用路由器这一名词,因此外部网关协议 EGP 可改称为外部路由协议 ERP,内部网关协议 IGP,可改称为内部路由协议 IRP。本课程仍然采用 RFC 原先使用的名词,以方便大家查阅 RFC 文档。
在一个自治系统内部使用的具体的内部网关协议,与因特网中其他自治系统中选用何种内部网关协议无关。
例如在该自治系统内部使用的内部网关协议为路由信息协议 RIP,而在这个自治系统内部使用的内部网关协议为开放式最短路径优先 OSPF 协议。
自治系统之间使用的外部网关协议为边界网关协议 BGP。
接下来我们给出常见的路由选择协议,分为内部网关协议和外部网关协议两大类:
内部网关协议包括路由信息协议 RIP,内部网关路由协议 IGRP,增强型内部网关路由协议 EIGRP,开放式最短路径优先 OSPF,中间系统到中间系统 IS-IS
- RIP 和 IGRP 是基于距离向量的,RIP 是最早应用在因特网上的路由选择协议,IGRP 是思科早期私有的协议,现在已被 EIGRP 取代。
- OSPF 和 IS-IS 是基于链路状态的,OSPF 在各种网络中得到了广泛的使用,而集成化的 IS-IS 是 ISP 骨干网上最常用的内部网关协议。RIGRP 是思科私有的用来取代 IGRP 的混合型路由选择协议,它结合了距离向量和链路状态
而外部网关协议中最常见的仅有边界网关协议 BGP
IGP:Interior Gateway Protocol,内部网关协议
EGP:Exterior Gateway Protocol,外部网关协议
BGP:Border Gateway Protocol,边界网关协议
路由选择协议是在路由器上运行的,下面我们就来看看路由器的基本结构,如图所示,路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。
整个路由器结构可划分为两大部分,一个是路由选择部分,另一个是分组转发部分。
路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性的与其他路由器进行路由信息的交互,来更新路由表。
分组转发部分由三部分构成,分别是交换结构,一组输入端口,一组输出端口。
信号从某个输入端口进入路由器,物理层将信号转换成比特流,送交数据链路层处理,数据链入层从比特流中识别出帧去掉帧头和帧尾后,送交网络层处理。如果送交网络层的分组是普通代转发的数据分组,则根据分组首部中的目的地址进行查表转发,若找不到匹配的转发条目,则丢弃来分组,否则按照匹配条目中所指示的端口进行转发。
网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减一,然后送交数据链路层进行封装,数据链路层将数据分组封装成帧,送交物理层处理,物理层将帧看作是比特流,将其变换成相应的电信号进行发送。
如果送交网络层的分组,是路由器之间交换路由信息的路由报文则把这种分组送交路由选择处理机,路由选择处理机根据分组的内容来更新自己的路由表。路由表一般仅包含从目的网络到下一跳的映射,路由表需要对网络拓扑变化的计算最优化,而转发表是从路由表得出的,转发表的结构应当是查找过程最优化:
需要说明的是我们在之前的静态路由配置的相关课程中,并没有严格区分路由器中的路由表和转发表,这样有助于简化问题的分析。因此在后续有关路由选择协议的课程中,我们仍然不严格区分路由表和转发表,还是以路由表来表述问题。
路由选择处理机除了处理收到的路由报文外,还会周期性的给其他路由器发送自己所知道的路由信息。
路由器的各端口还应具有输入缓冲区和输出缓冲区,输入缓冲区用来暂存,新进入路由器,但还来不及处理的分组,
输出缓冲区用来暂存,已经处理完毕,但还来不及发送的分组。
需要说明的是路由器的端口一般都具有输入和输出的功能。我们图中分别给出输入端口和输出端口,目的在于更好的演示路由器的基本工作过程,使同学们更容易理解。
本节课的内容小结如下:
# 4.6.2 路由信息协议 RIP 的基本工作原理
我们介绍路由信息协议,RIP 的基本工作原理,路由信息协议 RIP 是内部网关协议中最先得到广泛使用的协议之一,其相关标准文档为 RFC 1058,RIP 要求自治系统内的每一个路由器都要维护从他自己到自治系统内其他每一个网络的距离记录,这是一组距离,称为距离向量。
RIP 使用跳数作为度量来衡量到达目的网络的距离。我们来举例说明,RIP 将路由器到直连网络的距离定义为 1,例如图中的路由器 R1 到其直连网络 N1 的距离为 1。
RIP 将路由器到非直连网络的距离,定义为所经过的路由器数加一。
例如图中的路由器 R3,到其非直连网络 N2 的距离为 2。
RIP 允许一条路径,最多只能包含 15 个路由器,距离等于 16 时,相当于不可达。因此 RIP 只适用于小型互联网。
需要说明的是有些厂商的路由器并没有严格按照 RIP 标准文档的规定来实现 RIP,例如思科路由器中的 RIP,将路由器到直连网络的距离定义为零,但这并不影响 RIP 的正常运行。
RIP 认为好的路由距离短的路由,也就是所通过路由器数量最少的路由,如图所示,从 R1 到 R5 可以走这条路由,也可以走这条路由,RIP 认为 R1 到 R5 的好路由是图中只经过一个路由器 R4 的这条路由,尽管这条路由上各段链路的带宽都非常小。
再来看这个例子,从 R1 到 R6 可以走这条路由,也可以走这条路由,而这两条路由是等价的,RIP 该如何选择?当到达同一目的网络,有多条距离相等的路由时,RIP 可以进行等价负载均衡,也就是将通信量均衡的分布到多条等价的路由上。
RIP 包含以下三个要点:
第一个要点是和谁交换信息?答案是仅和相邻路由器交换信息。我们来举例说明相邻路由器的概念,下图中 R1 与 R2 故为相邻路由器,因为它们是直连的,中间没有其他路由器
同理,R2 与 R3 也互为相邻路由器,但是 R1 与 R3 不是相邻路由器,因为它们之间还存在其他路由器
第二个要点是交换什么信息?答案是路由器自己的路由表
第三个要点是何时交换信息,答案是周期性交换,例如每 30 秒发送一次 RIP 更新报文
接下来我们举例说明 RIP 的基本工作过程:
路由器刚开始工作时,只知道自己到直连网络的距离是 1 如图所示,这是各路由器刚开始工作时各自的路由表,
其中包含的路由条目都是到达各自直连网络的信息,其距离都是 1
之后每个路由器仅和相邻路由器周期性的交换,并更新路由信息。如图所示 R1 和 R2 互为相邻路由器,R1 和 R3 互为相邻路由器,R2 和 R3 互为相邻路由器,R 和 R4 互为相邻路由器,R3 和 R4 也互为相邻路由器
若干次交换和更新后,每个路由器都知道到达本自治系统内各网络的最短距离和下一跳地址,这称为收敛。如图所示
接下来我们举例说明 RIP 的路由条目更新规则,路由器 C 和 D 互为相邻路由器,它们之间周期性的交换并更新路由信息。
这是路由器 C 的路由表,其中到达各目的网络的下一跳都记为问号。可以理解为路由器 D 并不需要关心路由器 C 的这些内容。
这是路由器 D 的路由表。假设路由器 C 的 RIP 更新报文发送周期到了,则路由器 C 将自己路由表中的相关路由信息封装到 RIP 更新报文中,发送给路由器 D。我们可以简单的理解为路由器 C 将自己的路由表发送给了路由器 D。
路由器 D 收到后对其进行改造,将到达各目的网络的下一跳,都改为 C 距离都增加 1,这样的操作很容易理解,因为路由器 C 告诉 D,它可以到达这些目的网络,那么路由器 D 作为 C 的邻居路由器,当然也就可以通过 C 来到达这些目的网络,只是比 C 到达这些目的网络的距离大 1,路由器 D 现在可以根据改造好的路由表来更新自己先前的路由表了。
更新过程:
路由器 D 原来到达网络 N2 的距离是二,下一跳经过路由器 C 的转发。
现在路由器 D 知道了,到达网络 N2 仍然经过 C 的转发,距离变为了 5,也就是说 C 与 N2 之间的网络拓扑发生了变化,于是将自己这条路由条目中的距离更新为 5。
更新路由表的理由可总结为到达目的网络相同的下一跳,最新的消息应该更新。
路由器 D 原来不知道网络 N3 的存在,现在路由器 D 知道了,可通过路由器 C 到达网络 N3,于是将该路由条目添加到自己的路由表中
更新路由表的理由可总结为发现了新的网络添加
路由器 D 原来到达网络 N6 的距离是 8,下一跳,经过路由器 F 的转发,现在路由器 D 知道了,到达网络 N6,如果通过 C 来转发,则距离可缩短为 5,于是将自己这条路由条目中的距离修改为 5,下一跳修改为 C
更新路由表的理由可总结为到达目的网络不同的下一跳,新路由有优势,应该更新
路由器 D 原来到达网络 N8 的距离是 4,下一跳,经过路由器 E 的转发,现在路由器 D 知道了,到达网络 N8 还可以通过 C 来转发,距离也为 4,于是将该路由条目添加到自己的路由表中。
更新路由表的理由可总结为到达目的网络不同的下一跳,但距离相等,进行等价负载均衡。路由器 D 原来到达网络 N9 的距离 14,下一跳经过路由器 F 的转发,现在路由器 D 知道了,到达网络 N9,如果通过 C 来转发,则距离扩大为 6,于是不使用这条路由条目来更新自己的路由表,不更新。
路由表的理由可总结为到达目的网络,不同的下一跳,新路由劣势,不应该更新。
接下来请同学们参看我们之前的举例,来完成这道习题:
再来看这道相关的考研题,这是计算机专业考研全国统考计算机网络部分 2010 年的题 35,答案是选项 D
在 RIP 协议中距离 16 被定义为目的网络不可达,因此而无法到达 NET1,R1 也无法通过 R2 到达 NET1。
下面我们介绍 RIP 协议存在的坏消息传的慢的问题,如图所示:
- 假设 R1 到达其直连网络 N1 的链路出现了故障,当 R1 检测出该故障后,会将到达 N1 的路由条目中的距离修改为 16,表示 N1 不可达,并等待 RIP 更新周期到时后,发送该路由信息给 R2
- 而此时 R2 的路由表中,关于 N1 的路由条目仍然是先前通过 RIP 协议获取到的,也就是到达 N1 的距离为 2,下一跳通过 R1 转发
- 假设 R2 的 RIP 更新周期先到时,也就是 R2 的这条路由信息先到达 R1,而 R1 的这条路由信息一段时间后才到达 R2
- 当 R1 收到 R2 的这条路由信息后就会被该谣言误导,认为可以通过 R2 到达 N1 距离为 3,并在自己的 RIP 更新周期到时后,将这条路由信息发送给 R2
- 当 R2 收到 R1 的这条路,由信息后被该谣言误导,认为可以通过 R1 到达 N1,距离为 4,并在自己的 RIP 更新周期到时后将这条路由信息发送给 R1
- 当 R1 收到 R 的这条路由信息后被该谣言误导,认为可以通过 R2 到达 N1,距离为 5,并在自己的 RIP 更新周期,到时后将这条路由信息发送给 R2
- 很显然只有 R1 和 R2 的路由表中到达 N1 的路由条目中的距离都增加到 16 号,R1 和 R2 才都知道 N1 不可达,也就是才收敛
- 在该过程中,R1 和 R2 之间会出现路由环路,时间长达数分钟,有关路由环路的问题,我们在之前的静态路由配置的相关课程中已经介绍过了,此处就不再赘述了
坏消息传的慢,要称为路由环路或距离无穷技术问题,这是距离向量算法的一个固有问题,可以采取多种措施,减少出现该问题的概率,或减少该问题带来的危害。例如限制最大路径距离为 15。
当路由表发生变化时,就要立即发送更新报文及触发更新,而不仅是周期性发送,让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送,即水平分割。
请注意使用上述措施后,也不能彻底避免路由环路问题,这是距离向量算法的本质所决定的。
最后我们再来练习一道相关的考研题,这是 2016 年的题 37,答案是选项 B。
- 根据题目所给,R3 检测到网络 201.1.2.0/25 不可达可知 R3 与该网络是直连的,如图所示
- 又根据题目所给,R1,R2,R3 采用 RIP 协议交换路由信息,且均已收敛,可知先前他们各自的路由表中关于该目的网络的路由条目如下所示
- 再根据题目所给,R3 检测到网络 201.1.2.0/25 不可达,并向 R2 通告一次新的距离向量可知 R3 与该网络之间的链路出现了故障,
当 R3 检测到该故障时,将自己到达该网络的路由条目中的距离修改为 16,表示该网络不可达,并向 R2 发送关于这条路由条目的通告 - R2 收到后更新自己相应的路由条目,将距离修改为 16。
- 最后根据题目所给,则 R2 更新后这句话可知,R1 给 R2 发送了关于该路由条目的 RIP 更新报文,而 R2 听信了该谣言,误认为到达该目的网络可以通过 R1 的转发距离为 3
小结:
# 4.6.3 开放最短路径优先 OSPF 的基本工作原理
本节课我们介绍开放最短路径优先 OSPF 协议的基本工作原理,开放最短路径优先 OSPF 协议是为克服 RIP 协议的缺点,在 1989 年开发出来的。
开放表明 OSPF 不是受某一厂商控制的,而是公开发表的;最短路径优先,是因为使用了迪杰斯特拉提出的最短路径算法 SPF。
OSPF 是基于链路状态的,而不像 RIP 那样,是基于距离向量的。
OSPF 采用最短路径优先算法计算路由,从算法上保证了不会产生路由环路。
OSPF 不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价,代价用来表示费用,距离时延、带宽等等,这些都是由网络管理人员来决定的。
我们来举例说明,在思科路由器中,OSPF 计算代价的方法是用 100 兆比特每秒除以链路带宽,计算结果小于 1 的值仍记为 1,大于 1 且有小数的舍去小数。我们来看看图中各路由器的链路状态,R1 的邻居路由器有 R2,相应的链路代价用 100 兆比特每秒除以链路带宽 100 兆比特每秒,结果是 1
R1 的邻居路由器还有 R4,相应的链路代价用 100 兆比特每秒除以链路带宽 1G 比特每秒,计算结果小于一,但仍记为 1,相信同学们可以很容易的得出其他各路由器的链路状态,我们就不再赘述了。
OSPF 相邻路由器之间通过交互问候分组来建立和维护邻居关系。如图所示。问候分组需要封装在 IP 数据报中发送,发往组播地址 224.0.0.5,IP 数据报首部中的协议号字段的取值应为 89,来表明 IP 数据报的数据载荷为 OSPF 分组,问候分组的发送周期为 10 秒,若 40 秒仍未收到来自邻居路由器的问候分组,则认为该邻居路由器不可达。
因此每个路由器都会建立一张邻居表,例如这是路由器 R1 的邻居表,其中的每一个条目对应记录其各邻居路由器的相关信息,包括邻居 ID,接口以及死亡倒计时。
例如 R2 是 R1 的一个邻居路由器,为简单起见,邻居 ID 就记为 R2 实践中应填写相应的路由器 ID,该邻居路由器与自己的接口 1 相连,将接口号记为 1,死亡倒计时还剩 36 秒,若在死亡倒计时到达 0 之前,再次收到了来自 R2 的问候分组,则重新启动针对该邻居条目的 40 秒死亡倒计时,否则当死亡倒计时为 0,则判定该邻居路由器不可达。
R4 是 R1 的另一个邻居路由器,邻居 ID 记为 R4,该邻居路由器与自己的接口 0 相连,将接口号记为 0,死亡倒计时还剩余 18 秒。
使用 OSPF 的每个路由器都会产生链路状态通告,其中包含以下两类内容,一类是直连网络的链路状态信息,另一类是邻居路由器的链路状态信息。
假设 N1 是路由器 R4 的直连网络,则 R4 的链路状态通道应包含 R4 与该直连网络的链路状态信息,还应包含其邻居路由器 R1 的链路状态信息,以及其邻居路由器 R3 的链路状态信息。链路状态通告被封装在链路状态更新分组中,采用洪泛法发送。收到链路状态更新分组的路由器,将从自己其他所有接口转发该分组,也就是进行洪范转发,如图所示。
这样自制系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有路由器。
使用 OSPF 的每个路由器都有一个链路状态数据库,用于存储链路状态通道,通过各路由器洪范发送封装有自己链路状态通道的链路状态更新分组,各路由器的链路状态数据库最终将达到一致。
例如这是路由器 R2 的链路状态数据库,其中记录有系统中各路由器的链路状态通道。
使用 OSPF 的各路由器,基于链路状态数据库进行最短路径优先计算,就可构建出各自到达其他各路由器的最短路径,也就是构建出各自的路由表。
例如有这样一个网络拓扑,各链路旁的数字表示代价。通过各路由器洪范发送封装有自己链路状态通告的链路状态更新分组,各路由器最终会得出相同的链路状态数据库,由链路状态数据库可以得出带权有向图,对该图进行基于迪杰斯特拉的最短路径优先算法,就可以得出以各路由器为根的最短路径,如图所示:
对于这样一个比较简单的网络拓扑,即使大家不懂得最短路径优先算法,也可以很快找出每个路由器到达其他各路由器的最短路径。但是如果网络拓扑比较复杂,该项工作对人类而言就比较复杂了,因此可以按照迪杰斯特拉提出的最短路径优先算法,编制程序,让路由器执行该程序。如果大家对该算法感兴趣,可以自行查阅相关资料,我们就不再赘述了。
对于一般的网络工程师,即便不熟悉该算法,也不影响对 OSPF 协议的配置和使用。OSPF 包含以下 5 种分组类型:
- 类型一是问候分组,用来发现和维护邻居路由器的可达性
- 类型二是数据库描述分组,用来向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 类型三是链路状态请求分组,用来向邻居路由器请求发送某些列入状态项目的详细信息
- 类型四是链路状态更新分组,路由器使用这种分组,将其链路状态进行洪范发送,即用洪范法对全网更新链路状态
- 类型 5 是链路状态确认分组,这是对链路状态更新分组的确认分组
接下来我们来举例说明 OSPF 协议的基本工作过程,相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系。
建立邻居关系后,给邻居路由器发送数据库描述分组,也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器。例如 R1 收到 R2 的数据库描述分组后,发现自己缺少其中的某些链路状态项目,于是就给 R2 发送链路状态请求分组。
R2 收到后,将 R1 所缺少的链路状态项目的详细信息,封装在链路状态更新分组中发送给 R1。R1 收到后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中,并给 R2 发送链路状态确认分组。需要说明的是 R2 也可以像 R1 请求自己所缺少的链路状态项目的详细信息。
这里我们就要不再演示该过程了,最终 R1 和 R2 的链路状态数据库将达到一致,也就是链路状态数据库达到同步。
每 30 分钟或链路状态发生变化时,路由器都会发送链路状态更新分组,收到该分组的其他路由器,将洪范转发该分组,并给该路由器发回链路状态确认分组,这又称为新情况下的链路状态数据库同步。
当 OSPF 路由器在多点接入网络中建立邻居关系时,如果不采用其他机制,将会产生大量的多播分组。例如这 5 台路由器连接在同一个多点接入网络中,他们周期性的发送问候分组,以建立和维护邻居关系。这些路由器中的任意两个路由器都互为邻居关系,如图所示,邻居关系的数量为 N 乘以 N-1,然后再除以 2,其中 N 是路由器的数量,这样每个路由器要向其他 N-1 个路由器发送问候分组和链路状态更新分组。
为了减少所发送分组的数量,OSPF 采用选举指定路由器 DR 和备用的指定路由器 BDR 的方法。如图所示,假设这两台路由器被分别选举为 DR 和 BDR,所有的非 DR,BDR 只与 DR,BDR 建立邻居关系,如图所示。
因此之前的邻居关系数量降低为 2×(N-2),再加 1。非 DR / BDR 之间不能直接交换信息,而必须通过 DR / BDR 进行交换。若 DR 出现问题,则由 BDR 顶替 DR。
实现 DR 和 BDR 的选举并不复杂,无非就是各路由器之间交换一些选举参数,例如路由器优先级、路由器 ID,接口 IP 地址等,然后根据选举规则选出 DR 和 BDR,这与交换机生成树协议,选举跟交换机类似,我们就要不再赘述了。
为了使 OSPF 协议能够用于规模很大的网络,OSPF 把一个自治系统在划分为若干个更小的范围,称为区域。
如图所示,这是一个规模很大的网络,我们将其划分成一个自制系统,在该自治系统内,所有路由器都使用 OSPF 协议,OSPF 将该自治系统再划分成 4 个更小的区域,每个区域都有一个 32 比特的区域标识符,可以用点分十进制表示,例如主干区域的标识符必须为 0,也可表示成点分 10 进制形式的 0.0.0.0,主干区域用于联通其他区域,其他区域的标识符不能为 0,且互不相同。
每个区域的规模不应太大,一般所包含的路由器不应超过 200 个,划分区域的好处就是把利用洪范法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统,这样就减少了整个网络上的通信量。
如果路由器的所有接口都在同一个区域内,则该路由器称为区域内路由器。为了本区域可以和自治系统内的其他区域联通,每个区域都会有一个区域边界路由器,它的一个接口用于连接自身所在区域,另一个接口用于连接主干区域。
主干区域内的路由器称为主干路由器。我们也可以把区域边界路由器看作是主干路由器。
在主干区域内还要有一个路由器,专门和本自制系统外的其他自治系统交换路由信息,这样的路由器成为自治系统边界路由器。在本例中区域边界路由器 R3 向主干区域发送自己所在区域一的链路状态通告,向自己所在区域发送区域 023 的链路状态通告,区域边界路由器 R4 向主干区域发送自己所在区域二的链路状态通道,向自己所在区域发送区域 013 的链路状态通告。
区域边界路由器 R7,向主干区域发送自己所在区域三的链路状态通告,向自己所在区域发送区域 0,1,2 的链路状态通道,采用分层次划分区域的方法,虽然使交换信息的种类增多了,同时也使 OSPF 协议更加复杂了,但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于规模很大的自治系统中。
本节课的内容小结如下:
# 4.6.4 边界网关协议 BGP 的基本工作原理
本节课,我们介绍边界网关协议 BGP 的基本工作源理。在之前的课程中我们已经介绍过了,因特网采用分层次的路由选择协议,内部网关协议这一类别的协议,用于自治系统内部的路由选择,典型的协议有路由信息协议 RIP 和开放最短路径优先 OSPF ,我们已在之前的课程中介绍过他们的基本工作源理,他们都是设法使分组,在一个自治系统内部,尽可能有效的从源网络传输到目的网络,无需考虑自治系统外部其他方面的策略。
外部网关协议这一类别的协议用于自治系统之间的路由选择。典型的协议是边界网关协议 BGP。在不同自治系统内,度量路由的代价可能不同,因此对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是不可行的。
我们来举例说明,各自治系统的连接关系如图所示,其中自治系统 AS1 将时延作为度量,AS2 将距离也就是跳数作为度量,AS3 将链路带宽作为度量,那么 AS4 可以通过哪些路径到达 AS5 呢?
可以走这条路径,也就是说 AS4 可以通过 1AS3 到达 AS5;
也可以走这条路径,也就是说 AS4 可以通过 AS1AS2 到达 AS5,当然还可以有其他路径,我们就要不再一一列出了。
那么这些路径中哪一个是最佳路由呢?由于没有统一的路由度量,因此寻找最佳路由是无意义的。
自治系统之间的路由选择还必须考虑相关策略。例如我国国内的站点在互相传送数据报时,不应经过国外兜圈,特别是不要经过某些对我国的安全有威胁的国家;
又例如自治系统 AS4,要发送数据报给 AS5,本来最好是依次经过 S1S3,但是 AS3 不愿意让这些数据报经过自己自治系统内的网络,因为这是那两个自治系统的事情,与我这个自治系统无关。而 AS2 愿意让某些相邻自治系统的数据报,通过自己的网络,只要支付相应的服务费用即可。
由此可见,自治系统之间的路由选择协议,应当允许使用多种路由选择策略,这些策略包括政治、经济、安全等,他们都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。
基于上述情况,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由,也就是不能兜圈子,而并非要寻找一条最佳路由。
我们来举例说明,在配置 BGP 时,每个自治系统的管理员要选择至少一个路由器,作为该自治系统的 BGP 发言人,一般来说两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,不同自治系统的 BGP 发言人要交换路由信息,首先必须建立 TCP 连接,端口号为 179,在此 TCP 连接上交换 BGP 报文,以建立 BGP 会话,利用 BGP 会话交换路由信息,例如增加新的路由或撤销过时的路由,以及报告出错的情况等,使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此称为对方的邻站或对等站。
BGP 发言人除了运行 BGP 协议外,还必须运行自己所在自治系统所使用的内部网关协议,例如 OSPF 或 RIP。
BGP 发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略,从收到的路由信息中,找出到达各自治系统的较好的路由,也就是构造出树形结构,不存在环路的自治系统连通图。
如图所示,这是自治系统 A 的某个 BP 发言人,构造出的自治系统联通图:
边界网关协议 BGP 适用于多级结构的因特网。这里我们给出一个 BGP 发言人交换路径向量的例子,自治系统 AS2 的 BP 发言人,通知主干网的 BGP 发言人,要到达网络 N1、N2、N3 和 N4,可经过 AS2。
主干网在收到这个通知后就发出通知,要到达网络 N1、N2、N3 和 N4,可沿路径 AS1AS2,这里的路径 AS1、AS2 称为路径向量。
自治系统 AS3,收到这条路径向量信息后,如果 AS3 自身也包含在其中,则不能采用这条路径,否则会兜圈子。
接下来我们介绍 BGP 版本 4 中规定的 4 种报文。
- 打开报文用来与相邻的另一个 BGP 发言人建立关系,是通信初始化
- 更新报文,用来通告某一路由的信息,以及列出要撤销的多条路由
- 保活报文用来周期性的证实临站的连通性
- 通知报文用来发送检测到的差错
在 BGP 协议刚刚运行时,BGP 的临站交换整个 BGP 路由表,但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销都有好处。
这是计算机专业考研全国统考计算机网络部分 2013 年提 47 的第 3 问,我们来一起分析一下图中的 R1 和 R2,分别位于两个不同的。自治系统 AS1 和 AS2 中,自治系统之间需要使用外部网关协议 EGP 这一类协议,具体为边界网关协议 BGP。目前使用最多的版本是 BGP4,BGP4 的报文,被封装在 TCP 报文段中进行传输。
再来看 2017 年的题 37 答案是选项 D 本题并没有什么计算过程和解答技巧,需要大家记住下图所示的封装关系即可:
将本节课的内容小结如下,需要说明的是 BGP 协议非常复杂,很多内容都超出了本系列课程的教学目标,因此不再深入讨论,有兴趣的同学可查阅 RFC4271 文档。