为了简化 采用跳数作为路由度量(从源到目的网络所经过的路由器个数),并记直连为0跳
前面已经讨论了 距离矢量协议主要做三件事
1 学习直连路由 2 广播整张路由表 3 接收邻居路由信息 计算距离 按接收原则筛选最优路径进路由表
2 3过程不断循环 使得每台路由器都可以学到整个网络的路由信息。
(一)学习直连路由(路由器了解自己的直连路由,直接添加进路由表)
R1的路由表 R2的路由表
目的地 下一跳 度量 目的地 下一跳 度量
192.168.1.0 直连 0 192.168.2.0 直连 0
192.168.2.0 直连 0 192.168.3.0 直连 0
(二)广播整张路由表 传递路由信息给邻居
R1发送路由信息 (192.168.1.0 0 )(192.168.2.0 0 ) 路由信息以目的地 距离的形式发送 此路由信息表示 R1到192.168.1.0 为0跳 也就是说192.168.1.0是R1的直连网络 192.168.2.0 也是R1的直连网络
R2发送路由信息 (192.168.2.0 0 )(192.168.3.0 0 )
(三)接收邻居的路由信息 计算其距离(自身到邻居的距离+邻居公告的距离) 筛选出最优路径进路由表(按照接收原则)
R1计算从R2收到路由信息的距离 192.168.2.0 1(1+0) 1为自身距离R2 0是R2所通告的距离
192.168.3.0 1(1+0)
筛选最优路由进路由表
192.168.3.0对于R1来说 是个新网络 自身路由表中不含有此目的网络 因此 添加到路由表中
192.168.2.0 R1中已存在 度量为0 而此路由为1 自身原路由表中的路由更优 于是忽略此路由
R1 的路由表 R2路由表
目的地 下一跳 度量 目的地 下一跳 度量
192.168.1.0 直连 0 192.168.2.0 直连 0
192.168.2.0 直连 0 192.168.3.0 直连 0
192.168.3.0 R2 1 192.168.1.0 R1 1
距离矢量协议的方向是通过下一跳路由器来决定的,而下一跳路由器是通过路由信息包中的下一跳字段或者路由信息包中的源IP来提取的,实际上路由信息包中 包含了一个三元组 (目的网络 距离 方向(下一跳))。因为路由是以(距离 方向)的矢量形式来通告的,这就是距离矢量协议的名称由来。
从上面的路由表可以看到R1 R2都已经学到整个网络的路由信息,并且所有路由信息是正确的,此时网路处于收敛状态。
虽然路由器学习到了整个网络的路由信息,但是路由器依然要继续广播它们整张路由表,以来检测网络状态和拓扑改变。我们分析下,下一次广播整张路由表的时候 R2将会发送路由信息(192.168.2.0 0 )(192.168.3.0 0)(192.168.1.0 1 ) 对于192.168.1.0 这个目的网络 R1同样进行距离计算, 得到结果 192.168.1.0 2
然而自身路由表中的192.168.1.0 为0跳 比接收到这条路由更优 忽略此路由
这对于R1来说 这个过程意味着这样一个意思
192.168.1.0 最优路径 通过自身的端口到达 (此路由存放路由表中)
次优路径 把目的地为192.168.1.0的包 发送给R2 R2再把包传递给路由器X(经过R2 RX所以为2跳), 路由器X能把包送到192.168.1.0 。 路由器X和路由器X到192.168.1.0对于R1来说是未知的(R2通告的路由信息中 只交代了到192.168.1.0的距离 隐藏了路由器X及其之后的细节,),一句话 R1就是相信自己把包交给R2 R2就能把包送到目的地(虽然自己没采用这条路径),这就是对邻居路由信息的信任。回想前面说的,自己从公交路线上了解到的到市中心有好几路车,虽然选乘了其中一路,但是仍然相信自己没乘坐的哪几路车依然能到市中心,这是对公交路线信息的信任。但是,不幸的是R1不知道的这个路由器X其实就是他自己,这样很容易导致错误。
始终 记住一点 距离矢量协议收到邻居发送的路由信息 算出自身距该目的地的距离,然后选择最优的路由加入到自己的路由表。无论被接收的路由还是被抛弃的路由 都认为它们是可行的。其实这是距离矢量协议最大的弱点,很容易导致路由环路。
转载于:https://blog.51cto.com/chendezhi/313293