split-horizon产生的路由欺骗
RIP协议中,无论是产生路由环路还是收敛慢都是我们不愿意看到的。当然它也有一些辅助的措施来补救,比如:
- Split-horizon(水平分割)
- Split-horizon with poisoned reverse(带毒性逆转的水平分割)
- Triggered update(触发更新)
- Holddown timer
- Define a maximum hop count(定义最大值)
split-horizon 用于应对两点之间的相互路由欺骗,潜台词的含义便是,超过2个及以上 的路由使用split-horizon仍会出现路由欺骗。
split-horizon简介
split-horizon和Split-horizon with poisoned reverse本质上是一回事,他的含义便是从一端收到的路由信息不会再重复传回去
(带毒性即是可以重复传回去,但此时会将重复路由的跳数设为16,也就是最大,这样对方即使收到也会抛弃这个条目,相当于没有收到。)
欺骗问题
但是这样并没有完全解决欺骗问题,路由仍有可能产生环路。
如下图:
在路由器 A 与路由器 D 之间链路未故障时,到达路由器 A 的路由表
Router | Next Router | cost |
---|---|---|
B | C | 3 |
C | D | 2 |
D | A | 1 |
此时A与D之间链路发生故障
对于路由器D,D->A 的消耗为 16
由于split-horizon, C不会向D扩散路由表,B不会向 C 扩散路由表
但是B可以向D扩散路由表,此时D认为B->A的消耗为3,D->B 的消耗为 5,D 自认为可以到达 A,消耗为 8
此时B,C,D三者均认为自己可以到达A
Router | Next Router | cost |
---|---|---|
B | C | 3 |
C | D | 2 |
D | B | 8 |
三者继续广播,D 向 C 广播,D->A 的消耗为 8,
则 C 进行更新路由表
Router | Next Router | cost |
---|---|---|
C | D | 9 |
C 向 B 广播,C->A 的消耗为 9
则 B 进行更新路由表
则B 进行更新路由表
Router | Next Router | cost |
---|---|---|
B | C | 10 |
B 向 D 广播,B->A 的消耗为 10
则 D 进行更新路由表
则D 进行更新路由表
Router | Next Router | cost |
---|---|---|
D | B | 15 |
继续进行广播更新
C 更新路由表
Router | Next Router | cost |
---|---|---|
C | D | 16 |
可以看出,此时C才知道有链路损坏,跳数到了16
此前B,C,D之间形成了路由环路,导致了“坏消息”不能快速传递
避免split-horizon造成的这种路由欺骗,就要用到后面的Triggered update(触发更新)等规则了