|
知识路径: > 计算机网络原理 > 网络互连 > 路由算法 > 距离矢量路由算法 >
|
相关知识点:4个
|
|
|
|
对于慢收敛这个问题有几种不完善的解决方法。其中的一种方法是使用一个较小的数作为无穷大的近似值。例如,可以认为穿过某个网络的最大跳数不会超过16,因此可以选择16来表示无穷大。这样至少可以限制计数到无穷大所花费的时间。当然,如果网络中节点间距多于16跳时,就又会出现新的问题。
|
|
|
(1)水平分割。改进稳定路由选择所需时间的一种方法是水平分割(split horizon)。水平分割方法的思想是任何一个节点并不把从它邻居路由器学到的路由再回送给那些邻居路由器,即当路由器从某个网络接口发送路由更新报文时,其中不能包含从该接口学到的路由信息。例如,在上图中,如果节点C在其距离矢量表中有(A,2)这一项,而且C知道该路由是从路由器B学到的。所以当C发送距离矢量表给B时,在距离矢量表中不应该包括(A,2)这一项。
|
|
|
为了更更具体地解释水平分割的思想,举一个现实生活中的例子。假定哈尔滨人(D地)和北京人(C地)都要去广州(A地),但他们都必须经过长沙(B地),而哈尔滨人还要先经过北京。假定哈尔滨人想要知道去广州的道路信息(道路是否畅通,距离是多少),必须先通过北京人,同样北京人要知道去广州的道路信息,必须先通过长沙人(当然,哈尔滨人知道到北京的道路信息,而北京人也知道到长沙的道路信息)。那么在这种情况下,如果出现北京人告诉长沙人去广州的路由信息是没有任何意义的。换句话说,北京人根本不需要告诉长沙人关于去广州的任何信息,因为北京人得到的关于去广州的道路信息都是长沙人告诉他们的,但北京人必须告诉哈尔滨人到广州的道路信息。对应于上图的例子,C可以告诉D它到A的实际距离,但C或不告诉B它到A的情况(水平分割),或者告诉B它到A的距离为∞(带毒性反转的水平分割);原因是在这种情况下,C报告B它到A的距离没有任何意义,因为C到A的路由要通过B。类似的道理,D告诉E到A的实际距离,但不向C报告它到A的距离。
|
|
|
(2)毒性反转。比水平分割更好的一种方法是毒性反转(Poison Reverse)。使用毒性反转方法时,C仍然把来自B的到达A的路由信息回送给B,但在该距离矢量表中这一项的距离是无穷大以确保B不会使用C的路由,即C把(A,∞)这一距离矢量发送给B。而且为了加强毒性反转的效果,最好同时使用触发更新(Trigged Update)技术,即一旦某节点检测到网络故障,就立即发送距离矢量表,而不必等到下一个周期。而其他路由器一旦发现路由表有更新,就立即发送距离矢量表。
|
|
|
采用了毒性反转方法后,再来看看A、B线路断开后的路由交换情况。在第1次交换距离矢量表后,B发现直达A的线路断了,于是B就知道A不可达(B是通过在规定的时间之内没有收到A发来的距离矢量表来判断或者是B到A的线路出故障了,或路由器A出故障了),而C此时报告给B它到A的距离为∞,由于B的两个邻居都到不了A,B就将它到A的距离设置为∞。第2次交换后,C也发现从它的两个邻居都到不了A,C也将A标为不可达。经过第3次、第4次交换后,D和E依次发现A是不可达的。使用水平分割后,坏消息以每交换一次距离矢量表向前推进一步的速度传播。
|
|
|