动态路由协议也是路由协议中很重要的部分,可能很多人还是不了解动态路由协议。说到动态路由协议,不得不说距离矢量与链路状态,因为大多数路由协议都属于两类之一。不了解,没关系,希望看完本文你有些收获,那我开始进入今天的学习吧!
距离矢量与链路状态有着不同的算法,这些算法决定着路由协议以何种方式计算出最优路径,如何得到路由表象,算法是路由协议的核心。
1、距离矢量路由选择协议
距离矢量路由协议包括 RIP、IGRP 和 EIGRP。距离矢量算法又称为bellman-Ford算法,RIP、IGRP使用的就是这种算法。顾名思义,距离矢量意味着用距离和方向矢量通告路由。距离使用诸如跳数这样的度量确定,而方向则是下一跳路由器或送出接口。使用距离矢量路由协议的路由器并不了解到达目的网络的整条路径。该路由器只知道:
应该往哪个方向或使用哪个接口转发数据包
自身与目的网络之间的距离
例如,在下图中,R1 知道到达网络 172.16.3.0/24 的距离是 1 跳,方向是从接口 S0/0/0 到 R2。
距离矢量路由协议算法中路由器通过广播整个路由表,定期的向所有邻居发送路由更新信息。暂用带宽不说了,它还会带来路由环路,网络黑洞等现象,所以人们基于它的不足设计出了很多功能,比如:路由失效计时器,水平分割,计数到无穷大,触发更新,抑制计时器,异步更新等,这些功能的出现,完善了距离矢量算法。
距离矢量路由协议有一些共同特征。
按照一定的时间间隔发送定期更新(RIP 的间隔为 30 秒,IGRP 的间隔为 90 秒)。即使拓扑结构数天都未发生变化,定期更新仍然会不断地发送到所有邻居那里。
邻居是指使用同一链路并配置了相同路由协议的其它路由器。路由器只了解自身接口的网络地址以及能够通过其邻居到达的远程网络地址,对于网络拓扑结构的其它部分则一无所知。使用距离矢量路由的路由器不了解网络拓扑结构。
广播更新均发送到 255.255.255.255。配置了相同路由协议的相邻路由器将处理此类更新。所有其它设备也会在第 1、2、3 层处理此类更新,然后将其丢弃。一些距离矢量路由协议使用组播地址而不是广播地址。
定期向所有邻居发送整个路由表更新(但其中也有一些特例,我们将在稍后讨论)。接收这些更新的邻居必须处理整个更新,从中找出有用的信息,并丢弃其余的无用信息。某些距离矢量路由协议(如 EIGRP)不会定期发送路由表更新。
2、链路状态路由选择协议
如果把距离矢量路由选择协议比作是由路标提供的信息,那么链路状态路由选择协议就是一张交通线路图;因为它有一张完整的网络图,所以它是不容易被欺骗而作出错误的路由决策的;链路状态不同于距离矢量依照传闻进行路由选择的工作方式,每台路由器都会产生一些关于自己、本地直连链路以及这些链路的状态(以此而得名)和所有直接相连邻居的信息。这些信息从一台路由器传送到另一台路由器,每台路由器都做一份信息拷贝,但是决不改动这些信息,最终每台路由器都有一个相同的有关网络的信息,并且每台路由器可以独立地计算各自的最优路径;
链路状态协议,有时也叫最短路径优先协议或分布式数据库协议,是围绕着图论中的一个着名算法-E.W.Dijkstra的最短路径算法设计的;链路状态协议有以下几种:
IP开放式最短路径优先OSPF;
CLNS或IP ISO的中间系统到中间系统IS-IS;
DEC的DNA阶段5;
Novell的NetWare链路服务协议NLSP.
链路状态路由选择协议的基本步骤如下:
1)每台路由器与它的邻居之间建立联系,这种联系称为邻接关系;
2)每台路由器向每个邻居发送链路状态通告LSA。对每台路由器链路都会生成一个LSA,LSA用于标识这条链路、链路状态、路由器接口到链路的代价度量值以及链路所连接的所有邻居。每个邻居在收到通告后将依次向它的邻居转发(泛洪)这些通告;
3)每台路由器要在数据库中保存一份它所收到的LSA的备份,如果所有路由器工作正常,那么它们的链路状态数据库应该相同;
4)完整的拓扑数据库,也叫做链路状态数据库,Dijkstra算法使用它对网络图进行计算得出到每台路由器的最短路径;接着链路状态协议对链路状态数据库进行查询找到每台路由器所连接的子网,并把这些信息输入到路由表中。
由此得出,距离矢量是本地路由器先处理收到的路由信息,再发给邻居,邻居拿到的就已经不是一手消息了;链路状态是路由器将拿到的一手消息不经处理,全部发给邻居,由各自路由器自己处理。