路由表概念:

路由(名词)——>数据包从源地址目到的地址所经过的路径,由系列路由节点组成。

路由(动词)——>某个路由节点为数据报选择投递向的选路过程。

路由结点——>个具有路由能的主机或路由器,它维护张路由表,通过查询路由表来决定向哪个接发送数据包。

路由表——>由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接收和发送,其中最后一个是缺省路由条目。

路由条目——>路由表中的每一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接收四部分组成,如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定接受发送到下一跳。

缺省路由条目——>路由表中的最后一行,主要由下一跳地址和发送接收两部分组成,当目的地址与路由表中其他行都不匹配时就按照缺省路由条目发送到下一跳。

在Linux环境下可以通过ifconfig和route查看路由表的信息,如下图所示:

wKioL1eUI3TSYXF_AACxmzUwdA0396.png

wKiom1eUI4WxmBdKAAAl6aymvyM469.png

建立算法:

IP路由表需要一个建立过程,它的建立过程指的是它的初始化过程。任何路由器启动时,都必须首先获取一个初始路由表。不同的网络操作系统,获取初始路由表的方式不同,总的来说,有三种方式。

第一种,路由器系统启动时,从外存读入一个完整的寻径表,长驻内存使用;系统关闭时再将当前路由表(可能经过刷新),写回外存,供下次使用。

第二种,系统启动时,只提供一个空表,通过执行显式命令(比如批处理文件中的命令)来填充。

第三种,系统启动时,从与本路由器直接相连的各网络地址中,推导出一组初始路由,当然通过初始路由只能访问相连网上的主机。
       显见,无论哪种情况,初始路由表总是不完善的,需要不断地运行过程中加以补充,这就是路由表的刷新。RIP正是用于路由表的维护和刷新,RIP协议中的路由刷新算法是距离向量算法,它采取的路由表的初始化方式为第三种。

每个距离矢量表项包括两部分:到达目的结点的最佳输出线路,和到达目的结点所需时间或距离,通信子网中的其它每个路由器在表中占据一个表项,并作为该表项的索引。每隔一段时间,路由器会向所有邻居结点发送它到每个目的结点的距离表,同时它也接收每个邻居结点发来的距离表。这样以此类推,经过一段时间后便可将网络中各路由器所获得的距离矢量信息在各路由器上统一起来,这样各路由器只需要查看这个距离矢量表就可以为不同来源分组找到一条最佳的路由。

  路由算法:

   路由器使用路由算法来找到到达目的地的最佳路由。当说“最佳路由”时,考虑的参数包括诸如跳跃数(分组数据包在网络中从一个路由器或中间节点到另外的节点的行程)、延时以及分组数据包传输通信耗时。关于路由器如何收集网络的结构信息以及对之进行分析来确定最佳路由,有两种主要的路由算法:  

      总体式路由算法和分散式路由算法。采用分散式路由算法时,每个路由器只有与它直接相连的路由器的信息——而没有网络中的每个路由器的信息。这些算法也被称为DV(距离向量)算法。采用总体式路由算法时,每个路由器都拥有网络中所有其他路由器的全部信息以及网络的流量状态。这些算法也被称为LS(链路状态)算法。

        (一)静态路由算法

       1.Dijkstra算法(最短路径算法)

        Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。

       2.扩散法

      事先不需要任何网络信息;路由器把收到的每一个分组,向除了该分组到来的线路外的所有输出线路发送。 将来会有多个分组的副本到达目的地端,最先到达的,可能是走了“最优”的路径。

      3.基于流量的路由算法

      既考虑拓扑结构,又兼顾网络负荷;前提:每对结点间平均数据流是相对稳定和可预测的;根据网络带宽和平均流量,可得出平均包延迟,因此路由选择问题归结为找产生网络最小延迟的路由选择算法提前离线(off-line)计算。

     (二)动态路由算法

       1.距离向量路由算法

       距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-FulkersonAlgorithm),其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输(我们叫这个为“成本”)。这个在那个算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量,等等。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。 

       2.链路状态最短路由优先算法SPF

       发现邻居结点,并学习它们的网络地址;测量到各邻居节点的延迟或者开销;创建链路状态分组; 使用扩散法发布链路状态分组;计算到每个其它路由器的最短路径。