动态路由2--距离矢量
1) 距离矢量路由选择协议
入门:当我们(数据包)行驶在高速公路上的时候,怎么知道距离(distance)目的地还有多远,行驶方向(direction)对不对呢?路标(距离矢量distance ventor)就能很好的解决这个问题,它告诉我们该往哪个方向(direction)行驶,还需要行驶多长距离(distance)可以下高速。
大多数的路由选择协议都归于两类:距离矢量(distance ventor)和链路状态(link state);
首先距离矢量的路由是以矢量(距离,方向)的方式通告出去的,其中距离根据度量定义,方向根据吓一跳路由器定义。例如:目标A在下一跳路由器方向的5跳之远。
距离矢量路由选择协议是依照传闻进行路由选择的,每台路由器通过向邻接路由器学习它们所观察到的路由信息,然后向外通告自己观察到的路由信息,依次类推。
例如:IP路由选择信息协议(RIP)、internet网关路由选择协议(IGRP)、增强型网关路由选择协议(EIGRP)就是距离矢量路由选择协议。
距离矢量路由选择协议通常使用一个路由选择算法,算法中的路由器通过广播整个路由表,定期的向所有邻居发送路由更新信息。
主要属性如下:
- 定期更新:没经过特定的时间周期向邻居发送更新信息;
- 邻居:共享数据链路的路由器或某些更高层的逻辑邻接关系;
- 广播更新:路由器启动后通过向整个网络的广播地址(255.255.255.255)发送更新信息,使用相同路由协议的邻居路由器会根据接收到的广播数据包进行相应的更新;
- 全路由选择更新:通常距离矢量路由选择协议通过广播整个路由表的方式向邻居通告路由信息;
图1.4.3
如图1.4.3,假如把如图网络的总收敛时间分片为t0+t1+t2,那么:
- 在t0时刻启动路由器后,路由器根据各自接口的直连路由信息更新路由表,并向各自所有的邻居路由器广播自己的路由表信息;
- 在t1时刻各自路由器分别收到来自邻居路由器通告的信息并进行更新;例如R1在收到R2的路由表后会进行对比,192.168.2.0我自己有跳数为0(直连),而如果从R2获取192.168.2.0的路由则为1(通过R2到网络192.168.2.0的多一个路由器R2),所以R1选择不更新到网络192.168.2.0/24的路由信息;对于网络192.168.3.0/24,R1检查自己的路由表后发现没有这个路由信息,所以选择更新到192.168.3.0/24的路由信息;而到网络192.168.3.0/24需要经过路由器R2(下一跳为192.168.2.2),所以跳数+1;
- 在t2时刻,更新周期到期,另一组更新信息被广播,各路由器如上一样进行对比和添加路由表-----》网络收敛;依此类推,在更新周期到期后不断进行广播更新信息;
路由失效计时器:
如图1.4.3,在网络收敛后,当路由器R3发生故障,而网络192.168.4.0/24没有故障,那么路由器R1和R2中还是保留着达到网络192.168.4.0/24的信息,当有数据需要发送到192.168.4.0/24时,R2将继续把数据包转发给R3,而R3不可达,这样就相当于在网络上打开了一个黑洞。
所以在处理如上问题的时候,路由器的路由表中都设置了路由失效计时器,当R3不再往R2发送路由信息的时候计时器会超时,把从R3中获取的路由信息标记为不可达。
水平分隔:
如图1.4.3,在网络收敛后,当网络192.168.4.0/24发生故障的时候,R3将192.168.4.0/24标记为不可达并在下一更新周期时通告给R2,但是同时R2也会通告给R3,我这里有达到网络192.168.4.0/24的路由信息,跳数为1跳,而R3在更新路由表时把这个路由信息(到达网络192.168.4.0/24的路由跳数为2跳,下一跳为R2)存储在本地的路由表中。
那么这时当有数据包从R2转发到网络192.168.4.0/24时,会把数据包传送给R3,而R3查询路由表后又会把数据包传送给R2,依此类推,导致路由环路。
这个时候我们可以通过执行水平分隔的方式阻止环路的发生。分为简单水平分隔和毒性水平分隔。
简单水平分隔:从某接口发送更新消息不能包含从该接口收到的更新消息中所包含的网络;即图1.4.3中R2向R3发送的更新消息中不包含从R3获取到的关于192.168.4.0/24的信息。
毒性水平分隔:当更新信息被发送出某接口时,信息中将指定从该信息中获取的网络是不可达的;即图1.4.3中R2向R3通告了192.168.4.0/24的路由信息,但是R3认为R2发过来的路由信息都不可达。
计数到无穷大:
水平分隔切断了邻居之间的环路,但是它不能割断网络中的环路。
如图1.4.4所示,当网络192.168.7.0/24发生故障时,R1将标记192.168.7.0/24不可达,同时R1将向R2和R3通告192.168.7.0/24不可达,而在此时R4正在向外通告到达网络192.168.7.0/24可达,跳数为3跳/下一跳为R3的路由信息;这个时候R2和R3会把这个可达信息在加1后加入到路由表中并通告给R1,R1在没有其它更优路径可选的情况下也会将这个可达信息加入到本地路由表中,跳数为6跳;
那么在R4中有数据包发往R3---》R1---》R2—》R4,依次类推一直以跳数+1的方式环路,跳数计数到无穷大。
为解决如上问题,我们在路由器中设置最大跳数为15跳,路由器将跳数为16的路由视为不可达。
图1.4.4
触发更新:
为了提高收敛时间,在网络中设定如果一个度量变好或变坏,那么路由器将立即发送更新信息,而不等计时器超时。
注:抑制计时器,异步更新不在这里说了,想了解的请自行查资料。