动态选路、RIP协议&&OSPF协议详解
动态选路、RIP协议&&OSPF协议详解
概念
-
当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程称为路由守护程序( routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表
-
路由选路并不改变我们在所描述的内核在IP层的选路方式。这种选路方式称为选路机制。内核搜索路由表、查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息发生了改变--当路由随着时间变化时,路由是由路由守护程序动态的增加或删除,而不是来自引导程序文件中的route命令。
-
路由守护程序将选路策略加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它(以某种方法)将选择最佳路由并加入内核路由表之中。如果路由程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删除受影响的路由或增加一条路由以绕过该问题。
-
在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统(AS)的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。NSFNET的Internet骨干网形成一个自治系统,这是因为骨干网中的所有路由器都在单个的管理控制之下。
-
每个自治系统可以选择该自治系统中各个路由器之间的选路协议。这种协议我们称为内部网关协议IGP(interior gateway protocol)或域内选路协议。最常用的IGP是选路信息协议RIP。一种新的IGP是开放最短路径优先协议OSPF协议。
RIP协议
RIP协议常用的端口号是520
RIP的工作过程
-
初始化
在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。在点对点链路中,该请求是发送给其他终点的。如果网络支持广播的话,这种请求是以广播形式发送的。目的UDP端口号是520(这是其他路由器的路由守护程序端口号)
-
接收到请求
如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则,就处理请求中的每一个表项:如果有连接到指名地址的路由,则将度量设置成我们的值,否则将度量值设为16(度量为16是一种称为“无穷大”的特殊值,它意味着没有到达目的的路由)。然后发出响应。
-
接收到响应
使响应生效,可能会更新路由表。可能会增加新表项,对已有表项进行修改,或者将已有表项删除。
-
定期选路更新
每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是广播形式的(如在以太网上),或是发送给点对点链路的其他终点。
-
触发更新
每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整的路由表,而只需要发送那些变化的表项。
每条路由都有与之相关的定时器。如果运行 R I P的系统发现一条路由在 3分钟内未更新,就将该路由的度量设置成无穷大( 1 6),并标注为删除。这意味着已经在 6个3 0秒更新时间里没收到通告该路由的路由器的更新了。再过 6 0秒,将从本地路由表中删除该路由,以保证该路由的失效已被传播开。
RIP的缺点
-
无法区分非零部分是子网部分还是主机地址
这种方法看起来很简单,但它有一些缺陷。首先, RIP没有子网地址的概念。例如,如果标准的B类地址中16 bit的主机号不为0,那么R I P无法区分非零部分是一个子网号,或者是一个主机地址。有一些实现中通过接收到的R I P信息,来使用接口的网络掩码,而这有可能出错。
-
可能会发生路由环路
在路由器或链路发生故障后,需要很长的一段时间才能稳定下来。这段时间通常需要几分钟。在这段建立时间里,可能会发生路由环路。在实现 R I P时,必须采用很多微妙的措施来防止路由环路的出现,并使其尽快建立。
-
度量为16,限制网络大小
采用跳数作为路由度量忽略了其他一些应该考虑的因素。同时,度量最大值为 1 5则限制了可以使用RIP的网络的大小。
OSPF协议(开放最短路径优先)
OSPF的概念
OSPF是除RIP外的另一个内部网关协议。它克服了RIP的所有限制。与采用距离向量RIP协议不同的是,OSPF是一个链路状态协议。
距离向量:RIP发送的报文包含一个距离向量(跳数)。每个路由器都根据它接收到邻站的这些距离向量来更新自己的路由表。
在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。
OSPF与RIP的不同
-
链路状态协议比距离向量协议收敛的更快。收敛的意思是在路由发生变化后,例如在路由关闭或链路出故障后,可以稳定下来。
-
OSPF直接使用IP。也就是说,它并不使用UDP或TCP。对于IP首部的protocol字段,OSPF有其自己的值。
OSPF较RIP的优点
-
OSPF可以对每个IP服务类型计算各自的路由集。这意味着对于任何目的,可以有多个路由表表项,每个表项对应着一个IP服务类型。
-
给每个接口指派一个无维数的费用。可以通过吞吐率、往返时间、可靠性或其他性能来进行指派。可以给每个IP服务类型指派一个单独的费用。
-
当对同一个目的地址存在着多个相同费用的路由时,O S P F在这些路由上平均分配流量。我们称之为流量平衡。
-
OSPF支持子网:子网掩码与每个通告路由相连。这样就允许将一个任何类型的IP地址分割成多个不同大小的子网。到一个主机的路由是通过全 1子网掩码进行通告的。默认路由是以IP地址为0.0.0.0、网络掩码为全0进行通告的。
-
路由器之间的点对点链路不需要每端都有一个IP地址,我们称之为无编号网络。这样就可以节省IP地址。
-
采用了一种简单鉴别机制。可以采用类似RIP-2的方法指定一个明文口令。
-
OSPF采用多播,而不是广播形式,以减少不参与OSPF的系统负载。
OSPF网络类型
根据路由器所连接的物理网络不同,OSPF将网络划分为四种类型:广播多路访问型(Broadcast MultiAccess)、非广播多路访问型(None Broadcast MultiAccess,NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。
广播多路访问型网络如:Ethernet、Token Ring、FDDI。NBMA型网络如:Frame Relay、X.25、SMDS。Point-to-Point型网络如:PPP、HDLC。
指派路由器(DR)和备份指派路由器(BDR)
在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
点对点型网络不需要DR,因为只存在两个节点,彼此间完全相邻。 协议组成 OSPF协议由Hello协议、交换协议、扩散协议组成。本文仅介绍Hello协议,其他两个协议可参考RFC2328中的具体描述。
当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的通信状态。
对广播型网络和非广播型多路访问网络,路由器使用Hello协议选举出一个DR。在广播型网络里,Hello报文使用多播地址224.0.0.5周期性广播,并通过这个过程自动发现路由器邻居。在NBMA网络中,DR负责向其他路由器逐一发送Hello报文。
协议操作
1. 建立路由器的邻接关系
所谓“邻接关系”(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。 路由器首先发送拥有自身ID信息(Loopback端口或最大的 IP地址)的Hello报文。与之相邻的路由器如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。
如果路由器的某端口收到从其他路由器发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以建立邻接关系。
在点对点网络中,路由器将直接和对端路由器建立起邻接关系,并且该路由器将直接进入到第三步操作:发现其他路由器。若为MultiAccess 网络, 该路由器将进入选举步骤。
2. 选举DR/BDR
不同类型的网络选举DR和BDR的方式不同。
MultiAccess网络支持多个路由器,在这种状况下, OSPF需要建立起作为链路状态和LSA更新的中心节点。选举利用Hello报文内的ID和优先权(Priority)字段值来确定。优先权字段值大小从0到255,优先权值最高的路由器成为DR。如果优先权值大小一样,则ID值最高的路由器选举为DR, 优先权值次高的路由器选举为BDR。优先权值和ID值都可以直接设置。
3. 发现路由器
在这个步骤中,路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。这个状态完成后,路由器之间建立完全相邻(Full Adjacency)关系,同时邻接路由器拥有自己独立的、完整的链路状态数据库。
在MultiAccess网络内,DR与BDR互换信息,并同时与本子网内其他路由器交换链路状态信息。
在Point-to-Point 或 Point-to-MultiPoint网络中,相邻路由器之间互换链路状态信息。
4. 选择适当的路由器
当一个路由器拥有完整独立的链路状态数据库后,它将采用SPF算法计算并创建路由表。OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。
OSPF 利用量度(Cost)计算目的路径,Cost最小者即为最短路径。在配置OSPF路由器时可根据实际情况,如链路带宽、时延或经济上的费用设置链路Cost大小。Cost越小,则该链路被选为路由的可能性越大。
5. 维护路由信息
当链路状态发生变化时,OSPF通过Flooding 过程通告网络上其他路由器。OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。
OSPF路由器之间使用链路状态通告(LSA)来交换各自的链路状态信息,并把获得的信息存储在链路状态数据库中。各OSPF路由器独立使用SPF算法计算到各个目的地址的路由。
OSPF协议支持分层路由方式,这使得它的扩展能力远远超过RIP协议。当OSPF网络扩展到100、500甚至上千个路由器时,路由器的链路状态数据库将记录成千上万条链路信息。为了使路由器的运行更快速、更经济、占用的资源更少,网络工程师们通常按功能、结构和需要把OSPF网络分割成若干个区域,并将这些区域和主干区域根据功能和需要相互连接从而达到分层的目的。
OSPF分层路由的思想
OSPF把一个大型网络分割成多个小型网络的能力被称为分层路由,这些被分割出来的小型网络就称为“区域”(Area)。由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。多区域的OSPF必须存在一个主干区域,主干区域负责收集非主干区域发出的汇总路由信息,并将这些信息返还给到各区域。 OSPF区域不能随意划分,应该合理地选择区域边界,使不同区域之间的通信量最小。但在实际应用中区域的划分往往并不是根据通信模式而是根据地理或政治因素来完成的。
OSPF中的四种路由器
在OSPF多区域网络中,路由器可以按不同的需要同时成为以下四种路由器中的几种:
1. 内部路由器:所有端口在同一区域的路由器,维护一个链路状态数据库。
2. 主干路由器:具有连接主干区域端口的路由器。
3. 区域边界路由器(ABR): 具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。
4. 自治域系统边界路由器(ASBR): 至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。
OSPF链路状态公告类型
OSPF路由器之间交换链路状态公告(LSA)信息。OSPF的LSA中包含连接的接口、使用的Metric及其他变量信息。OSPF路由器收集链接状态信息并使用SPF算法来计算到各节点的最短路径。LSA也有几种不同功能的报文,在这里简单地介绍一下:
LSA TYPE 1:由每台路由器为所属的区域产生的LSA,描述本区域路由器链路到该区域的状态和代价。一个边界路由器可能产生多个LSA TYPE 1。
LSA TYPE 2:由DR产生,含有连接某个区域路由器的所有链路状态和代价信息。只有DR可以监测该信息。
LSA TYPE 3:由ABR产生,含有ABR与本地内部路由器连接信息,可以描述本区域到主干区域的链路信息。它通常汇总缺省路由而不是传送汇总的OSPF信息给其他网络。
LSA TYPE 4:由ABR产生,由主干区域发送到其他ABR, 含有ASBR的链路信息,与LSA TYPE 3的区别在于TYPE 4描述到OSPF网络的外部路由,而TYPE 3则描述区域内路由。
LSA TYPE 5:由ASBR产生,含有关于自治域外的链路信息。除了存根区域和完全存根区域,LSA TYPE 5在整个网络中发送。
LSA TYPE 6:多播OSPF(MOSF),MOSF可以让路由器利用链路状态数据库的信息构造用于多播报文的多播发布树。
LSA TYPE 7:由ASBR产生的关于NSSA的信息。LSA TYPE 7可以转换为LSA TYPE 5。
OSPF区域类型
前述的四种路由器可以构成五种类型的区域,这五种区域的主要区别在于它们和外部路由器间的关系:
1. 标准区域:一个标准区域可以接收链路更新信息和路由总结。 主干区域(传递区域): 主干区域是连接各个区域的中心实体。主干区域始终是“区域 0”,所有其他的区域都要连接到这个区域上交换路由信息。主干区域拥有标准区域的所有性质。
2. 存根区域:存根区域是不接受自治系统以外的路由信息的区域。如果需要自治系统以外的路由,它使用默认路由0.0.0.0。
3. 完全存根区域:它不接受外部自治系统的路由以及自治系统内其他区域的路由总结。需要发送到区域外的报文则使用默认路由:0.0.0.0。完全存根区域是Cisco自己定义的。
4. 不完全存根区域(NSAA): 它类似于存根区域,但是允许接收以LSA Type 7发送的外部路由信息,并且要把LSA Type 7转换成LSA Type 5。
区分不同OSPF区域类型的关键在于它们对外部路由的处理方式。外部路由由ASBR传入自治系统内,ASBR可以通过RIP或者其他的路由协议学习到这些路由。
报文在OSPF多区域网络中发送的过程
首先,区域内部的路由器最初使用LSA TYPE 1或LSA TYPE 2对本区域内的路径信息进行交换并计算出相应的路由表项。当路由器的链路信息在区域内部路由达到统一后,ABR才能发送LSA摘要报文(LSA TYPE 3或LSA TYPE 4)给其他区域。其他区域路由器可以根据这些摘要信息计算相应到达本区域以外的路由表项。最后,除了存根区域,所有路由器根据ASBR所发送的LSA TYPE 5计算出到达自治域外的路由表项。
为减少LSA报文,LSA摘要信息可以通过合理地分配IP地址和配置路由摘要提高效率。 在OSPF多区域网络中,主干区域必须保持全连通状态,即每个其他区域必须直接与主干区域Area0有连接才能交换区域间的路由信息。但在实际应用中,因为各种原因很难避免有些区域无法直接与Area0相连,为了解决这个问题,OSPF协议中定义了虚链路的概念使一个连接主干的区域连接第三方区域。
王国理解法
可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个 区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张 世界地图(routing table)的。
首先,你得跟你周围的人(同一网段如129.102)建立基本联系。你大叫一声 “我在这!”(发HELLO报文),于是,周围的人知道你的存在,他们也会大叫,这样 你知道周围大概有哪些人,你与他们之间建立了邻居(neighbor)关系,当然,他们 之间也有邻居关系。
在你们这一群人中,最有威望(Priority优先级)的人会被推荐为首领( Designated Router)首领与你之间是上下级关系(adjacency邻接),它会与你建立 单线联系,而不许你与其它邻居有过多交往,他会说:“那样做的话,街上太挤了 ”。
你只好通过首领来知道更多的消息了,首先,你们互通消息,他告诉你他知 道的所有地图的地名,你也会告诉他你现知道的地名,当然上也许只有你一个点。 (Database Des cription数据库描述报文)
你发现地名表中有你缺少的或比你新的东西,你会问他要一份更详细的资料 ,他发现你的地名表中有他需要的东西,他也会向你索求新资料。(Link State Request连接状态请求报文)
当然,你们毫不犹豫地将一份详细资料发送给对方。(Link State Update连 接状态升级报文)
收到地图后,互相致谢表示收到了。(Link State Ack连接状态响应报文)
现在,你已经尽你所能得到一份地图(Link State DataBase连接状态数据库 ),你去查找地图把到所有地方的路挑一条最近(shortest path最短路)的,记 为一张表格(routing table路由表),当然以后查这份表格就知道到目的地的一 条最近的路了。地图也要收好,万一表格上的某条路不通了可以通过图去找一条新 的路。
其实跟你有联系的,只是周围一群人,外面的消息要通过首领来知道。因为 你的地图是跟首领的一致,我们假设你是首领,你要去画一份世界地图。
你命令所有手下向你通报消息,你可以知道你这一群人的任何一点点小动静 (event事件)。你手下还会有同时属于两群人的家伙(同一区内两网段),他会 告诉你另一群人的地图,当然也会把你们这一群人的地图泄露,(不过,无所谓啦 )。这样,整个区的地图你知道了(对于不知道的那也没办法,我们尽力了)。
通过不停地交换地图,现在,整个区的人都有同样的地图了,住在区边境上 的人义不容辞地把这个区的地图(精确到每一群人)发送到别的区,把别的区信息 发送进来。国王会把这些边境的人命名为骨干(backbone area)。通过骨干人士 的不懈努力,现在,整个国家的地图你都了解得一清二楚了。
有些人“里通外国”(AS Boundary Router自治系统边界路由器) ,他们知 道一些“出国”(AS External route自治系统外部路由)的路,当然他们会把这些 秘密公之与众(import 引入),通过信息的传递,现在,你已经有一张完整的“ 世界地图”了。
OSPF是这样标记最短的路的:对于某个目的地,首先,考虑是否有同一区内 部到目的地的路(intra area区域内),如果有,则在其中取一条离你最近的(花 费最小),写进你的表格中,这个目的地可能是到本群体某个人也可能是到其他群 体的,对于经过其他区域的路由,你会不予考虑,跟自己人(同区域)打交道总比 与外人(其他区域)打交道好;如果没有本区的路,你只好通过别的区域了(区域 间),你只要在地图上找最近的就是了;如果你发现目的地在国外,你也只能先把 它标记到你的表格上,期待什么时候王国扩张到那,你就可以把它标记到国内地图 上了。
OSPF是一种典型的链路状态路由协议。采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握全网的拓扑结构,独立计算路由。因为RIP路由协议不能服务于大型网络,所以,IETF的IGP工作组特别开发出链路状态协议——OSPF。目前广为使用的是OSPF第二版,最新标准为RFC2328。
OSPF作为一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治域(AS)中的路由器之间发布路由信息。区别于距离矢量协议(RIP),OSPF具有支持大型网络、路由收敛快、占用网络资源少等优点,在目前应用的路由协议中占有相当重要的地位。