2016年考研计算机专业辅导:路由协议
自治系统(AS),Internet路由选择协议分类(IGP和EGP), 两种常用内部网关协议包括RIP(基于D-V法)和OSPF(基于L-S法),BGP路由协议。
在动态路由中,管理员不再需要与静态配置那样对路由器上的路由表进行手工维护,而是在每台路由器上运行一个路由表的管理程序。这个路由表的管理程序会根据路由器上的接口的配置(如IP地址的配置)及所连接的链路的状态,生成路由表中的路由表项。这个路由表的管理程序也就是动态路由协议。采用动态路由协议管理路由表在大规模的网络中是十分有效的。
RIP(Routing Information Protocol)路由协议就是一种动态路由协议,它采用距离矢量算法,距离矢量算法就是相邻的路由器之间互相交换整个路由表,并进行矢量的叠加,最后达到知道整个网络路由。它通过UDP报文交换路由信息,每隔30秒向外发送一次更新报文。如果路由器经过180秒没有收到来自对端的路由更新报文,则将所有来自此路由器的路由信息标记为不可达,若在其后120秒内仍未收到更新报文,就将这些路由从路由表中删除。
RIP使用跳数(Hop Count)来衡量到达目的地的距离,路由器到与它直接相连网络的跳数为0,通过一个路由器可达的网络的跳数为1,其余依此类推。为限制收敛时间,RIP规定metric取值0~15之间的整数,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。 每个运行RIP的路由器管理一个路由数据库,该路由数据库包含了到网络所有可达目的地的一个路由项,这个路由项包含下列信息:
目的地址:主机或网络的地址。
下一跳地址:为到达目的地,本路由器要经过的下一个路由器地址。
接口:转发报文的接口。
Metric值:本路由器到达目的地的开销,可取值0~16之间的整数。
定时器:该路由项最后一次被修改的时间。
路由标记:区分该路由为内部路由协议路由还是外部路由协议路由的标记。
RIP启动和运行的整个过程可描述如下:
某路由器刚启动RIP时,以广播形式向其相邻路由器发送请求报文,相邻路由器收到请求报文后,响应该请求,并回送包含本地路由信息的响应报文。
路由器收到响应报文后,修改本地路由表,同时向相邻路由器发送触发修改报文,广播路由修改信息。相邻路由器收到触发修改报文后,又向其各自的相邻路由器发送触发修改报文。在多次的触发修改广播后,各路由器都能得到并保持最新的路由信息。
并且,RIP每隔30秒向其相邻路由器广播本地路由表,相邻路由器在收到报文后,对本地路由进行维护,选择一条最佳路由,再向其各自相邻网络广播修改信息,使更新的路由最终能达到全局有效。同时,RIP采用超时机制对过时的路由进行超时处理,以保证路由的实时性和有效性。
距离矢量协议无论是实现还是管理都比较简单,但是它的收敛速度慢,支持站点的数量有限,路由表更新信息将占用较大的网络带宽,并且会产生路由环路,为避免路由环路,RIP应用水平分割(Split Horizon)、毒性逆转(Poison Reverse)技术,并采用触发更新(Triggered Update)机制。RIP协议有RIP-1和RIP-2两个版本,RIP-2支持明文认证和 MD5 密文认证,并支持变长子网掩码等。
距离矢量协议也称为Bellman-Ford协议,网络中路由器向相邻的路由器发送它们的全部路由信息。路由器根据从相邻路由器接收到的信息来更新自己的路由表。然后,将信息传递到它的相邻路由器。这样逐级的传递下去以达到全网同步。也就是说距离矢量路由表中的某些路由项有可能建立在第2 手信息的基础之上的,每个路由器都不了解整个网络拓扑,它们只知道与自己直接相连的网络情况,并根据从邻居得到的路由信息更新自己的路由表,进行矢量行叠加后转发给其它的邻居。
距离矢量路由协议启动时会首先初始化路由表,路由器在路由表中生成其直连路由并传播出去,直连路由是指与其直接相连的网络的情况。然后,路由器会定期地把路由表传送给相邻的路由器,让其它路由器知道自己的网络情况。 每个路由器收到一条RIP选路信息后的计算过程如下。
路由表每行至少包括三个字段: (目的网络,跳数,下一跳路由器) 例如,(D,2,R)表示,到目的网络D的报文要送到相邻的路由器R,跳数为2跳。 当收到相邻路由器R发来的一个跳数为M,目的站为D的更新消息时,
本机将其与现有的路由表比较:
如果: 1.本机中没有到D的路由存在,则生成路由表项(目的网络,跳数,下一跳路由器):(D,M+1,R);
2.否则,如果存在(D, * ,R),则更新为 (D,M+1,R);
3.否则,如果存在到D的路由跳数大于 M+1,则更新为(D,M+1,R);
4.否则,不更新。
在经过了若干个更新周期后,路由信息会被传递到每台路由器上,达到平衡。
二、OSPF工作原理分析
OSPF是一种分层次的路由协议,其层次中最大的实体是AS(自治系统),即遵循共同路由策略管理下的一部分网络实体。在每个AS中,将网络划分为不同的区域。每个区域都有自己特定的标识号。对于主干(backbone)区域,负责在区域之间分发链路状态信息。这种分层次的网络结构是根据OSPF的实际提出来的。当网络中自治系统非常大时,网络拓扑数据库的内容就更多,所以如果不分层次的话,一方面容易造成数据库溢出,另一方面当网络中某一链路状态发生变化时,会引起整个网络中每个节点都重新计算一遍自己的路由表,既浪费资源与时间,又会影响路由协议的性能(如聚合速度、稳定性、灵活性等)。因此,需要把自治系统划分为多个域,每个域内部维持本域一张唯一的拓扑结构图,且各域根据自己的拓扑图各自计算路由,域边界路由器把各个域的内部路由总结后在域间扩散。这样,当网络中的某条链路状态发生变化时,此链路所在的域中的每个路由器重新计算本域路由表,而其它域中路由器只需修改其路由表中的相应条目而无须重新计算整个路由表,节省了计算路由表的时间。
OSPF由两个互相关联的主要部分组成:“呼叫”协议和“可靠泛洪”机制。呼叫协议检测邻居并维护邻接关系,可靠泛洪算法可以确保统一域中的所有的OSPF路由器始终具有一致的链路状态数据库,而该数据库构成了对域的网络拓扑和链路状态的映射。链路状态数据库中每个条目称为LSA(链路状态通告),共有5种不同类型的LSA,路由器间交换信息时就是交换这些LSA.每个路由器都维护一个用于跟踪网络链路状态的数据库,然后各路由器的路由选择就是基于链路状态,通过Dijkastra算法建立起来最短路径树,用该树跟踪系统中的每个目标的最短路径。最后再通过计算域间路由、自治系统外部路由确定完整的路由表。与此同时,OSPF动态监视网络状态,一旦发生变化则迅速扩散达到对网络拓扑的快速聚合,从而确定出新的网络路由表。 OSPF的设计实现要涉及到指定路由器、备份指定路由器的选举、协议包的接收、发送、泛洪机制、路由表计算等一系列问题。
Dijkstra算法的描述如下:
(1)初始化集合E,使之只包含源节点S,并初始化集合R,使之包含所有其它节点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等于相应链路的量度值,并以递增顺序排列列表O.
(2)若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余节点标注为不可达,并终止算法。
(3)首先寻找列表O中的最短路径P,从O中删除P.设V为P的最终节点。若V已在集合E中,继续执行步骤2.否则,P为通往V的最短路径。将V从R移至E.
(4)建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,并放置在其长度所对应的等级上。继续执行步骤2.
Dijkstra算法举例: 下面我们以路由器A为例,来说明最短路径树的建立过程:
(1)路由器A找到了路由器B、C,将它们列入候选列表{B:1;C:2}.
(2)从候选列表中找出最小代价项B,将B加入最短路径树并从候选列表中删除。接着从B开始寻找,找到了D,将其放入候选列表{C:2;D:2}.
(3)从列表中找出C,再由C又找到了D.但此时D的代价为4,所以不再加入候选列表。最后将D加入到最短路径树。此时候选列表为空,完成了最短路径树的计算。
OSPF路由表的计算与实现 有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路的存活时间、链路的类型以及下一跳等内容。
关于整个计算的过程,主要由以下五个步骤来完成:
(1)保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立路由表; (2)域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路由;
(3)域间路由的计算,通过检查Summary-LSA来计算域间路由,若该路由器连到多个域,则只检查主干域的Summary-LSA;
(4)查看Summary-LSA:在连到一个或多个传输域的域边界路由器中,通过检查该域内的Summary-LSA来检查是否有比第(2)(3)步更好的路径;
(5)AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外的路由。 通过以上步骤,OSPF生成了路由表。但这里的路由表还不同于路由器中实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种路由协议的学习。