一.水平分割
核心原理:
"从哪个接口学到的路由,就不再从这个接口发回去"------ 避免路由信息在相邻路由器之间 "来回循环"。

环路出现情况:
(不考虑触发更新和毒性逆转)
- 故障发生:
- AR2 与 PC1 断开,其直连的192.168.1.0/24路由失效,但 RIP 默认是周期更新(30 秒),AR2 会等待自己的周期更新时间,暂不主动通告故障。
- AR1 的周期更新先触发:
- 在 AR2 等待的期间,AR1 的 30 秒周期更新到了,向 AR2 发送 RIP 报文,其中包含 "自己能到192.168.1.0/24(Cost=1,来源是之前从 AR2 学习的路由)" 的信息。
- AR2 学习错误路由:
- AR2 收到 AR1 的报文后,按照 RIP 的贝尔曼 - 福特算法("从邻居学路由,成本 = 邻居的成本 + 1"),认为 "通过 AR1 可以到达该网段",于是将自己的路由表更新为:192.168.1.0/24 via AR1,Cost=2。
- 环路形成:
- 等 AR2 的周期更新时间到了,它会向 AR1 发送 RIP 报文,其中包含 "自己能到192.168.1.0/24(Cost=2)" 的信息;AR1 收到后,又会把自己的路由成本更新为Cost=3(邻居成本 2+1)。
使用水平分割后的情况:
(不考虑触发更新和毒性逆转)
- 故障发生:
- AR2 与 PC1 断开,直连的192.168.1.0/24路由失效,等待 RIP 周期更新。
- AR1 的周期更新触发:
- AR1 向 AR2 发送 RIP 报文,但注意:AR1 的192.168.1.0/24路由,是从 AR2 的 GE 0/0/0 接口学习到的(最初 AR2 的直连路由传递给 AR1)。
根据水平分割规则:AR1 不会将 "从 AR2 学习到的192.168.1.0/24路由",再从 GE 0/0/0 接口(连接 AR2 的接口)发回给 AR2。
因此,AR1 的这次周期更新报文中,不会包含192.168.1.0/24的路由信息。
- AR1 向 AR2 发送 RIP 报文,但注意:AR1 的192.168.1.0/24路由,是从 AR2 的 GE 0/0/0 接口学习到的(最初 AR2 的直连路由传递给 AR1)。
- AR2 的路由处理:
- AR2 在等待周期更新的期间,不会收到 AR1 关于该网段的错误路由信息,因此它的路由表中192.168.1.0/24会保持 "失效" 状态(直到 RIP 的无效计时器超时,最终删除该路由)。
- 避免环路:
- 后续 AR2 的周期更新触发时,也不会向 AR1 发送该网段的错误路由,从而避免了之前的环路场景。
二.毒性逆转
核心原理:
"从哪个接口学到的路由,若该路由失效,就通过原接口向邻居发送'毒性路由'(标记为不可达,cost值=16)"------ 主动告知邻居 "原路由已失效"。

使用毒性逆转后的情况:
- 故障发生
- AR2 与 PC1 断开,其直连的192.168.1.0/24路由失效,等待 RIP 周期更新(30 秒)。
- AR1 的周期更新先触发
- AR1 的192.168.1.0/24路由,是从 AR2 的 GE 0/0/0 接口学习到的(最初 AR2 传递的直连路由)。
- AR2 收到 AR1 的 RIP 报文,看到192.168.1.0/24的 Cost值=16(不可达),结合自己的路由表(该网段已失效),会确认 "该网段确实不可达",因此不会将该路由添加为 "通过 AR1 可达"。
- 避免环路
- AR2 的周期更新触发时,会向 AR1 发送 "192.168.1.0/24 Cost值=16" 的信息;AR1 收到后,也会确认该网段不可达,最终双方都不会保留错误路由,避免了环路。