路由算法入门

路由算法是提高路由协议功能,尽量减少路由时所带来开销的算法。
路由器使用路由算法来找到到达目的地的最佳链路。
这里写图片描述
网络可以抽象成来理解
这里写图片描述
这里写图片描述
路由算法分类:
静态路由是指由用户或网络管理员手工配置的路由信息。
动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。
动态路由通常使用以下两种形式的路由协定来达成:距离向量算法(RIP)与链路状态算法(OSPF)。所有路由算法几乎都可以分类到这两种算法中。
这里写图片描述
链路状态算法:
在连线状态算法中,每个节点拥有网络的图谱(一个图)。每个节点将自己可以连接到的其他节点资讯传送到网络上所有的节点,而其他节点接着各自将这个资讯加入到图谱中。每个路由器即可根据这个图谱来决定从自己到其它节点的最佳路径。
完成这个动作的算法——Dijkstra算法——建立另一种数据结构——树。节点产生的树将自己视为根节点,且最后这棵树将会包含了网络中所有其他的节点。一开始,此树只有根节点(节点自己)。接着在树中已有的节点的邻居节点且不存在树中的节点集合中,选取一个成本最低的节点加入此树,直到所有节点都存入树中为止。
这棵树即用来建立路由表、提供最佳的“下一个节点”等,让节点能跟网络中其它节点通讯。
这里写图片描述

这里写图片描述
举个例子,理下思路:(感觉图例比文字阐述更容易理解)
这里写图片描述
再举个栗子,加深记忆
这里写图片描述
这里写图片描述
这里写图片描述
假设在该网络中链路费用等同于链路上的负载,初始状态为:
节点B和D都发送到目的地A的一个单位的流量,且都选择它们与A直接相连的链路。
C有目的地为A的流量e,并走通过B到达A的链路。
此时非0费用的链路有:

  • B,D之间的链路费用为1+e
  • C,B之间的链路费用为e
  • D,C之间的链路费用为1

当LS运行时,则
节点B发现,它与A直接相连的链路的费用是1+e,而C->D->A这条路径的总费用是1,因而它选择走该链路
节点C发现,它走B->A的费用是1+e,而走D->A的费用是1,因而选择D->A的路径。
节点D的选路不变
此时非0费用的链路有:

  • B,C之间的链路费用为e
  • C,D之间的链路费用为1+e
  • D,A之间的链路费用为2+e

当LS运行时,则
节点B发现,它与A直接相连的链路的费用是0,而C->D->A这条路径的总费用是2+e,因而它选择走与A直接相连的路径
节点C发现,它走B->A的费用是0,而走D->A的费用是2+e,因而选择走B->A
节点D发现,它走C->B->A的费用为0,而走直接连接A的链路的费用是2+e,因而它选择C->B->A的路径
此时非0费用的链路有:

  • D,C之间的链路费用为e
  • C,B之间的链路费用为1+e
  • B,A之间的链路费用为2+e

LS算法继续运行,就会不断震荡,解决方案是确保并非所有的路由器都在同一时刻运行LS算法。做法是对于每台路由器,引入随机的延时链路状态更新。
距离向量算法:
距离向量算法使用Bellman-Ford算法。对于每一条网络上节点间的路径,算法指定一个“成本”给它们。节点会选择一条总成本(经过路径的所有成本总和)最低的路径,用来把资料从节点甲送到节点乙。
这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
距离向量DV:链路费用变化
这里写图片描述
距离向量DV:无穷计数问题
这里写图片描述
还是X、Y、Z三个节点。的距离向量为:d(X) = 5, d(Y) = 1, d(Z) = 0。于是Y在更新向量时发现,咦,Z到X的距离只有5诶,那可以先到Z再到X,于是Y的距离向量更新为:d(x) = 5 + 1 = 6, d(Y) = 0, d(z) = 1。我们可以发现,这个逻辑显然是错误的,因为Z到X的距离为5的前提是要经过Y,但Y更新后的路径又要经过Z,这就形成了一个选路环路 (routing-loop)问题。因为Y的距离向量更新了(虽然是错误的),但它还是向Z发送了更新报文。Z收到更新报文后,比较了下邻居们到X的距 离,发现经过Y的路径距离为1 + 6 = 7,小于直接到X的距离,于是Z也更新的自己的距离向量,然后又将更新后的距离向量发给Y。Y收到后又更新向量为8,然后再发给Z。。。这样循环往复,更 新报文在Y和Z之间传来传去,直到第44次迭代后,Z算出它经由Y的路径费用大于50为止。此时,Z最终确定到X的最短路径费用是直接到达X的费用50, 而Y也得到了最短路径是经Z到X的费用51。
可以看出,虽然最后还是得到了正确的信息(最后的50和51是正确的!),但坏消息的传播与好消息相比实在是慢太多了!而且,如果X和Y之间的费用为10000,Z和X的费用是9999时,就会出现计数到无穷(count-to-infinity)的问题!
毒性逆转方法(The Reverse-Poison(Split-horizon) Hack)
这里写图片描述
当涉及3个或更多节点(而不仅仅是两个直接相连的邻居节点)的环路将不能被毒性逆转技术检测到。
这里写图片描述


层次路由
这里写图片描述
这里写图片描述
这里写图片描述
自治系统间(lnter-AS)路由任务
这里写图片描述
这里写图片描述
在多AS间选择:
这里写图片描述
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值