当两台主机在不同的局域网内,它们之间要进行通信,必然要经过路由器,而当一个数据包达到路由器时,路由器会获取这个数据包的目的IP地址,而通过查看路由器的路由表,路由器会判断将这个数据包送往何处
首先对于路由表,当中的每一行表示一个路由条目,我们的路由表是由若干个路由条目组成,每个路由条目当中包含了目的网络地址Destination,下一跳地址Gateway,子网掩码Genmask,Flags(Flags选项中出现U代表此条目有效,出现G则代表下一跳地址是某个路由器的地址,未出现G则表示目的网络地址就是本机接口直接相连的网络,不必经过其他路由器转发,因此下一跳地址为*),发送接口Iface,而且在每张路由表的最后一行,也就是最后一个路由条目都会是一个缺省路由条目,这个路由条目存在的目的在于当获得的IP地址与每一条目的子网掩码进行按位与得到目的网络地址与所有路由条目的目的网络地址不符时,将这个数据包转发至当前缺省条目的下一跳地址处。
所以在路由器获得一个数据包,并获得其目的IP地址后,会查看路由表,而所得的结果无非就三种:
①目的IP地址所在的网络就在当前路由器下,那么路由器就会接受这个数据包并将它转发到对应的主机上;
②目的IP地址所在的网络并不在当前路由器下,但通过当前路由表,找到了它所属的路由器地址,那么路由器就会将这个数据包转发到对应的下一跳地址处(另一个路由器),由对方查找它的路由表进而进行转发 ;
③通过查找当前路由表所有条目(除最后的缺省条目外),并没有找到对应的下一跳地址,而且也不在当前路由器的网络下,那么路由器就会将数据包按照缺省条目,将它转发到对应的下一跳地址处,由对方查找它的路由表进而进行转发
对于路由器而言,路由表中的路由是如何获得的,这也是路由器的一项重要工作,所以下面介绍几种常用的路由选择协议以及对应的路由算法:
首先对于我们的路由算法,我们要选择的路由算法,得满足以下几点:
①算法必须是正确的,完整的;
②好的算法应该尽可能简单;
③算法能够适应通信量和网络拓扑的变化;
④算法应该具有稳定性;
⑤算法对于所有用户都应该是平等的,且我们选择的应该是在我们的要求下的最佳算法(可获得最佳路由)
对于路由算法而言,可以分为静态路由算法和动态路由算法
静态路由算法:
是路由器中设置的固定路由表,由我们的系统管理员事先设置好的,一般是在系统在安装时就根据网络的配置情况预先设定的,不会随着网络结构的改变而改变,适用于网络规模不大,拓扑结构相对固定的网络,它的特点如下:
①允许对路由行为进行精确控制;
②减少了网络流量;
③是单向的;
④配置相对简单;
在所有的路由表中,静态路由表的优先级最高,当动态路由表与静态路由表发生冲突时,以静态路由表为准
动态路由表算法:
与静态路由表相对,能够根据网络系统运行情况而进行自动调整,系统管理员不需要像管理静态路由表一样手工进行维护,动态路由表能够实时的适应网络结构变化,当网络发生变化的时候,路由器会启动其路由算法进行更新,适用于网络规模大,网络拓扑结构复杂的网络,它的特点如下:
①节点增删时工作量少;
②网络拓扑变化,协议自动调整;
③配置不容易出错;
④对网络扩容性较好;
⑤需要占用相当的路由器资源;
而除了静态,动态之分,还可以将路由算法分为总体式路由算法和分散式路由算法,采用分散式路由算法时,每个路由器只有与它直接相连的路由器的信息——而没有网络中的每个路由器的信息,DV(距离向量)算法就是分散式路由算法的典型代表。采用总体式路由算法时,每个路由器都拥有网络中所有其他路由器的全部信息以及网络的流量状态,LS(链路状态)算法就是总体式路由算法的典型代表。
我们的RIP协议采用的就是距离向量算法,而相对的OSPF协议采用的就是典型的LS算法,RIP,OSPF都是属于内部网关协议IGP,用于自治系统内部的路由
①RIP协议:分布式基于距离向量的路由选择协议
要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的记录,它的特点如下:
(1)仅和相邻的路由器交换信息;
(2)交换的信息就是当前本路由器的路由表信息(包括到其他网络的最短距离,以及对应的下一跳路由器);
(3)按照固定的时间间隔交换路由信息;
(4)对于好消息(某个目的网络的距离变短),RIP协议传播的快;但对于坏消息(某个网络出现问题),就会需要一定的时间去反应
对于RIP协议而言,它可能会建立当前自治系统内部的所有网络,但是它却也仅仅知道到目标网络的距离,至于如何到达,它只知道下一跳路由器,也就是说只是知道下一步往哪走,并不会知道全网络的拓扑结构
距离向量算法DV:
使用这个算法的路由器必须掌握这个距离表,它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的节点(除了它自己本身)是等同的。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。 其优点是算法简单容易实现。缺点是慢收敛问题,路由器的路径变化需要像波浪一样从相邻路由器传播出去,过程缓慢。
每一个相邻路由器发送过来的路由表都要经过以下步骤:
1)对地址为X的 路由器发过来的路由表,先修改此路由表中的所有项目:把”下一跳”字段中的地址改为X,并把所有”距离”字段都加1。(注意:这里的距离也就是跳数,每经过一个路由器我们的距离就加1,因为R6与R4位相邻路由器,R6经R4到目标网络,比R4直接到目标网络要多经过一个路由器,所距离要加1)
2)对修改后的路由表 中的每一个项目,进行以下步骤:
(1)将X的路由表(修改过的),与S的路由表的目的网络进行对比。若在X中出现,在S中没出现,则将X路由表中的这一条项目添加到S的路由表中。
(2)对于目的网络在S和X路由表中都有的项目进行下面步骤 :
(2.1)在S的路由表中,若下一跳地址是X ,则直接用X路由表中这条项目替换S路由表中的项目。(下一跳地址相同,以最新的路由信息为准)
(2.2)在S的路由表中,若下一跳地址不是X ,若X路由表项目中的距离小于S路由表中的距离,则进行更新。(在这种情况下,证明有到达目标网络距离更小的较优路径)
3)若3分钟还没有收到相邻路由器的更新表,则把此相邻路由器记为不可到达路由器,即把距离设置为16(距离为16表示不可达,由此可以看出在距离向量算法下,一条路由路径最多包含15个路由器,适用于小型网络)。
②OSPF协议:分布式的基于链路状态的路由选择协议
与RIP一样同属于内部网关协议,作用于自治系统内部网络,特点如下:
(1)向自治系统内部所有路由器发送信息,利用洪泛法,向所有相邻的路由器发送信息,而这些路由器又将这些信息发送给更远的路由器,这样一来,这个区域的所有路由器都会收到由最开始的路由器所发送的信息,相比而言,RIP则是仅仅是相邻的路由器之间进行信息交换;
(2)发送的信息是与本路由器的相邻的所有路由器的链路状态(包括相邻的有哪些路由器,以及对应链路的详细度量信息(时延,距离,带宽等));
(3)只有在链路状态发生变化时,才会发送信息,不需要定期交换信息;
OSPF协议会让路由器与所有区域内的路由器交换链路信息,因此在路由器中会建立一个详细的链路状态信息数据库,而这个数据库也就相当于这个网络的拓扑结构的所有细节信息
链路状态算法LS:
采用LS算法时,每个路由器必须遵循以下步骤:
1、确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
2、测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
3、向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
4、使用一个合适的算法,确定网络中两个节点之间的最佳路由。在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
补充一下:这里讨论一下Dijkstra算法(SPF算法)
Dijkstra算法执行下列步骤:【算法细节: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html】
1、路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“
邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直
接相连,它们的权值设为“无穷大”。
2、路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
前序字段——表示当前节点之前的节点。
长度字段——表示从源节点到当前节点的权值之和。
标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
3、路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
4、路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,
它将不再改变。一个T节点仅仅是一个代理而已。
5、路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
6、路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
7、如果这个节点不是V2(目的节点),路由器则返回到步骤5。
8、如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点
列表便是从V1到V2的最佳路由。
收敛路由原理:
1.基本概念
路由收敛指网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程,也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。通过路由收敛可以使路由域中所有路由器对当前的网络结构和路由转发达成一致的状态。收敛时间记录的是从网络的拓扑结构发生变化到网络中所有路由设备中路由表重新保持一致的状态转换过程。
2.触发条件
1)路由器失效
2)连接失效
3)管理度量调整等
3.步骤包括:
在转发层面启动定时器,所述定时器的时长用于限定路由收敛的速度;当转发层面监测到网络异常时或者控制层面对端口的关闭(Shut down)命令后,在相应的转发条目中置上标记;根据所述被置上的标记,取次优先的下一跳和出接口进行转发;控制层面重新计算相应目的地址的路由,并且更新到转发表中。本方法可以在网络状态发生变化、需要路由收敛的第一时间,由转发层面先侦测出这一变化,并直接执行收敛的结果,然后再更新路由表。由于将路由更新,转发更新的操作置后,使得路由的收敛时间大大减少。