DV算法引发的链路故障

Posted milaiko

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DV算法引发的链路故障相关的知识,希望对你有一定的参考价值。

DV算法

DV算法是一个迭代的、异步的和分布式的算法,而LS算法是一种使用全局信息的算法。

  • 分布式 每个节点都要从一个或多个直接相连邻居接收信息,执行计算,将计算结果发给邻居
  • 异步 它不要求所有节点相互之间步伐一致地操作
  • 迭代因为此过程要一直持续到邻居之间没有更多的信息为止。

DV算法和Bellman-Ford方程相关

d x ( y ) = m i n x c ( x , y ) + d v ( x , y ) d_x(y) = min_x\\c(x,y) + d_v(x,y)\\ dx(y)=minxc(x,y)+dv(x,y)

m i n v min_v minv是对于所有邻居的, 从x到v遍历之后,如果接下来取从v到y的最低开销路径,该路径开销将会是 c ( x , y ) + d v ( y ) c(x,y)+d_v(y) c(x,y)+dv(y)。。从x到y的最低开销会是对所有邻居v的 c ( x , y ) + d v ( y ) c(x,y) + d_v(y) c(x,y)+dv(y)的最小值。

举个例子

  • t0时刻

x没有收到y和z的路由器信息, y和z也没有收到邻居的信息

ps:inf是无穷大的意思,也就是当

节点x在t0时刻的表

xyz
x027
yinfinfinf
zinfinfinf

y在t0时刻的表

xyz
xinfinfinf
y201
zinfinfinf

z在t0时刻的表

xyz
xinfinfinf
yinfinfinf
z710

在t1时刻,结点y和z给x发来它们自己的邻居的信息

D x ( x ) = 0 D_x(x) = 0 Dx(x)=0
D x ( y ) = m i n c ( x , y ) + D y ( y ) , c ( x , z ) + D z ( y ) = m i n 2 + 0 , 7 + 1 D_x(y) = min\\c(x,y)+D_y(y), c(x,z)+D_z(y)\\ = min\\2+0, 7+1\\ Dx(y)=minc(x,y)+Dy(y),c(x,z)+Dz(y)=min2+0,7+1
D x ( z ) = m i n c ( x , y ) + D y ( z ) , c ( x , z ) + D z ( y ) = m i n 2 + 1 , 7 + 0 D_x(z) = min\\c(x,y)+D_y(z), c(x,z)+D_z(y)\\ = min\\2+1, 7+0\\ Dx(z)=minc(x,y)+Dy(z),c(x,z)+Dz(y)=min2+1,7+0

此时 D x ( z ) D_x(z) Dx(z)从7变成了3

  • t1时刻
xyz
x023
y201
z710

DV算法通过异步性,就是t1时刻的转发表是根据邻居的t0时刻的转发表做决策的,不会引发LS那种在同时间更新转发表而导致的振荡。

DV算法引发的链路故障

初始状态

经过更新之后得到最后y的转发表,并设此时的时间为t0

xyz
x045
y401
z510

状态变更

然后x到y的通路突然变到了60,那么y在t1时刻的转发表变成了

xyz
x045
y6001
z510

然后根据计算得到

xyz
x045
y601
z510

问题出现

可以看到x发给y的转发路径并没有更改,而是根据上个时间t0的表, 那么这么来看,可以发现y到x的最短路径可以从z出发,1+5=6,而事实上,z到x的这个5是根据y到x没有发生变化之前的数值。,因为z到x的最短路径为5是以y为中介点4+1=5计算来的,但是现在y到x不是4了,而是60.

这种情况称为选择环路

  • 即到达x,y 通过z路由,z又通过y路由

邻居更新

因为结点y计算出到x的新的最新开销, 4——>6, 所以z的表也需要更新,从5变成6+1 = 7。

然后y又收到了z的更新,从而又去更新到x的cost,以此反复需要经过44此迭代,直到z最终算出它经由y的路径大于50为止,这是z确定它到x的最短路径为它到x的直接连接。

可以直到关于链路增加的坏消息,DV算法传播得很慢。

避免无穷计数 -增加毒性逆转

如果z通过y路由到达目的地x,则z将通告y,它到x的距离为无穷大,那么y就不会试图从经过z路由到达x。

看看毒性逆转如何解决该问题

y的距离表指示了 D z ( x ) = i n f D_z(x) = inf Dz(x)=inf,当(x,y)链路的开销从4变为60时,在下一个时刻通知z, 即 D y ( x ) = 60 D_y(x)=60 Dy(x)=60,z收到更新后,将立刻到x的路径切换为直接路径,因为z不再经过y到达x, 那么此时z可以通知y D z ( x ) = 50 D_z(x) = 50 Dz(x)=50, 然后y便利用更新 D y ( x ) = 51 D_y(x)=51 Dy(x)=51,不过通知z是 D y ( x ) = i n f D_y(x)=inf Dy(x)=inf,但是毒性逆转没有解决一般的无穷计数问题,当涉及到3个或更多结点的环路无法被毒性逆转技术检测到。

以上是关于DV算法引发的链路故障的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络:链路状态路由算法

3.2OSPF

各种生成树(stprstppvstmstpmsti)概念

STP生成树相关

浅谈思科设备——环路解决方案

第三章在局域网中使用冗余链路