路由选择、路由协议与路由算法
文章转自:https://blog.youkuaiyun.com/a1414345/article/details/72579410
什么是路由选择
百科的说法:
路由选择是指选择通过互连网络从源节点向目的节点传输信息的通道,而且信息至少通过一个中间节点。
我的理解:路由选择的目的就是为 IP 数据包选择出一条合适的路。
什么是路由协议
百科的说法:
路由协议是在路由指导IP数据包发送过程中事先约定好的规定和标准。
我的理解:路由协议规定了 IP数据报在网络中存储和转发的方式。
什么是路由算法
百科的说法:
路由算法是提高路由协议功能,尽量减少路由时所带来开销的算法。
我的理解:路由算法就是根据度量标准,从众多路径中高效地选择出最佳路由路径。
上面三个到底有什么不可描述的联系
下面观点纯属个人理解,如有不对还望指出。
三者之间的关系:
总的来说:路由选择依赖于各种路由协议,而各种路由协议又依赖于路由算法。
各种路由协议之间采取不同的路由算法进行路由选择。
现在说点人话:我们可以把路由选择看做要干一件什么一样的事情,而路由协议规定了我们按照什么样的方式去完成这件事情,而路由算法则具体的如何去做这件事情。拿生活中的一个例子来说:
小明要做一件事情,这件事情就是去上学,此时选一种合适的方式去上学就是路由选择。而从家里出发到学校的过程,有不同路径和不同的交通方式,此时路由协议可以看做我们要进行去上学这件事情的大方向,比如说直走,右转,左转等。而路由算法则具体的描述了如何完成这件事情,我首先应该步行五分钟,然后坐公交车从哪个方向,做那一路公交车和走哪一条街,具体高效快速的到达学校相当于路由算法。
常见路由协议
按应用应用范围的不同,路由协议可分为两类:
在一个AS(Autonomous System,自制系统)内的路由协议称为内部网关协议(Interior gateway protocol),AS之间的路由协议称为外部网关协议(Exterior gateway protocol)。
正在使用的内部网关协议:
- RIP(Routing Information Protocol):基于距离矢量(DV)的路由协议,以路由跳数作为计数单位的路由协议,适用于比较小的网络环境。
- IGRP(Interior Gateway Routing Protocol):一种基于距离向量型的内部网关协议。
- EIGRP(Enhanced Interior Gateway Routing Protocol):增强内部网关路由协议,结合了链路状态(LS)和距离矢量(DV)型路由选择协议的Cisco专用协议
- IS-IS(Intermediate System-to-Intermediate System):中间系统到中间系统路由协议,最初是ISO为CLNP(Connection Less Network Protocol,无连接网络协议)设计的一种动态路由协议。
- OSPF(Open Shortest Path First):开放式最短路径优先。是对链路状态路由(LS)协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。
外部网关协议:
- EGP (Exterior Gateway Protocol):是AS之间使用的路由协议,由于EGP存在很多的局限性,IETF边界网关协议工作组制定了标准的边界网关协议(BGP),当前被广泛使用。
- BGP 边界网关协议
路由算法
路由协议根据路由算法生成路由表并选择最佳路径进行转发数据包。
算法的设计目标:
- 最优化
- 简洁性
- 坚固性
- 快速收敛
- 灵活性
路由算法主要分以下两类:
- 总体式路由算法:每个路由器都拥有网络中其他路由器的全部信息,以及网络的流量状态。也叫LS (链路状态)算法。
- 分散式路由算法:每个路由器只有与它直接相连的路由器的信息,没有网络中每个路由器的信息。也叫DV (距离向量)算法。
LS算法
链路状态算法(也称最短路径算法)发送路由信息到互联网上所有的结点,对于每个路由器,仅发送它的路由表中描述了其自身链路状态的那一部分。
采用LS算法时,每个路由器必须遵循以下步骤:
1、确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
2、测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
3、向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
4、使用一个合适的算法,确定网络中两个节点之间的最佳路由。
在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
DV算法
距离向量算法(也称为Bellman-Ford算法)则要求每个路由器发送其路由表全部或部分信息,但仅发送到邻近结点上。从本质上来说,链路状态算法将少量更新信息发送至网络各处,而距离向量算法发送大量更新信息至邻接路由器。由于链路状态算法收敛更快,因此它在一定程度上比距离向量算法更不易产生路由循环。但另一方面,链路状态算法要求比距离向量算法有更强的CPU能力和更多的内存空间,因此链路状态算法将会在实现时显得更昂贵一些。
Dijkstra算法执行下列步骤:
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的最佳路由。