工作流程
1. 初始化
- 每台路由器启动时,先构建自己的路由表:
- 直连网络:代价为 1(跳数)。
- 其他网络:先设置为“不可达”或者不记录。
2. 周期性广播路由表
每 30 秒:
- 向所有邻居(广播地址
255.255.255.255
)发送自己的路由表。 - 使用 UDP 端口 520 发送。
若 180 秒后没有收到通告,则认为邻居死机或链路中断
3. 接收邻居的表并更新自己的表
-
对每一条来自邻居 v 的路径 (v → y),本地计算:
D(x,y) = min{ 当前的 D(x,y), 1 + D(v,y) }
也就是:
-
本地认为通过邻居去 y 更近,就更新。
-
同样的路径,可能不同邻居报的距离不同,选择最短的。
4. 保持更新,直到收敛
- 如果网络拓扑变化(比如一条链路断了),路由器感知不到目标,会把跳数增加;
- 最终所有路由器的路由表会稳定在最短路径。
RIP 转发表处理
通告通过 UDP 报文 520 进行发送,周期性重复。后台应用级程序管理。
⚠️ RIP 的限制与防御机制
1. 最大跳数是 15
- 任何路径超过 15 跳会被认为 不可达(16)。
- 这是防止“无限循环”的简单方式。
2. 防止环路的方法
- 水平分割(Split Horizon):
- 不把从接口学来的信息再通过这个接口发回去。
- 毒性逆转(Poison Reverse):
- 如果某个网络是通过 A 接口学来的,那么告诉 A:这条路的跳数是 16。
- 触发更新(Triggered Update):
- 网络变化立即广播新表(不等 30 秒)。