作者:张良 郭雨春 出处:赛迪网
【导读】编者按:近几年来,随着计算机网络应用蓬勃发展,新的网络产品和网络技术得到了进一步的发展,这些又使计算机网络规模的扩展成为可能。
编者按:近几年来,随着计算机网络应用蓬勃发展,新的网络产品和网络技术得到了进一步的发展,这些又使计算机网络规模的扩展成为可能。OSPF(Open Shortest Path First)是一种广泛使用的路由协议,采用OSPF协议的自治系统,经过合理的规划可以有效地扩展计算机网络的规模。本文介绍了OSPF的原理和特性。
动态路由协议简介
路由和路由协议
顾名思义,动态路由协议是一些动态生成(或学习到)路由信息的协议。在计算机网络互联技术领域,我们可以把路由定义如下,路由是指导IP报文发送的一些路径信息。动态路由协议是网络设备如路由器(Router)学习网络中路由信息的方法之一,这些协议使路由器能动态地随着网络拓扑中产生(如某些路径的失效或新路由的产生等)的变化,更新其保存的路由表,使网络中的路由器在较短的时间内,无需网络管理员介入自动地维持一致的路由信息,使整个网络达到路由收敛状态,从而保持网络的快速收敛和高可用性。
路由器学习路由信息、生成并维护路由表的方法包括直连路由(Direct)、静态路由(Static)和动态路由(Dynamic)。直连路由是由链路层协议发现的,一般指去往路由器的接口地址所在网段的路径,该路径信息不需要网络管理员维护,也不需要路由器通过某种算法进行计算获得,只要该接口处于活动状态(Active),路由器就会把通向该网段的路由信息填写到路由表中去,直连路由无法使路由器获取与其不直接相连的路由信息。静态路由是由网络规划者根据网络拓扑,使用命令在路由器上配置的路由信息,这些静态路由信息指导报文发送,静态路由方式也不需要路由器进行计算,但是它完全依赖于网络规划者,当网络规模较大或网络拓扑经常发生改变时,网络管理员需要做的工作将会非常复杂并且容易产生错误。而动态路由的方式使路由器能够按照特定的算法自动计算新的路由信息,适应网络拓扑结构的变化。
动态路由协议的分类
按照区域(指自治系统),动态路由协议可分为内部网关协议IGP(Interior Gateway Protocol)和外部网关协议EGP(Exterior Gateway Protocol),按照所执行的算法,动态路由协议可分为距离向量路由协议(Distance Vector)、链路状态路由协议(Link State),以及思科公司开发的混合型路由协议,如图1所示。
本文着重讨论自治系统内部的链路状态协议OSPF的原理,并结合距离向量协议作一些简单的比较。
OSPF协议的特点
OSPF全称为开放最短路径优先。“开放”表明它是一个公开的协议,由标准协议组织制定,各厂商都可以得到协议的细节。“最短路径优先”是该协议在进行路由计算时执行的算法。OSPF是目前内部网关协议中使用最为广泛、性能最优的一个协议,它具有以下特点:
◆ 可适应大规模的网络;
◆ 路由变化收敛速度快;
◆ 无路由自环;
◆ 支持变长子网掩码(VLSM);
◆ 支持等值路由;
◆ 支持区域划分;
◆ 提供路由分级管理;
◆ 支持验证;
◆ 支持以组播地址发送协议报文。
采用OSPF协议的自治系统,经过合理的规划可支持超过1000台路由器,这一性能是距离向量协议如RIP等无法比拟的。距离向量路由协议采用周期性地发送整张路由表来使网络中路由器的路由信息保持一致,这个机制浪费了网络带宽并引发了一系列的问题,下面对此将作简单的介绍。
路由变化收敛速度是衡量一个路由协议好坏的一个关键因素。在网络拓扑发生变化时,网络中的路由器能否在很短的时间内相互通告所产生的变化并进行路由的重新计算,是网络可用性的一个重要的表现方面。
OSPF采用一些技术手段(如SPF算法、邻接关系等)避免了路由自环的产生。在网络中,路由自环的产生将导致网络带宽资源的极大耗费,甚至使网络不可用。OSPF协议从根本(算法本身)上避免了自环的产生。采用距离向量协议的RIP等协议,路由自环是不可避免的。为了完善这些协议,只能采取若干措施,在自环发生前,降低其发生的概率,在自环发生后,减小其影响范围和时间。
在IP(IPV4)地址日益匮乏的今天,能否支持变长子网掩码(VLSM)来节省IP地址资源,对一个路由协议来说是非常重要的,OSPF能够满足这一要求。
在采用OSPF协议的网络中,如果通过OSPF计算出到同一目的地有两条以上代价(Metric)相等的路由,该协议可以将这些等值路由同时添加到路由表中。这样,在进行转发时可以实现负载分担或负载均衡。
在支持区域划分和路由分级管理上,OSPF协议能够适合在大规模的网络中使用。
在协议本身的安全性上,OSPF使用验证,在邻接路由器间进行路由信息通告时可以指定密码,从而确定邻接路由器的合法性。
与广播方式相比,用组播地址来发送协议报文可以节省网络带宽资源。
从衡量路由协议性能的角度,我们可以看出,OSPF协议确实是一个比较先进的动态路由协议,这也是它得到广泛采用的主要原因。
OSPF协议的工作原理
网络拓扑结构
上文提到,OSPF协议是一种链路状态协议,那么OSPF是如何来描述链路连接状况呢?
抽象模型Model 1表示路由器的一个以太网接口不连接其他路由器,只连接了一个以太网段。此时,对于运行 OSPF的路由器R1,只能识别本身,无法识别该网段上的设备(主机等);抽象模型Model 2表示路由器R1通过点对点链路(如PPP、HDLC等)连接一台路由器R2;抽象模型Model 3表示路由器R1通过点对多点(如Frame Relay、X.25等)链路连接多台路由器R3、R4等,此时路由器R5、R6之间不进行互联;抽象模型Model 4表示路由器R1通过点对多点(如Frame Relay、X.25等)链路连接多台路由器R5、R6等,此时路由器R5、R6之间互联。以上抽象模型着重于各类链路层协议的特点,而不涉及具体的链路层协议细节。该模型基本表达了当前网络链路的连接种类。
在OSPF协议中,分别对以上四种链路状态类型作了描述:
对于抽象模型Model 1(以太网链路),使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述。此时的Link ID即为路由器R1接口所在网段,Data为所用掩码,Type为3(Stubnet),Metric为代价值。
对于抽象模型Model 2(点对点链路),先使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述接口路由,以上各参数与Model 1相似。接下来描述对端路由器R2,四个参数名不变,但其含义有所不同。此时Link ID为路由器R2的Router ID,Data为路由器R2的接口地址,Type为1(Router),Metric仍为代价值。
对于抽象模型Model 3(点对多点链路,不全连通),先使用Link ID(连接的网段)、Data(掩码)、Type(类型)和Metric(代价)来描述接口路由,以上各参数与Model 1相似。接下来分别描述对端路由器R3、R4的方法,与在Model 2中描述R2类似。
对于抽象模型Model 4(点对多点链路,全连通),先使用Link ID(网段中DR的接口地址)、Data(本接口的地址)、Type(类型)和Metric(代价)来描述接口路由。此时Type值为2(Transnet),然后是本网段中DR(指定路由器)描述的连接通告。
路由器在通报其获知的链路状态(即上面所述的参数)前,加上LSA头(Link State Advertisement Head),从而生成LSA(链路状态广播)。到此,路由器通过LSA完成周边网络的拓扑结构描述,并发送给网络中的其他路由器。
计算路由
路由器完成周边网络的拓扑结构的描述(生成LSA)后,发送给网络中的其他路由器,每台路由器生成链路状态数据库(LSDB)。路由器开始执行SPF(最短路径优先)算法计算路由,路由器以自己为根节点,把LSDB中的条目与LSA进行对比,经过若干次的递归和回溯,直至路由器把所有LSA中包含的网段都找到路径(把该路由填入路由表中),此时意味着所到达的该段链路的类型标识为3(Stubnet)。
确保LSA在路由器间传送的可靠性
从上文可以知道,作为链路状态协议的OSPF的工作机制,与RIP等距离向量的路由协议是不一样的。距离向量路由协议是通过周期性地发送整张路由表,来使网络中的路由器的路由信息保持一致。这种机制存在着上文提到的一些弊病。而OSPF协议将包含路由信息的部分与只包含路由器间邻接关系的部分分开,它使用一种被称作Hello的数据包来确认邻接关系,这个数据包非常小,它仅被用来发现和维持邻接关系。
在路由器R1初始化完成后,它将向路由器R2发送Hello数据包。此时R1并不知道R2的存在,因此在数据包中不包含R2的信息(参数seen=0)。而R2在接收到该数据包后,将向R1发送Hello包。此时,Hello包中将表明它已知道存在R1这个邻居。R1收到这个回应包后就会知道邻居R2的存在,并且邻居R2也知道了自己的存在(参数seen=R1)。此时在路由器R1和R2之间就建立了邻接关系,它们就可以把LSA发送给对方。当然,在发送时OSPF考虑到要尽量减少占用的带宽,它采用了一些技巧,我们将在下一节简单介绍这些内容。
众所周知,IP协议是一种不可靠的、面向无连接的协议,它本身没有确认和错误重传机制。那么,在这种协议基础之上,要做到数据包丢失或出错后进行重传,上层协议必须本身具备这种可靠的机制。OSPF采取了与TCP类似的确认和超时重传机制。在机制中,R1和R2将进行一种被称作链路状态数据库描述(DD)的数据包的互传。首先进行协商,从而确定两者之间的主从关系(根据路由器ID号,ID号大的将作为Master)。链路状态数据库描述(DD)数据包中包含了一些参数,序列号(seq)、报文号(I)、结尾标识(M)及主从标志(MS)。从属路由器将使用主路由器发出的DD包中的序列号(seq),作为自己的第一个DD包的序列号。当主路由器收到从属路由器的DD包时,就能确认邻接路由器已收到自己的数据包(如果没有收到或收到的DD包的序列号不是自己一个DD包的序列号,主路由器将重传上一个DD包),主路由器将序列号加1(只有主路由器才有权改变序列号,而从属路由器没有),并发送下一个DD包,该过程的重复保证了在OSPF协议中数据包传输的准确性,从而为OSPF协议成为一个准确的路由协议打下了基础。