1. 链路开销减少

image.png
原本如上图所示👆(只关注y,z),t时刻x->y的开销变为1

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

t0时刻y检测到变化

t0 x y z
y 1 0 1
z 5 1 0

t1时刻,z接收到y的更新信息

t1 x y z
y 2 1 0
z 1 0 1

当开销减小,总共只需要t->t1->t2,两次迭代即可变为静止状态—“**好消息传得快**”
**

2. 链路开销变大

2.1 三个节点

image.png
原本如上图所示👆(只关注y,z),t时刻x->y的开销变为60

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

t0时刻y检测到变化:min{60+0,1+5}=6,(y,x)=>6

t0 x y z
y 6 0 1
z 5 1 0

t1时刻y更新数据给z:min{50+0,1+6}=7,(z,x)=>7

t1 x y z
y 7 1 0
z 6 0 1

… …
t44时刻

y: **min{60+0,1+49}=50,(z**,x)=>50 z: **min{50+0,1+50}=50,(z,x)=>50,此时对于z终于直接选路z->x而非不切实际的z->y->x**
t45 x y z t44 x y z
y 51 1 0 y 50 1 0
z 50 1 0 z 49 1 0

t45时刻

y: min{60+0,1+50}=51,(z,x)=>51,此后确定最小开销为51,不再改变 z不变
t44 x y z t44 x y z
y 50 1 0 y 50 1 0
z 49 1 0 z 49 1 0

之后进入静止状态
分析⭐:当开销变大,总共需要44次迭代才能到达静止状态,这种”震荡”即路由环路,由于pkt的TTL每次减一,震荡极易产生丢包,而问题原因在一:自于x-y的开销增大后,z-y-x的开销没有及时更新,y误以为z-x的开销仍然很小从而选择y-z-x,从而开销加一;反过来z-x时发现y-x开销加一啊,因此z-y-x的开销也加一…如此反复
解决:毒性逆转
由于z的路径本身就是是z-y-x,因此z要告知y,z-x=∞,才能避免由于y-x变化产生的不可数问题
修改:
t0时刻y检测到变化,毒性反转限制:此时z->x是z-y-x,因此z给y的信息为z-x=∞
min{60+0,1+∞}=60,(y,x)=>60,路径直接y-x

t0 x y z
y 60 0 1
z 1 0

t1时刻y更新数据给z,且y-x,无z为中间节点,传递真实数据
min{50+0,1+60}=50,(z,x)=>50

t0 x y z
y 50 1 0
z 60 1 0

此后进入静止状态,问题看似解决,但重点在于应用毒性逆转后,**对于节点个数>3的情况,会出现问题**


2.2 大于三个节点

image.png

如图所示(AB等效),t时刻c-d变化,但由于C作为必经之路,使得A(B)->D始终受毒性逆转

t A B C D
C 1 1 0 1
A 0 1 1
B 1 0 1

t0时刻c更新,受毒性逆转限制,A(B)->D调整为∞

t A B C D
C 1 1 0 100
A 0 1 1
B 1 0 1

t1时刻A(B)更新,min{∞,1+2,1+100}=3

t A B C D
A 0 1 1 3
B 1 0 1 2
C 1 1 0 100

t2,C更新

t A B C D
C 1 1 0 100
A(B) 0 1 1

t3时刻A(B)更新,min{∞,1+3,1+100}=4

t A B C D
A 0 1 1 4
B 1 0 1 3
C 1 1 0 100

…不可数问题再次出现,因为B-D始终不经过A,普通毒性逆转无法觉察

解决:毒性逆转plus版本
当**来自邻居节点的开销上升,且通过其选路**时才逆转
修改:
初始C

t A B C D
C 1 1 0 1
A 0 1 1 2
B 1 0 1 2

t0时刻开销改变,min{100+3,1+2,1+2}=3

t A B C D
C 1 1 0 3
A 0 1 1 2
B 1 0 1 2

⭐t1时刻A(B)更新,min{∞,1+2,1+3}=3,此时:
①邻居C的C-D开销变大
②A-D更新后依据A-C-D选路,满足毒性逆转
则A->C发送开销为{0,1,1,∞}

t A B C D
A 0 1 1 3
B 1 0 1 2
C 1 1 0 3

B同理发送给C{1,0,1,∞}

t A B C D
B 1 0 1 3
A 0 1 1 2
C 1 1 0 3

t2,C更新,min{100+0,1+∞,1+∞}=100

t A B C D
C 1 1 0 100
A 0 1 1
B 1 0 1

t3,A更新,min{∞,1+∞,1+100}=101

t A B C D
A 0 1 1 101
B 1 0 1
C 1 1 0 100

毒性逆转plus版本相当于先不管毒性逆转,直到出现节点A上发现两个指征时,自己的信息依旧按照+1更新,但在给其余任何相邻节点的消息中都把变化的开销谎报为∞