• IP路由__距离矢量路由选择协议


    矢量路由选择协议

    1.距离矢量路由选择算法发送完整的路由选择表到相邻的路由器,然后,相邻的路由器会将接收到的路由表项与自己原有的路由表进行组合,以完善路由器的路由表。

      由于路由器接收到的更新只是来自相邻路由器对于远程网络的确认信息,它并没有实地亲自去查找,所以这一方式被戏称为传言路由。

      某个网络可能会有多条链路可以到达同一个远程网络。如果出现这一情况,将首先检查管理距离。如果AD是相同的,协议将会使用其他量度值来决定到达远程网络的最佳路径。

    2.RIP只使用跳计数来决定到达某个互联网络的最佳路径。如果RIP发现对于同一个远程网络存在有不止一条链路,并且它们又都具有相同的跳计数,则路由器将自动执行循环负载均衡。RIP可以对多达6个相同开销的链路实现负载均衡(默认时为4个)。

      然而,当两个到达某一远程网络的链路具有不同的带宽但又具有相同的跳计数时,使用这种类型的路由度量将会带来一定的问题。例如在图6.12中,就给出了两条到达远程网络172.16.10.0的链路。

       

      由于网络172.16.30.0是一条T1链路,它的带宽是1.544Mbps,而网络172.16.20.0是一条56KB的链路,你当然是希望路由器选择T1而不是56KB链路。但是,由于跳计数是RIP路由选择协议唯一使用的量度,所以,

      这两条链路将被视为是具有相同开销的链路。这种情况就称为针孔拥塞。

    3.理解距离矢量路由选择协议在它启动时会做些什么是很重要的。在下图中,4台路由器在启动时它们的路由表中只有与它们直接相连网络的表项。当距离矢量路由选择协议在每台路由器上运行后,路由表将会使用从相邻路由器得到的所有路由信息来完成更新。

        

      如上图,每台路由器在它们的路由表中只有直接相连网络的信息。每台路由器将从路由器上每个激活的接口发送出它的完整路由表。每台路由器的路由表都包含有网络号、输出接口和可达网络的跳计数。

      

      如上图,由于路由表包含了此互联网络中所有网络的信息,因此它是完整的。它们被称为收敛。路由收敛:网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程。

      也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。

      通过路由收敛可以使路由域中所有路由器对当前的网络结构和路由转发达成一致的状态。

      当这些路由器处于收敛时,没有数据传递。这就是为什么快速的收敛时间会被认为是好的。事实上,使用RIP的一个问题就是它的缓慢收敛时间。

      在每台路由器的路由表中都会保存有关于远程网络的一些信息,如网络号、路由器发送数据包到达此网络的接口号和到达此网络的跳计数或量度值。

    路由环路及解决办法

    1.距离矢量路由选择协议会通过定期广播路由更新到所有激活的接口,来跟踪互联网络中的任何变化。这个广播包含着整个路由表。这样是可以正常工作的,尽管它会占用一定的CPU进程和链路带宽。

      但是,如果一个网络出现瘫痪,实质性的问题就会产生。特别是,距离矢量路由选择协议的慢收敛会造成矛盾的路由表和路由环路。

      路由环路的发生是由于每台路由器不能同时或接近同时地完成路由表的更新。在维护路由表信息的时候,如果在拓扑发生改变后,网络收敛缓慢产生了不协调或者矛盾的路由选择条目,就会发生路由环路的问题,这种条件下,

      路由器对无法到达的网络路由不予理睬,导致用户的数据包不停在网络上循环发送,最终造成网络资源的严重浪费。链路状态算法(OSPF)不会产生路由环路,因此,消除路由环路的技术,都是针对距离向量协议进行的。

    2.作为示例,让我们来假设在下图中网络X发生故障。

      

      则C路由器收到故障信息,并在路由表中把X网络设置为不可达,等待更新周期到时来通知相邻的B路由器。     但这时,如果相邻的B路由器的更新周期先来了,则C路由器将从B路由器那学习并更新到达X网络的路由。

      这是错误路由,因为此时的X网络已经损坏,而C路由器却在自己的路由表内增加了一条经过B 路由器到达X网络的路由。然后C路由器还会继续把该错误路由通告给B路由器,B路由器更新路由表,认为到达X网络须经过C路由,

      然后继续通知相邻的路由器,至此路由环路形成,C路由器认为到达X网络经过B路由器,而B则认为到达X网络进过C路由器。

    解决路由环路的办法如下:

    3.最大跳计数

      路由环路的问题可以简单地描述为无穷大计数,它是由于通告互联网络通信和传播的传言(广播)及错误信息所造成的。如果不使用一些人工干预,数据包每通过一台路由器的跳计数的增长会具有不确定性。

      解决这个问题的一个方式是定义最大跳计数。RIP允许跳计数最大可以达到 15,所以任何需要经过16跳到达的网络都被认为是不可达的。换句话说,在到达15跳的循环后,网络X将被认为是不可达的。

      因此,最大跳计数可以控制一个路由表项在达到多大的值后变成无效或不可信。

    4.水平分割

      另一个解决路由环路问题的方案被称为水平分割。它通过在距离矢量网络中强制信息的传送规则来减少产生不正确路由信息和路由管理开销,具体做法是限制路由器不能按接收信息的方向去发送信息。

      换句话说,路由选择协议区分网络路由信息是哪个接口获取的,一旦这个判断被确定,它将不再把有关这一路由的信息再发送回同一接口。这将阻止路由器 A发送有关从路由器B处接收的更新信息返回路由器B。

    5.毒抑路由

      定义最大值在一定程度上解决了路由环路问题,但并不彻底,可以看到,在达到最大值之前,路由环路还是存在的。为此,毒抑路由就可以彻底解决这个问题。  例如,当网络X出现问题时,

      路由器C可以通过输入网络X为16或不可达(有时视为是无穷大)的表项来引发一个毒抑路由。

      由于这个到网络X的毒抑路由,路由器B将不再容易接收路由到网络X的错误更新。当路由器B从路由器C处接收了一个毒抑路由时,它会发送一个中毒反转的更新,返回路由器C。这就保证了在这个网段中的所有路由器都可以接收到这个毒抑路由的路由信息。

    6.保持关闭

      保持关闭可以阻止定期的更新消息去恢复一个不断开闭(称为翻动)的路由。通常,在串行链路上连接丢失然后又恢复是经常发生的。如果没有办法来稳定这一状况,网络将决不会到达收敛,并且翻动的接口会导致网络瘫痪!

      通过为每个已关闭的路由进行回复或为提高下一个最佳路由修改前的网络稳定性而设置允许定时器,保持关闭可以阻止过于频繁的路由修改。这可以告诉路由器,任何关于近期删除路由的修改,都将被限制在某个指定的时间间隔之外。

      这样,可以防止在其他路由器的路由表中过早恢复某些无效路由。

    7.控制更新时间(即抑制计时器):

      抑制计时器用于阻止定期更新的消息在不恰当的时间内重置一个已经坏掉的路由。抑制计时器告诉路由器把可能影响路由的任何改变暂时保持一段时间,抑制时间通常比更新信息发送到整个网络的时间要长。

      当路由器从邻居接收到以前能够访问的网络现在不能访问的更新后,就将该路由标记为不可访问,并启动一个抑制计时器,如果再次收到从邻居发送来的更新信息,包含一个比原来路径具有更好度量值的路由,

      就标记为可以访问,并取消抑制计时器。如果在抑制计时器超时之前从不同邻居收到的更新信息包含的度量值比以前的更差,更新将被忽略,这样可以有更多的时间让更新信息传遍整个网络。

      路由中毒和抑制时间结合起来可以在一定程度上避免路由环路的产生,并且抑制复位接口引起的网络震荡。路由中毒即在网络故障或接口复位时,让相应的路由项中毒,即将路由项的度量值设为无穷大,表示该路由项已经失效,

      一般在这个时候都会同时启动抑制时间。比如上面图示的X网络出现故障,则C路由器到X网络的路由表的度量值会被设置为最大,表示X网络已经不可达,并启动抑制时间。如果在抑制时间结束前,C路由器在X网络侧接收到到达X网络的路由,

      则更新路由项,因为此时的X网络故障已经排除,并且删除抑制时间。如果有从别的路由器接收到到达X网络的路由(上图没有),并且新的度量值比旧的好,则更新路由项,删除抑制时间,

      因为此时可能有另一条不经过C但可以到达X网络侧的路由器的路径。但是如果度量值没有以前的好,则不进行更新。

  • 相关阅读:
    scala之旅-核心语言特性【多参数列表(柯里化)】(十二)
    scala之旅-核心语言特性【嵌套函数】(十一)
    集合+队列+锁
    JVM + GC 一遍过
    java agent测试
    actuator
    大话设计模式
    leetcode刷题之mysql精彩集锦
    Redis怎么保证与Mysql缓存一致性
    springcloud
  • 原文地址:https://www.cnblogs.com/xinghen1216/p/11103481.html
Copyright © 2020-2023  润新知