一个路由算法,至少包含以下特点:
- 传递关于网络可达信息给其他路由器;
- 从其他路由器接收网络可达信息;
- 处理收到的信息,计算最优路径并保存;
- 对拓扑变化产生反应。
####################################################################################
距离矢量路由协议:
路由作为一种矢量来宣告(距离+方向)。因为所有信息都是从邻居得到的,邻居的路由也从另外邻居得到,所以这类路由协议又称作“根据流言路由”。
距离矢量路由协议具有以下普遍特性:
- 定期更新。
- 邻居-----共享同一数据线路的路由器。邻居相互通告,hop-by-hop updates.
- 广播更新。路由器第一次加入网络时候,需要广播发现其他邻居。
- 全路由表更新。多数距离矢量路由协议会告诉邻居所有他们知道的信息。
距离矢量路由协议常用以下方法弥补其“流言路由“的缺陷:
- Route invalidation timer,路由寿命。每条路有有一个寿命期限。
- split horizon,水平分割。 从一个接口学到的路由,不会再从那个接口转发出去。
- 水平分割+路由毒化:从一个接口学到的路由,会以不可达的标记(unreachable/infinite)从同一个接口转发出去。 这个方法的基本思想是“坏消息比没有消息好”。
- define infinity,定义不可达跳数。水平分割不能解决环形网络路由无效路由无限循环,define infinity可以防止这种情况。通常距离矢量协议的最大跳数为16。但最大跳数使得收敛速度非常慢,如果一个路由协议每30秒跟新一次,那么到达16跳最大跳数需要7.5分钟,解决方法有两个:触发更新和holddown timers。
- Holddown timer。如果到达一个目的地的距离增加了,那么在holddown timer时间内,路由器不再接受任何新的到达此目的地的路由。
- Asynchronous updates,异步更新。如果多个路由器连接在同一广播域,那么随着时间推移,会逐步形成同步更新,导致冲突。