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)=minx{ c(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)的最小值。

举个例子

DV算法引发的链路故障_第1张图片

  • t0时刻

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

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

节点x在t0时刻的表

x y z
x 0 2 7
y inf inf inf
z inf inf inf

y在t0时刻的表

x y z
x inf inf inf
y 2 0 1
z inf inf inf

z在t0时刻的表

x y z
x inf inf inf
y inf inf inf
z 7 1 0

在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)=min{ c(x,y)+Dy(y),c(x,z)+Dz(y)}=min{ 2+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)=min{ c(x,y)+Dy(z),c(x,z)+Dz(y)}=min{ 2+1,7+0}

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

  • t1时刻
x y z
x 0 2 3
y 2 0 1
z 7 1 0

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

DV算法引发的链路故障

DV算法引发的链路故障_第2张图片

初始状态

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

x y z
x 0 4 5
y 4 0 1
z 5 1 0

状态变更

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

x y z
x 0 4 5
y 60 0 1
z 5 1 0

然后根据计算得到

x y z
x 0 4 5
y 6 0 1
z 5 1 0

问题出现

可以看到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个或更多结点的环路无法被毒性逆转技术检测到。

你可能感兴趣的:(计算机网络自顶而下学习笔记,计算机网络)