CCNA:链路状态路由协议
文章作者 100test 发表时间 2011:03:28 00:03:46
来源 100Test.Com百考试题网
一、概述
如果把距离矢量路由选择协议比作是由路标提供的信息,那么链路状态路由选择协议就是一张交通线路图;因为它有一张完整的网络图,所以它是不容易被欺骗而作出错误的路由决策的;链路状态不同于距离矢量依照传闻进行路由选择的工作方式,每台路由器都会产生一些关于自己、本地直连链路以及这些链路的状态(以此而得名)和所有直接相连邻居的信息。这些信息从一台路由器传送到另一台路由器,每台路由器都做一份信息拷贝,但是决不改动这些信息,最终每台路由器都有一个相同的有关网络的信息,并且每台路由器可以独立地计算各自的最优路径;
链路状态协议,有时也叫最短路径优先协议或分布式数据库协议,是围绕着图论中的一个着名算法-E.W.Dijkstra的最短路径算法设计的;链路状态协议有以下几种:
IP开放式最短路径优先OSPF;
CLNS或IP ISO的中间系统到中间系统IS-IS;
DEC的DNA阶段5;
Novell的NetWare链路服务协议NLSP.
链路状态路由选择协议的基本步骤如下:
1、每台路由器与它的邻居之间建立联系,这种联系称为邻接关系;
2、每台路由器向每个邻居发送链路状态通告LSA。对每台路由器链路都会生成一个LSA,LSA用于标识这条链路、链路状态、路由器接口到链路的代价度量值以及链路所连接的所有邻居。每个邻居在收到通告后将依次向它的邻居转发(泛洪)这些通告;
3、每台路由器要在数据库中保存一份它所收到的LSA的备份,如果所有路由器工作正常,那么它们的链路状态数据库应该相同;
4、完整的拓扑数据库,也叫做链路状态数据库,Dijkstra算法使用它对网络图进行计算得出到每台路由器的最短路径;接着链路状态协议对链路状态数据库进行查询找到每台路由器所连接的子网,并把这些信息输入到路由表中.
二、邻居
邻居发现是建立链路状态环境并运转的第一步,它将使用Hello协议(Hello Protocol)。Hello协议定义了一个Hello数据包的格式和交换数据包并处理数据包信息的过程;Hello数据包至少应包含一个路由器ID CRID和发送数据包的网络地址。路由器ID可以将发送该数据包的路由器与其他路由器惟一地区分开,例如,路由器ID可以是路由器一个接口的IP地址。数据包的其他字段可以携带子网掩码、Hello间隔、线路类型描述符和帮助建立邻居关系的标记,其中Hello间隔是路由器在宣布邻居死亡之前等待的最大周期;
当两台路由器已经互相发现并将对方视为邻居时,它们要进行数据库同步过程,即交换和确认数据库信息,直到数据库相同为至;为了执行数据库同步,邻居之间必须建立邻接关系,即这们必须就某些特定的协议参数,如计时器和对可选择能力的支持,达成一致意见。通过使用 Hello数据包建立邻接关系,链路状态协议就可以在受控的方式下交换信息,与距离矢量相比,这种方式仅在配置了路由选择协议的接口上广播更新信息(组播)!
除建立邻接关系外,Hello数据包还可作为监视邻接关系的握手信号。如果在特定的时间内没有从邻接路由器收到Hello数据包,那么就认为邻居路由器不可达,随即邻接关系被解除。典型的Hello数据包交换间隔为10s,典型的死亡周期是交换间隔的4倍.
三、链路状态泛洪扩散(Flooding)
在建立了邻接关系之后,路由器开始发送LSA给每个邻居,同时,每个邻居保存接收到的LSA并依次向它的每个邻居转发,除了发送该LSA的邻居之外,在这里优于距离矢量的一个特点是:LSA几乎是立即被转发的!因此,当网络拓扑发生变化时,链路状态协议的收敛速度要远远快于距离矢量协议;
泛洪扩散过程是链路状态协议中最复杂的一部分,有几种方式可以使泛洪扩散更高效和更可靠,如使用单播和多播地址、校验和以及主动确认,其中有两个过程是极其重要的:排序和老化;
1、序列号
假设这样一种情况:路由器C先从B收到了A发出的一个LSA并保存到自己的拓扑数据库中,接着又通过路由器F收到了同样的这个由A发出的LSA,路由器C发现数据库中已经存在了该LSA(知道是从B收到的),那么路由器C从路由器F接收到的这个LSA是否应该向路由器B转发?答案是不转发!因为路由器B已经收到了这个LSA,由于路由器C从路由器F接收到的LSA的序列号与早先从路由器B接受的LSA序列号相同,所以路由器C也知道这一情况,于是将该LSA丢弃;
当路由器A发送LSA时,在每个拷贝中的序列号都是相同的,此序列号和LSA的其他部分一起被保存在路由器的拓扑数据库中,当路由器收到数据库中已存在的LSA且序列号相同时,路由器将丢弃这些信息;如果信息相同但序列号更大,那么接收的信息和新序列号被保存到数据库中,并且泛洪扩散该LSA;
因为序列号被携带在LSA中的一个固定字段内,所以序列号一定有上限,那么当序列号到达上限时会发生什么呢?