一、相关名词
1.路由
路由(名词):数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。
路由(动词):从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。
2.路由节点
⼀个具有路由能⼒的主机或路由器,它维护⼀张路由表,通过查询路由表来决定向哪个接口发送数据包。
3.接口
路由节点与某个⽹络相连的⽹卡接口。
4.路由表
由很多路由条⽬组成,每个条⽬都指明去往某个⽹络的数据包应该经由哪个接⼜发送,其中最后⼀条是缺省路由条⽬。
路由条⽬
路由表中的⼀⾏,每个条⽬主要由⽬的⽹络地址、⼦⽹掩码、下⼀跳地址、发送接⼜四部分组成,如果要发送的数据包的⽬的⽹络地址匹配路由表中的某⼀⾏,就按规定的接⼜发送到下⼀跳地址。
查看命令:route
这台主机有一个网络接口,连到192.168.226.0/24 网络,Destination是目的网络地址,Genmask是子网掩码,Geteway是下一条网络地址,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一条地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,因此可以直接发送到目的主机,不需要经路由器转发。
二、路由算法
路由算法,又名选路算法,算法的目的是找到一条从源路由器到目的路由器的“好”路径(即具有最低费用的路径)。路由器使用路由算法来找到到达目的地的最佳路由。
路由算法通常具有下列设计目标的一个或多个:优化、简单、低耗、健壮、稳定、快速聚合、灵活性。
1.常见的路由生成算法
(1)LS算法
采用LS算法时,每个路由器必须遵循以下步骤:
①确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
②测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
③向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
④ 使用一个合适的算法,确定网络中两个节点之间的最佳路由。
在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
(2)Dijkstra算法
①路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。
②路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
前序字段——表示当前节点之前的节点。
长度字段——表示从源节点到当前节点的权值之和。
标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
③路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
④路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。
⑤路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
⑥路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
⑦如果这个节点不是V2(目的节点),路由器则返回到步骤⑤。
⑧如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。
(3)链路向量选路算法
链路状态算法(也称最短路径算法)发送路由信息到互联网上所有的结点,然而对于每个路由器,仅发送它的路由表中描述了其自身链路状态的那一部分。
(4)距离向量算法
距离向量算法(也称为Bellman-Ford算法)则要求每个路由器发送其路由表全部或部分信息,但仅发送到邻近结点上。从本质上来说,链路状态算法将少量更新信息发送至网络各处,而距离向量算法发送大量更新信息至邻接路由器。 ——由于链路状态算法收敛更快,因此它在一定程度上比距离向量算法更不易产生路由循环。但另一方面,链路状态算法要求比距离向量算法有更强的CPU能力和更多的内存空间,因此链路状态算法将会在实现时显得更昂贵一些。
2、路由收敛
收敛是指在最佳路径的判断上所有路由器达到一致的过程。
当某个网络事件引起路由可用或不可用时,路由器就发出更新信息。路由更新信息遍及整个网络,引发重新计算最佳路径,最终达到所有路由器一致公认的最佳路径。
收敛慢的路由算法会造成路径循环或网络中断。