大家对自己居住的周边环境很熟悉,对于那些远离我们居住的地方可能就不熟悉了。假如某一天我们去了一个陌生的城市,我们需要到该城市的市中心。我们得借助于该城市的公交车,那么你得信任公交路线提供的信息。公交路线告诉你110 112 119 120这几路车能到市中心,你经过比较发现110经历的站点是最少的,所花费的行程最短,于是你选择乘坐了110,那么接下来的事情是你只要找到110就可以了,其他的一切交给110.。虽然你没有选择112 119 120,但是你依然相信它们也能到市中心。如果110没车了那么你就得选择112 119 120其中一路。
路由器A对自己的直连网络非常熟悉(有端口居住在此网络中能不熟悉吗?),直连网络以外的网络X对于A来说是陌生的,路由器A需要路由数据包到X,A得借助于邻居路由器,那么A得相信邻居路由器提供的路由信息,邻居BCD通过路由信息告诉A它们都能到网络X,A经过比较发现B经历的路由跳数是最少的,于是路由器A选择了把到X的数据包交给B(把B通告的关于网络X的路由信息添加到自己的路由表中),其他的事情就完全由B来完成,与A就无关了。虽然A没有选择BCD来转发到X的数据包(没有把BCD通告的关于网络X的路由添加进路由表),但是A相信BCD有能力把包传送到网络X。突然B出现故障了,A就必须在BCD中选择邻居来传送X的数据包。
距离矢量协议的特征:每台路由器只了解自己的直连网络,绝对信任邻居发布的路由信息(任何极端情况总是不好的。也正因为这种信任会导致路由错误),只单纯比较各路由的优劣从而选择出最优路径。
距离矢量协议路由器简单来说做了三件事
一 添加直连路由进自己的路由表
二 广播自己的整张路由表给邻居(发送路由信息给邻居)
三 信任邻居发来的路由信息(无论接受的路由和忽略的路由都信任,只是优劣区别),只单纯的计算度量(自己到邻居的度量+邻居通告的度量),按照接收原则筛选最优路由进路由表。
二和三 不断循环从而使得每台路由器都学到整个网络的路由。
路由接收原则(始终选择最优路径)
如果 邻居通告的目的网络是一个新的网络,自己的路由表中不存在,则添加此路由
如果 邻居通告的目的网络不是一个新的网络 若通告度量优于自身路由表的度量,则接受该路由并替换原路由
若通告度量劣于自身路由表的度量 判断通告路由器是否于路由表中的相同 相同 则修改该目的网络的度量 不同 则忽略此路由。
若通告度量等于自身路由表的度量 则保持该网络的原来路由条目 并添加此路由 以为网络做负载均衡。