本节书摘来自异步社区《OSPF网络设计解决方案(第2版)》一书中的第2章,第2.1节,作者 【美】Thomas M. Thomas II, CCIE #9360,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.1 什么是路由协议
OSPF网络设计解决方案(第2版)
路由协议的产生需要经历一系列的过程:通过RFC(征求评议,Request for Comments)流程,并最终成为正式化的协议。该流程包括对一项提议技术征求公开的成文评议,并努力对该技术进行完善和标准化。由RFC 2328所定义的OSPF便是路由协议标准化的例子。
注意
如需查阅具体的RFC文档内容,你可以登录下面的网站,并通过RFC编号或关键字进行检索:http://www.rfc-editor.org/rfc.html。
学习 OSPF 的基本目的是掌握如何正确地部署 OSPF,从而使得数据包能够从网络中的一台系统传递到另一台系统。从路由器的角度而言,我们可以将该过程总结为2个步骤,即转发和路由。
转发——该过程是指路由器从接口接收到数据包,并知道数据包应当从哪个接口发出,才能使得该数据包最终到达目的地。但是,转发行为完全取决于路由器是否知道如何发送数据包;如果路由器不知道如何转发,那么它将选择丢弃数据包。
路由——为了使得路由器获知数据包转发的方向,那么它需要一条路由或一张地图来指示从源到目的地的路径。路由可以通过静态配置产生,也能够动态地学习到;在这里,你只需要关心动态的路由即可。OSPF是一种动态路由协议,当路由器运行OSPF时,它能够动态地产生并学习到去往网络内所有目的地的路由。你可以通过查看路由器的路由表来查看这些路由。
路由协议可以被分为以下两类:
被动路由协议——通过路由器来转发数据的协议(也称为网络协议)。路由器必须能够根据被动路由协议对路由器正确运行的指示来理解逻辑网络。最为常见的被动路由协议就是Internet协议(IP),另外还包括AppleTalk和DECnet等。被动路由协议需要依靠路由协议生成网络的路由表,才能进行数据的传输。
动态路由协议——使用路由算法来完成动态路由选择的协议。动态路由协议负责支持被动路由协议并维护路由表。通过在网络中分发路由信息,动态路由协议动态地交换网络路径和拓扑信息。动态路由协议包括OSPF、增强型内部网关路由协议(EIGRP)和路由信息协议(RIP)等。
被动路由协议,例如IP协议,被用于作为网络设备之间通信的工具。使用路由协议,如支持被动路由协议 IP 的 OSPF,能够构建所有设备两两互通的网络。例如,如上所述,IP 是一种被动路由协议,你可以使用 OSPF 或 RIP 作为IP的路由协议。
总的来说,动态路由协议是一系列标准化的规则,用于帮助路由器决定路由选择。路由协议构建路由表,并告诉路由器去往目的地的最优路径。路由协议通过比较一种数值,即度量,来决定最优的路由(有时也称为路径)。度量是代表路由路径特点的数值,可以被看作是开销(cost);因此,该数值解释了传输链路的开销。这些信息被存储在路由表中,被路由器用于决定去往目的网络的最优路由。
2.1.1 基本路由分类
考虑这样的情景:一台路由器最初配置了两个直连的网络,则该路由器在其路由表中只有这两个网络的路由信息。其他非直连的网络默认不会进入路由表中,因为这些网络对于路由器而言并不是直接相连的(即直接感知)。那么路由器如何获知这些非直连的网络呢?你可以使用下面的方法做到。
静态路由——通过手动定义并部署于路由器上的路由类型,能够提供去往给定目的地的唯一路径。这种类型的路由在路由表中静态地指定了目的地,并且相比动态路由协议所生产的路由条目,它拥有更高的路由选择优先级。图2-1显示了应当在何处配置静态路由和如何实施的例子。在中到大型网络环境中,静态路由并不是一种有效的路由解决方案。因为使用静态路由来维持这种规模网络的正常运行所需的工作量是非常巨大的。静态路由最常用于末节网络,如图2-1所示。如果静态路由能够与OSPF等动态路由协议协同工作,那么这会是很好的一种选择。
默认路由——在路由器上通过手动定义的路由类型,提供去往所有未知目的地的路径1。负责发送默认路由信息的路由器也被称为默认路由器或默认网关。图2-2展示了默认路由的使用。通过使用默认路由,路由选择可以变得更加容易。
图2-2中,路由器B收到的所有流量都将发送给路由器A的 S0 接口,只要这些流量不是去往连接于接口E0的192.168.254.0/24网络的。
动态路由——使用路由算法分析来自于一个或多个路由协议的路由更新消息,从而决定去往目的地的最佳路径。这种类型的路由的最大优势在于,路由选择的结果能够自动适应网络拓扑的更变。
动态路由是最为常用的路由选择方法。相应地,也存在一些定义动态路由是如何操作的术语和特性,例如收敛和精确度。
在动态路由中,路由表必须能够根据反应网络拓扑最新的、精确的相关信息,立即作出更新反应。每一台网络路由器的路由表完成更新反应的时间总和,被称为收敛时间。在这里,收敛一词是指网络中所有路由器的路由表为了拥有一致的信息(未进行汇总或过滤等操作)并保持稳定状态所执行的动作。
我们期望路由协议拥有快速的收敛时间,因为当路由器在计算新的最佳路径时,路由条目将处于不可用状态。
2.1.2 链路状态和距离矢量路由协议
本节阐述支持 TCP/IP 协议簇的两种最为重要且常用的路由协议,即 RIP和 OSPF。同时,本节还将对链路状态和距离矢量这两种路由算法谁更优越展开讨论。
注意
链路状态和距离矢量路由协议也被称为内部网关协议(IGP),本书将在第10章讨论OSPF和边界网关协议(BGP)的交互时再对这一概念进行详细阐述。
IGP是指在自治系统(AS)内部使用动态路由协议交换路由信息的路由协议。常用IGP协议包括EIGRP、OSPF、中间系统到中间系统(IS-IS)和RIP。你可以通过对比IGP与外部网关协议(如BGP)的区别来加深理解。
1.链路状态路由协议
链路状态算法(也被称为最短路径优先算法)只泛洪最近一次路由表更新所引起的增量更变部分。在进行增量更新时,每一台路由器只发送描述其自有链路状态发生更变的部分路由信息,而不是整个路由表。
链路状态路由协议需要路由器周期性地向网内邻居路由器发送路由更新2。另外,相比距离矢量协议,链路状态路由协议能够更快地收敛网络中产生的路由更新。
这种快速收敛的速度使得链路状态协议相比距离矢量协议存在更少路由环路的几率。但是,链路状态协议却需要消耗更多的CPU和系统内存资源。其主要原因之一,是由于链路状态协议是基于分布式的地图概念,也就是说每一台路由器都拥有一份定期更新的网络地图的拷贝。除此以外,链路状态协议的路由表大小、区域中路由器的数量以及路由器之间邻接关系的数量都将影响到路由器内存和CPU的利用率。在老式的全互连异步传输模块(ATM)网络中,这些因素的影响尤为明显,因为一些路由器可能拥有 50 个或者更多的OSPF邻接对等体,如此庞大的邻接数量将导致路由器的性能下降。
链路状态协议基于链路状态算法,该算法也被称为最短路径优先(SPF)或Dijkstra算法。本章后续“SPF操作原理”一节将对SPF算法进行详细的介绍。
为了理解链路状态算法是如何操作的,你可以将网络想象成一张大的智力拼图;拼图中拼图碎片的数量取决于当前网络的大小。每一块拼图碎片只能看作是一台路由器或一个LAN。每一台路由器“描绘”着自己在拼图中的情况,包括与其他路由器和 LAN 之间的方向关系。然后,这些碎片信息被路由器复制,并不断地在网络路由器之间发送(通过链路状态通告[LSA]),直到每一台路由器都拥有了一份完整的和正确的拼图碎片。最后,每一台路由器使用SPF算法将这些拼图碎片进行重组。
注意
链路状态路由的原则是,同一个区域内的所有路由器都维护着一份相同的网络拓扑信息拷贝。利用这份拓扑地图,每一台路由器都将执行一系列的运算,从而决定最优路由。网络拓扑信息被存储于链路状态数据库中,其中,每条数据库条目都描绘了网络中连接到某个节点的链路状态信息。
链路状态数据库中的条目包含了以下信息:
接口ID;
链路数量;
关于链路状态的度量信息。
正是利用这些信息,每一台路由器才能够非常迅速地计算出从自己到所有其他路由器的最短路径。
SPF算法决定了各种拼图碎片应该如何组装在一起。图2-3总结并阐明了上述过程是如何操作完成的。
链路状态协议,如 OSPF,在首次成为活动状态时,它将在链路状态数据包中泛洪所有的路由信息。当网络收敛以后,它仅通过链路状态数据包发送少量的更新。
2.OSPF的特点
OSPF 是一个链路状态协议,它需要在 OSPF 路由选择域内的所有路由器之间交换信息,并以此获知网络的完整拓扑信息。由于每一台路由器都拥有网络的完整拓扑,所以在此基础上使用SPF算法将使得网络能够极快地完成收敛。OSPF还拥有其他的一些关键特点,如下所示。
为TCP/IP协议簇中的IP协议提供路由选择信息,这一点和RIP协议一致。
仅向其他路由器发送路由表更新内容,而不是整个路由表。
随着运行时间的增加,和RIP相比,OSPF 显得更加经济有效,因为 OSPF仅发送少量的网络流量。
“看情况而定规则”
有时候我会使用一条自己所发明的规则,这条规则被我命名为“看情况而定规则”,现在我将对这一规则进行说明。当网络处于稳定状态时,对于路由信息的交换,OSPF通常比RIP更具效率;但是这种说法的正确性取决于网络的实时状态。例如,如果因外部网络发生变化而引起收敛,那么OSPF将比RIP泛洪更多的流量。因为RIP在每个更新包中可以携带25条路由条目;而OSPF必须为收敛过程中受到影响的每一条外部路由条目都泛洪一条LSA。由此可见,如果当前网络处于(相对)稳定的状态,OSPF将消耗较少的流量;随着运行时间的增加和统计学的角度而言,它将比RIP更加经济有效。虽然,使用一条LSA来表示一条外部路由条目的做法效率较低,但是OSPF并不是设计用于EGP(边界网关协议)的。因此,如果存在大量外部路由的情况,推荐你使用OSPF/BGP的部署方案。
另一个基于 Dijkstra SPF 算法的常见动态路由协议便是 IS-IS。使用 IS-IS 还是OSPF的问题,在网络领域曾经进行过激烈地讨论。
3.集成中间系统到中间系统(IS-IS)
IS-IS是一个分层的OSI链路状态路由协议,基于最初由数字设备公司(DEC)开发的DECnet/OSI(DECnet Phase V)算法。该协议在网络内泛洪链路状态信息,并构建完整及一致的网络拓扑图。
国际标准化组织(ISO)为开放式系统互连(OSI)协议簇开发了以下路由协议:
中间系统到中间系统(IS-IS)协议;
终端系统到中间系统(ES-IS)协议;
域间路由选择协议(IDRP)。
你可以访问 www.ietf.org 站点查找相应的 RFC 文档来获取有关 IDRP 或ES-IS的详细信息。
美国国家标准协会(ANSI)X3S3.3(网络及传输层)任务组为IS-IS协议的ISO标准化做出了重要贡献。最初的IS-IS仅被开发用于在ISO无连接网络协议(CLNP)的网络中执行路由选择,但是随着新的IS-IS协议版本的出现,它能够同时支持CLNP和IP网络。这种新的IS-IS协议通常被称为集成IS-IS;该版本也是本节所要讨论的IS-IS版本。
OSI路由协议是由一些 ISO 文档进行总结定义的;和 IS-IS 相关的文档如下。
ISO 10589:IS-IS标准定义。
RFC 1195:中间的IS-IS。
4.距离矢量路由协议
距离矢量的含义是:路由器之间发送的信息是包含了去往目的地的距离和矢量的路由表条目——其中距离为到达目的地所需的“开销(cost)”,而矢量为去往目的地的“方向”。
距离矢量协议通常也被称为Bellman-Ford协议,因为这些协议采用的计算算法是由R. E. Bellman所提出的。该分布式算法的最初发表要归功于Ford和Fulkerson两人。距离矢量算法(也被称为Bellman-Ford算法)要求每一台路由器将其整张路由表发送给邻居路由器。然后,邻居路由器又将当前的整张路由表发送给自己的邻居路由器,以此类推。图2-4描绘了路由表发送的过程。
如图2-4所示,一旦发生了网络更变,为了响应网络更变事件(网络失效)并重新收敛,距离矢量路由协议会触发在邻居路由器之间发送整张路由表。注意,这里并没有给出邻居路由器之间定期发送路由表的行为——这是保证每一台路由器所拥有的路由信息都是正确可用的一种双重审核机制。
5.路由信息协议(RIP)的特点
RIPv1于20世纪60年代末在伯克利被提出,是一个曾经被广泛部署的距离矢量协议3。若使用RIP协议,路由器仅和直连邻居交换路由信息。RIP的一些关键特点如下所示:
RIP每30秒广播一次路由信息,以维护网络的完整性。
RIP 在其所维护的路由表中使用路由器跳计数作为指示路由器之间距离的度量,并且该度量的最大限制为15跳。
运行RIP的路由器发送其整张路由表给它已知的所有直连RIP路由器。
由于本书专注于OSPF主题的讨论,因此这里将不对RIP进行详细介绍。但是如果你想要了解关于RIPv1和RIPv2的更多内容,可以参考以下资料:
TCP/IP路由技术(第一卷)Jeff Doyle。其中第5章是专门讨论RIP的。
Cisco.com站点上的路由信息协议(RIP)文档: www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/rip.htm
RFC 2453,“RIP Version 2”,发表于1998年。
6.小结
链路状态算法在整个网络内洪泛少量的更新内容;而距离矢量算法则发送大量的更新给邻居路由器。由于链路状态算法为每一个路由器创建了互联网络的一致性视图,因此相比距离矢量算法而言,链路状态拥有更低的路由环路风险。当网络处于稳定状态时,链路状态协议能够提供更加平滑的路由选择。
但是链路状态算法的不足之处在于,它会在网络中产生大量被广泛传播的控制流量。例如,如果网络发生更变,那么更变信息必须被泛洪到整个网络。随着当前网络规模的不断增加,这些泛洪信息的数量可能会对网络造成较大的影响。
另外,相比距离矢量算法,链路状态算法拥有更为复杂的计算过程。因此,这会消耗路由器更多的 CPU 和内存资源。但是,随着路由器的处理性能不断地提升,这一问题已经不再明显。
综上所述,实施及维护链路状态算法的成本会更高一些。尽管两种算法存在差异性,但是在不同的网络环境中选择恰当的算法类型,并使得它们各自的优势得到发挥,劣势得以规避,都可以实现很好的路由选择效果。
1译者注:动态路由协议也可以产生默认路由。
2译者注:默认情况下,OSPF 每30分钟便需要刷新一次链路状态数据库。
3译者注:RIPv1相比当前成熟的EIGRP、OSPF、IS-IS等IGP路由协议,已经不再适合为当前网络提供路由选择的功能。