应用场合是该图顶部有三个节点的简单网络。算 法的运行以同步的方式显示出来,其中所有节点同时从其邻居接收报文,计算其新距离向 量,如果距离向量发生了变化则通知其邻居。学习完这个例子后,你应当确信该算法以异 步方式也能正确运行,异步方式中可在任意时刻出现节点计算与更新的产生/接收。
该图最左边一列显示了这3个节点各自的初始路由选择表(routing table)。例如,位 于左上角的表是节点咒的初始路由选择表。在一张特定的路由选择表中,每行是一个距离向量特别是每个节点的路由选择表包括了它的距离向量和它的每个邻居的距离向量。 因此,在节点x的初始路由选择表中的第一行是 = [
(x),
(y),
(z)] = [0, 2, 7]。在该表的第二和第三行是最近分别从节点y和z收到的距离向量。因为在初始化时节 点x还没有从节点y和z收到任何东西,所以第二行和第三行表项中被初始化为无穷大。
初始化后,每个节点向它的两个邻居发送其距离向量。图5-6中用从表的第一列到表 的第二列的箭头说明了这一情况。例如,节点x向两个节点y和z发送了它的距离向量 = [0, 2, 7]。在接收到该更新后,每个节点重新计算它自己的距离向量。例如,节点 x计算
(x) = 0
(y) = min{c(x,y) +
(y), c(x,z) +
(y)} = min{2 + 0, 7 + 1} = 2
(z) = min{c(x,y) +
(z), c(x,z) +
(z)} = min{2 + 1, 7 + 0} = 3
第二列因此为每个节点显示了节点的新距离向量连同刚从它的邻居接收到的距离向 量。注意到,例如节点x到节点z的最低开销估计(z)已经从7变成了 3。还应注意到, 对于节点x,节点y在该DV算法的第14行中取得了最小值;因此在该算法的这个阶段, 我们在节点x得到了
(y) = y和
(z) = y。
在节点重新计算它们的距离向量之后,它们再次向其邻居发送它们的更新距离向量(如果它们已经改变的话)。图5-6中由从表第二列到表第三列的箭头说明了这一情况。注 意到仅有节点x和节点z发送了更新:节点y的距离向量没有发生变化,因此节点y没有发送更新。在接收到这些更新后,这些节点则重新计算它们的距离向量并更新它们的路由选择表,这些显示在第三列中。
从邻居接收更新距离向量、重新计算路由选择表项和通知邻居到目的地的最低开销路 径的开销已经变化的过程继续下去,直到无更新报文发送为止。在这个时候,因为无更新报文发送,将不会出现进一步的路由选择表计算,该算法将进入静止状态,即所有的节点 将执行DV算法中的等待。该算法停留在静止状态,直到一条链路开销发生改变。