TCP/IP参考模型-网络层Dijkstra算法

在这里插入图片描述

系列文章目录

由于因特网的实现是一个分层架构,为了防止篇幅过大,笔者不想一篇文章就写完想表达的所有内容,于是会以系列文章的方式,主要内容包括TCP/IP分层架构、网络层的最短路径算法:Dijkstra算法的实现细节,传输层的TCP传输控制协议的拥塞控制、流量控制以及握手和挥手,和应用层的DNS服务。

《TCP/IP参考模型-分层架构》
《TCP/IP参考模型-应用层的DNS》
《TCP/IP参考模型-传输层TCP》
《TCP/IP参考模型-网络层Dijkstra算法》

前言

Dijkstra算法是由获得过图灵奖的计算机科学家:Edsger Wybe Dijkstra,于1956年发明的算法。
跟Dijkstra算法相关的是离散数学中的图论,图论非常适合为现实中的各种问题建模,本篇主要讲的就是Dijkstra算法在计算机网络中的应用。它主要用在给定的无向带权图上,以某个顶点为源顶点出发,找到从源顶点到图上每个顶点的最短路径算法。其利用了图论的广度优先搜索思想,并有贪心算法的影子。

在计算机网络中的应用

为了得到从任意一个路由器出发,到其他路由器的最短路径。 就需要构造一个无向带权图,来应用Dijkstra算法,首先需要确定顶点、边和边的权重这三个元素,在计算机网络中,是把路由器作为顶点,两个路由器之间的线路作为边,传输延迟、路由器跳数、物理距离等作为边的权重。一个无向带权图的实例如下所示:
在这里插入图片描述

图 1

当路由器通过链路状态路由算法知道整个网络的无向带权图之后,就可以在每个路由器上运行Dijkstra算法,来计算每个路由器到各个目的地的最短路径,其结果是一张路由表,表项是目的网络地址、通往目的网络的下一跳路由器地址和总成本,总成本根据权重的定义,可能是总跳数、总延迟等等。

初始化

顶点之间的边记做 (u,v),表示从顶点u到v的路径,而函数w表示路径的总权重,例如 w(u,v) 代表u到v的权重,如图1中顶点A到D的路径表示为(A,D),他们的权重w(A,D)=3。

我们将整个图中的顶点分成黑色、白色和灰色,黑色代表已经计算过最短路径的顶点,白色代表还未计算过的,灰色则代表即将计算的顶点。

Dijkstra算法的主要思想跟广度优先搜索一样,从源顶点A开始,一步一步地更新每个顶点从A到当前顶点的最短路径,和广度优先最大的不同就是Dijkstra是带权重的图,而广度优先是一个固定值,比如1。正因为权重,所以在更新过程中每个顶点会有一个相对最短路径存在,后面简称rsp(Relative shortest path)。rsp指的就是从源顶点到当前顶点的最短路径长度,我们把未计算时的rsp设为

设源顶点为A,则将除A以外的顶点设为白色,A设为黑色,这就完成了初始化,结果如下图所示:
在这里插入图片描述

算法推进

算法是从源顶点开始,一步一步推进的,这里的一步一步指的就是,每一轮推进时会选取一个当前顶点,当前顶点选取的目标是从A开始并且经过黑色顶点的路径中最短的顶点,选取完成后,就开始计算当前顶点的邻居顶点的rsp值,邻居顶点指的是跟当前顶点有直接边连接的顶点,比如A的邻居顶点是B和D。rsp值计算的依据是从A开始并且经过黑色顶点的路径中,是否有一条更短的路径到达这个邻居顶点,如果有则更新顶点的rsp值,否则维持原来的rsp值。
现在我们以图2作为例子,演示算法的推进过程。为了演示方便,下面推进的过程中会在顶点旁边标识出来每个顶点的最短路径。

第一步

一开始源顶点A被选为当前顶点,A的邻居顶点是B和D,此时B和D被标记为灰色。A到B有一条权重为1的边:(A,B),w(A,B)=1,A到D有一条权重为3的边:(A,D),w(A,D)=3,因为B和D在初始化时rsp值都为,1小于,3也小于,所以B和D的rsp值分别被更新为1和3,其结果如图2(a)所示。
在这里插入图片描述

图 2(a)

第二步

在第一步执行完成后,我们知道B的rsp值1小于D的rsp3,所以B被选为当前顶点。接下来继续以B为当前顶点推进,B的邻居顶点有D、E和C,所以它们都被标记为灰色,并且计算rsp值。请看图2(b),在这里读者可以注意到,D的rsp值从原来的3变成了2,这是因为在B被当做当前顶点推进时,发现了一条更短的路径(A,B,D),w(A,B,D)=2。
其余的推进过程被列在了图2(c)-图2(g)中。

在这里插入图片描述

图 2(b)

在这里插入图片描述

图 2(c)

在这里插入图片描述

图 2(d)

在这里插入图片描述

图 2(e)

在这里插入图片描述

图 2(f)

在这里插入图片描述

图 2(g)

最后

到图2(g)时,Dijkstra算法已经计算出了这个用无向带权图描述的一个网络中,所有以A为源出发的最短路径,现在假设A要访问路由器F,那么在A这个路由器的路由表中就保存着到达F的下一跳路由器地址,也就是B,然后B中记录了到F的下一跳路由器是C,C的下一跳就是目的地F。总成本是6。
因为所有顶点被标记成了黑色,这也代表着rsp变成了更准确的最短路径值,为什么不能说绝对呢?因为路由器会不定时的运行Dijkstra算法,当网络状况发生变化时,最短路径的值也跟随着变化。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值