工作流程

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 秒)。