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)=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)的最小值。
举个例子
- 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算法引发的链路故障
初始状态
经过更新之后得到最后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个或更多结点的环路无法被毒性逆转技术检测到。
以上是关于DV算法引发的链路故障的主要内容,如果未能解决你的问题,请参考以下文章