zoukankan      html  css  js  c++  java
  • 距离向量(DV)协议

    由于最近在学网络,写下来以后复习用。唉,各种心酸啊

    ------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------

    基本思想


    DV协议的基本思想主要是Bellman-Ford 算法(BFA)。说白了,就是一个公式:
    在节点i,到达某个目的地的最短路径di为
    其中N(i)表示节点i的相邻节点的集合,dij表示节点i和相邻节点j的距离(假设是正数)。
    每个节点i都有自己的一张表。在这张表里,记录着它到包括自己在内的网络中所有节点的最短距离。这就是说,如果一个网络中有n个结点,那这个网络里所有节点都有一张含有n行的路由表。

    Synchronous Bellman-Ford (SBF)


    顾名思义,同步就是大家一起做的意思。同步的BF就是说,存在一个全局时钟,在时钟的开头,我们大家都告诉自己的邻居自己的路径估计信息。然后在时钟结束的时候,我们每个人再根据接收到的邻居的信息,利用BF公式,计算出到达某个目的节点的最短路径。

    就向数学里的数列需要有一个第一项一样,这里我们的问题是,第一个值从哪里来?
    根据这个问题的答案,又有两种不同的初始方法。

    SBF/


    这种方法使用来初始化每个节点i在第一个时钟时,路由表里到达除自己以外的所有目的节点的距离值。

    例如,我们有如下网络:

    在节点D,它的路由表在经过4个时钟周期后达到稳定状态。在第0、1、2、3、4个时钟时,其路由表分别如下所示:

    SBF/-1


    对应上一种初始化方法,我们也可以用-1来初始化d(0)中除自身以外的其他距离。

    依然以第一个例子为例。以这种初始化方法,路由表需要经过6个时钟周期才能达到稳定状态。在第0、1、2、3、4、5、6个时钟时得到的路由表为:

    Asynchronous Bellman-Ford (ABF)


    不幸的是,网络的复杂性使得同步是很难达到的,因为有了ABF,异步BF算法。
    异步BF算法的递推式如下:

    可以看到,ABF和SBF表达式非常相似,但ABF允许存在一定的延迟,其中dij表示及节点i上一次从邻居j接收到的最短路径值。
    举个例子,SBF要求所有的邻居在同一时间告诉它最短路径的信息,但是邻居们告诉它,这太难了,我们到你家的距离有远有近,要我们一起到怎么可能?于是就有了ABF,即我不要求邻居在同一时间告诉我,只要你发给我,什么时候到我家无所谓,我更新的时候只管你上次发给我的信息,但是只要我们之间存在的联系,我最后就一定能得到正确的信息!(前提是你发的包裹可以到我家,也就是说网络是连通的)

    ABF总结


    • 分布式的:每个节点将自己的路由表发给和自己直接相连的节点(邻居)
    • 迭代的:周期性的持续,或者当链路发生变化时,如某条链接断开了
    • 异步的:节点们不需要在某一固定时刻同时发送和交换信息
    • 收敛的:在有限的次数内,不管初始值如何,路由表中的每一项一定会收敛到某一固定值,即真正的最短距离(如果网络是连通的)


  • 相关阅读:
    python基础(5)
    python基础(4)
    python基础(3)
    python基础(2)
    第一个python程序(2)
    第一个python教程(1)
    【jQuery】
    【JavaScript】
    【练习】HTML+CSS
    【练习】Html
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314766.html
Copyright © 2011-2022 走看看