距离向量路由选择

距离向量路由选择

距离向量路由选择是通过对Bellman-Ford算法进行适当修改,找到任意两结点之间的最短路径。

先介绍一下Bellman-Ford算法:

1 Bellman-Ford算法

​ 这个算法基于这样一个事实,如果结点 i 的所有邻站都知道到结点的最短距离,那么求结点 i 和结点 j 之间的最短距离就可以用结点 i 到每个邻站之间的距离分别加上该邻站到结点j的最短距离,然后再从得数中选择最小的一个。
Bellman-Ford算法

用以下步骤为每个结点创建一个最短距离表 :

  1. 结点和它自己之间的最短距离和代价被初始化为0。

  2. 一个结点和任何其他结点之间的最短距离被设置为无穷大。一个结点和其他任何结点之间的代价应当给定(如果两个节点之间没有直接连接,可设置为无穷大)。

  3. 然后循环执行 算法Dij = min{(ci1+D1j),(ci2+D2j),…(ciN+DNj)}

2 距离向量路由选择算法

  1. 在距离向量路由选择中,代价通常就是跳数(即在到达终点之前通过了多少个网络)。因此任意两个邻站之间的代价被设置为1。
  2. 每当路由器从它的邻站那里接收到一些信息时,它就要异步地更新自己的路由表。换言之,每个路由器只执行了整个Bellman-Ford算法中的一部分。这个处理过程是分布式的。
  3. 在路由器更新了自己的路由表之后,应当将结果发送给它的所有邻站,以便这些邻站也能更新它们的路由表。
  4. 每个路由器至少应当保存每条路由的三个信息:目的网络、代价和下一跳。我们称完整的路由表为Table,表中的第i行为Tablei第i行的三个列分别为Tablei.dest,Tablei.cost和Tablei.next。
  5. 我们把来自邻站的一条路由信息称为一个R(记录),它只包含了两个信息:R.dest和R.cost。在收到的记录中不包含下一跳信息,因为下一跳就是发送方的源地址。

3 计数到无穷大

​ 距离向量路由的缺点是:好消息传得快,坏消息传得慢。要想让路由选择协议能够正常工作,如果一条链路中断了(代价变为无穷大),那么其他所有路由器都应当立刻获知这一情况,但是在距离向量路由选择中,这是要花费一些时间的。这个问题就称为计数到无穷大(count to infinity)。需要经过多次更新才能使所有的路由器都把这条中断链路的代价记录为无穷大。

二结点循环问题:

二结点循环问题

为了解决这种不稳定性的几种方法:

  1. 定义无穷大:距离向量协议一般把16定义为无穷大,即16跳为不可达,但是这也意味着距离向量不能用于大系统。在各个方向上,网络的大小都不能超过15跳。
  2. 分割范围:如果结点B根据其路由表认为到达X的最佳路由要经过A,那么它就不需要再把到X的路由通告给A了,因为这个信息就是从A来的(A已经知道了)。从结点A得到信息,修改后再发回给A,这就是产生混乱的根源。所以,结点B在发送路由表给A之前要删除路由表中下一跳为A的路由信息。在这种情况下,结点A保留到X的距离为无穷大。在此之后,当结点A将其路由表发送给B时,结点B也就更正了它的路由表。系统在第一次更新后就变稳定了,因为结点A和B都知道了X是不可达的。
  3. 分割范围和毒性逆转:使用分割范围策略有一个缺点。通常,距离向量协议使用一个计时器,若长时间没有关于某个路由的消息,就要从路由表中删除这个路由。在前面描述的场景中,当结点B在它给A的通告中删除了到X的路由时,结点A并不能猜出这是由于分割范围策略(因为信息的来源是A),还是因为B最近一直都没有收到有关X的任何消息。分割范围策略可以与毒性逆转(poison reverse)策略组合起来使用。结点B可以仍然通知关于X的数值,但如果信息源是A,就把距离换成为无穷大(16)作为一种警告:“不要使用这个数值,我所知道的关于这条路由的信息来自于你。”
三结点不稳定性

​ 分割范围和毒性逆转可以用于避免二结点的不稳定性,但如果是三个结点之间,稳定性仍然无法保证。

三结点不稳定问题

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值