链路状态路由协议
在这里,我们首先将了解链路状态路由协议的原理及它的算法等知识,然后,将详细介绍链路状态路由协议相对于距离矢量路由协议的优势。
9.1 链路状态路由协议原理
属于链路状态类型的路由协议有OSPF、IS-IS等路由协议。
运行链路状态路由协议的路由器,在互相学习路由之前,会首先向邻居路由器学习整个网络的拓扑结构,在自己的内存中建立一个拓扑表(或称链路状态数据库),然后使用最短路径优先(SPF)算法,从自己的拓扑表里计算出路由来。
这就好比是在上高速路之前先去买了一份地图,之后再开车去目的地,这样就不用看了路牌了。遇到路坏了,也可以根据自己手中的地图找到绕行的路,而不用再去问别人了。
运行链路状态路由协议的路由器虽然在开始学习路由时先要学习整个网路的拓扑,学习路由的速率可能会比运行距离矢量路由协议的路由器慢一点,但是一旦路由学习完毕,路由器之间就不再需要周期性地互相传递路由表了,因为整个网路的拓扑路由器都知道,不需要使用周期性的路由更新包来维持路由表的正确性,从而节省了网路的带宽。
当网路拓扑出现改变时(如在网路中加入了新的路由器或网路发生了故障),路由器也不需要吧自己的整个路由表发送给邻居路由器,只需要发出一个包含有出现改变网段的信息的触发更新包。收到这个包的路由器会把该信息添加进拓扑表里,并且从拓扑表里计算出新的路由。由于运行链路状态路由协议的路由器都维护一个相同的拓扑表,而路由是路由器自己从这张表中计算出来的,所以运行链路状态路由协议的路由器都能自己保证路由的正确性,不需要使用额外的措施来保证它。运行链路状态路由协议的网路在出现故障收敛是很快的。
由于链路状态路由协议不必周期性地传递路由更新包,所以它不像距离矢量路由协议一样用路由更新包来维持邻居关系,链路状态路由协议必须使用专门的Hello包来维持邻居关系。运行链路状态路由协议的路由器周期性地向邻居的路由器发送Hello包,它们通过Hello 包中的信息相互认识对方并且形成邻居关系。只有在形成邻居关系之后,路由器才可能学习网路拓扑。
9.2 链路状态路由协议的算法
正如我们所知,运行链路状态路由协议的路由器在计算路由之前会首先学习网络拓扑,建立拓扑表。然后,它们会使用SPF算法(基于Dijkstra算法),即最短路径优先(Shortest
Path First )算法,根据拓扑表计算路由。
SPF算法会把网路拓扑转变为最短路径优先树(Shortest Path First Tree),然后从该树型结构中找出到达每一个网段的最短路径,该路径就是路由;同时,该树型结构还保证了所计算出的路由不会存在路由环路。
SPF计算路由的依据是带宽,每条链路根据其带宽都有相应的开销(Cost)。开销越小,该链路的带宽越大,该链路越优。
9.3 链路状态协议的优缺点
当在比较大型的网路里运行时,距离矢量路由协议就暴露出了它的缺陷。比如,运行距离矢量路由协议的路由器由于不能了解整个网路的拓扑,只能周期性地向自己的邻居路由器发送路由更新包,这种操作增加了整个网路的负担。距离矢量路由协议在处理网路故障时,其收敛速率也极其缓慢,通常要耗时4~8分钟甚至更长,着对于大型网络或者电信级网路的骨干来说是不能忍受的。另外,距离矢量路由协议的最大度量值的限制也使得该种协议无法再大型网络里使用。所以,在大型网络里,我们需要使用一种比距离矢量路由协议更加高效,对网络带宽的影响更小的动态路由协议,这种协议就是链路状态路由协议。
1. 链路状态路由协议与距离矢量路由协议的比较
链路状态路由协议与距离矢量路由协议的比较的比较如下。
1)对整个网络拓扑的了解
运行距离矢量路由协议的路由器都是从自己的邻居路由器处得到邻居的整个路由表,然后学习其中的路由信息,在把自己的路由表发给所有的邻居路由器。在这个程中,路由器虽然可以学习到路由,但是路由器并不了解整个网络的拓扑。运行链路状态路由协议的路由器首先会向邻居路由器学习整个网络拓扑,建立拓扑表,然后使用SPF算法从该拓扑表里自己计算出路由来。
由于对整个网络拓扑的了解,链路状态路由协议具有很多距离矢量路由协议所不具备的优点。
2)计算路由的算法
距离矢量路由协议的算法(也被称为Bellman –Ford-Fulkerson算法),只能够使路由器知道一个IP网段在网络里德哪个方向,有多远,而不能知道该IP网络的具体位置,从而使路由器无法了解网络的拓扑。
链路状态路由协议的算法需要链路状态数据库的支持,链路状态路由协议是从链路状态数据库里计算出路由的。
3)路由更新
由于距离矢量路由协议不能了解网络拓扑,运行该协议的路由器必须周期性地向邻居路
由器发送路由更新包,其中包括了自己的整个路由表。距离矢量路由协议只能以这种方式保证路由表的正确性和实时性。运行距离矢量路由协议的路由器无法告诉邻居路由器哪一条特定的链路发生了故障,因为它们都不知道网络拓扑的样子。
由于在链路状态路由协议刚刚开始工作时,所有运行链路状态路由协议的路由器就都学习了整个网络的拓扑,并且从中计算出了路由,所以运行链路状态路由协议的路由器不必周期性地向邻居路由器传递路由更新包。它只需要在网络发生故障时发出触发的更新包,告诉其它的路由器在网络的哪个位置发生了故障即可。而网络中的路由器会依据拓扑表重新计算该链路相关的路由。链路状态路由协议的路由更新是增量的更新。
2. 链路状态路由协议的优点
从上述比较,我们可以看出链路状态路由协议的优点如下。
●快速收敛。
由于该链路状态路由协议对整个网络拓的了解,当发生网络故障故障时,察觉到该故障的路由器将该故障向网络里德其它路由器通告。接收到链路状态通告的路由器除了继续传递该通告外,还会根据自己的拓扑表重新计算关于故障网段的路由。这个重新计算的过程相当快速,整个网络会在极短的时间里收敛。
●路由更新的操作更加有效率。
由于链路状态路由协议在刚刚开始工作的时候,路由器就已经学习了整个网络的拓扑,并且根据网络拓扑计算出了路由表,如果网络的拓扑不发生改变,这些路由器的路由表里的路由条目一定是正确的。所以运行链路状态路由协议的路由器之间不必周期性地传递路由更新包来保证路由表的正确性,它们只需要在网络拓扑发生改变的时候(如有新的路由器加入网络或者网络中出现了故障),发送触发的更新包来通知其他路由器,网络中具体哪里发生了变化,而不用传递整个路由表。接收到该信息的路由器会根据自己的拓扑表计算出网络中变化部分的路由。
这种触发的更新(或者叫做增量更新),由于不必周期性地传递整个路由表,使路由更新的处理变得更有效率了。
但是,链路状态路由协议并不是没有缺点。
●由于链路状态路由协议要求路由器首先学习拓扑表,然后从中计算出路由,所以运行链路状态路由协议的路由器被要求有更大的内存和更强计算能力的处理器。
●同时,由于链路状态路由协议在刚刚开始工作的时候,路由器之间要首先形成邻居关系,并且学习网络拓扑,所以路由器在网络刚开始工作的时候不能路由数据包,必须等到拓扑表建立起来并且从中计算出路由,路由器才能进行数据包的路由操作,这个过程需要一定的时间。
●另外,因为链路状态路由协议要求在网络中划分区域,并且对每个区域的路由进行汇总,从而达到减少路由表的路由条目、减少路由操作延时的目的,所以链路状态路由协议