距离矢量路由选择协议
大多数的距离矢量协议算法都是基于RE.Bellman ,L.R.Ford 和D.R.Fulkerson算法为基础(EIGRP协议除外)。
距离矢量算法的名称的由来是因为路由是以矢量(距离、大小)方式通告出去的。其中距离是根据度量定义的,方向是由下一跳路由器定义的。例如:目标在路由器X方向,距离为5跳。
距离矢量路由协议中,每台路由器的信息都依赖于邻居路由器,而邻居路由器又依赖于它们的邻居路由器。所以,距离矢量路由协议又被认为是“依照传闻进行路由选择”的协议。
距离矢量协议的共同属性:
典型的距离矢量协议都会使用一个路由选择算法。算法中路由器通过广播整个路由表,定期的向所有邻居发送路由更新信息(EIGRP除外)。
1.定期更新(periodic updates)
定期更新意味着经过特定时间周期,就要发送更新信息。
2.邻居(neighbor)
邻居通常意味着共享相同数据链路的路由器或更高层上的逻辑邻居关系。距离矢量路由协议向邻居发送路由器(只考虑路由器)更新信息,并依靠邻居再向它们的邻居传递更新信息。
3.广播更新(broadcast updates)
当路由器被激活时(运行路由协议),它会向网络中发送广播更新信息,使运行相同路由协议的路由器收到广播数据包并做出相应动作。不关心路由更新的主机或运行其他协议的路由器丢弃该数据包。
4.全路由选择表更新
大多数距离矢量路由协议使用广播向邻居发送整个路由表。而邻居路由器在接受时,只会选择自己路由表中没有的信息加表,丢弃其他信息。
依照传闻进行路由选择
如图,正在执行一个距离矢量算法,度量为跳数。
T0时刻,路由器A、B、C、D正好可用。此时这四台路由器所具有的唯一信息就是它们各自的直连网络。路由器标识了这些网络,并且指明了它们直连链路,所以跳数为0.每台路由器都将向它的所有邻居广播这些信息。
T1时刻,路由器接受并处理第一个更新信息。查看A的路由表,路由器B发送给路由器A的更新信息指明B可以到达10.1.2.0和10.1.3.0网段,并且跳数为0.距离B为0跳,那么距离A就为1跳。所以路由器A将跳数+1。然后A对比自己的路由表发现已经有10.1.2.0网段,并且距离为0跳。A就只把10.1.3.0这个自己没有的网段路由加表,指定下一跳为10.1.2.2跳数为1。
T2时刻,随着更新周期再次到期,另一组更新消息被广播。路由器B向路由器A发送了最新的路由表信息。路由器再次将B路由器通告的路由跳数+1,然后对比自己路由表,将自己没有的10.1.4.0加表,下一跳为10.1.2.2,跳数为2。
T3时刻,网络收敛完成。每台路由器都已经知道了每个网络以及下一跳和距离跳数。
距离矢量算法的保障机制:
1.路由失效计时器
我们在已收敛的网络中,当一条链路故障时,该链路的直连路由器会发送更新信息,使网络重新收敛。
但是,当一台路由器出现故障,没设备发消息,但在其他路由器中关于故障路由器链路的路由依然存在,其他路由器会正常的路由转发数据给不存在的故障路由器,这样就形成了路由黑洞。所以为了防止这种名存实亡的现象。路由器会为路由表中每条路由设置一个失效计时器。若路由器在路由项失效计时器失效前收到了该路由的更新消息,就将失效计时器复位;若失效计时器超时了还没收到更新信息,就将该路由标为不可达,并将在下一个更新周期时传递该消息给其他路由器。
2.水平分割
路由的指向和数据的流向相反的路由就逆向路由(reverse route).
水平分割(split horizon)是一种在两台路由器之间阻止逆向路由的技术。这样做不仅节约了资源,而且能阻止将一台路由器发送的路由更新再输入到该路由器中。
我们将在两台或多台路由器之间的数据循环叫做路由环路。
执行水平分割可以阻止邻居间的环路产生。
水平分割分为两种:
(1)简单水平分割,采用抑制消息的方式。
(2)毒性逆转水平分割:将超时路由设为不可达(例如将跳数设为16跳)的更新消息发送给邻居。邻居接收以后做修改并向所有邻居发送更新消息(也包括给发送的路由器)。这样做的目的有两个:一是传递网络不可达消息,二是表示自己收到了这个消息(隐式确认)。
3.计数无穷大
水平分割可以阻止邻居间的环路,但不能阻止网络中的环路。
当网络中某条路由出现环路后,该条路由在不断的更新过程中度量会变大,趋于无穷时,网络中的路由器会认为该网络不可达(RIP中16跳就是不可达)。但这样网络的收敛速度还是很慢。
4.触发更新
触发更新(Triggered Update)又叫快速更新。原理:如果一个度量变好或变坏。那么路由器将立即发送更新信息,而不等更新计时器超时。这样重新收敛的速度会比每台路由器必须等待更新周期要快,而且可以大大减少更新到无穷大所引发的问题,虽然不能完全消除。
虽然触发更新能更快的发送更新信息,但在重收敛的过程中还是会发生混乱和路由错误。
5.抑制计时器
触发更新为正在重新收敛的网络提供了应变能力。重收敛时为了降低接收错误路由选择信息的可能性。抑制计时器引入某种怀疑量。
如果一个目标的度量增加,那么路由器将为路由设置抑制计时器。直到计时器超时,路由器才会接受该路由相关信息。
6.异步更新
防止路由器同时发送更新信息造成链路拥塞,影响系统时延。
维护路由异步更新的方法:
(1)每台路由器的更新计时器独立于路由选择进程,因而不会受到路由器处理负载的影响。
(2)在每个周期更新中加入一个小的随机时间或定时抖动作为时间偏移。
如果路由器实现了严格的,独立于系统的计时方法,那么还必须按照随机的方式激活。共享一个广播网络内的所有路由器。因为并组启动整组路由器(如大面积断电),可能会造成所有路由器同时发送更新信息。
如果随机变量与共享网络的路由器数量相比足够大,那么更新周期的随机性是有效的。在足够大的网络中,过小的随机化会被路由器所克服,为了保证有效性,更新计时器应该分布在中等更新周期的50%的范围内。