计算机网络:动态路由协议与选路算法
假设距离定义为跳数,走一个路由器就是1个距离,那么如何动态学习到达其他路由器的最短路径?
学了算法都知道,这种问题就是最短路径问题,动态规划法就可以搞定。计算机网络里叫距离矢量路由算法
,和单纯的动态规划还是有很多不同,学习这个算法要脱离出动态规划的思想,不然很容易陷入死结……
距离矢量路由算法(DV算法 distance-Vector)
本质上是邻居之间交换路由信息使用加法更新路由表。
距离向量算法的工作方式是:每个路由器将自己所连的网络结构通告给邻居。
每个路由器根据邻居告诉给自己的路由信息改变自己的路由表。一般的通告都是定期的
。
例如每15秒通告一次。例如A知道和邻居B的最短距离是2,A会将这个信息告诉A的另一个邻居C,C知道到A的距离为1(它们之间相邻),所以C知道经过A到B的最短距离为3(=1+2)。
每个路由器就是根据这种异步的方式不断收到邻居的路由信息,更新自己的路由信息。当某个路由器的路由信息不再改变时,该路由器就不再将自己的信息通告出去,其路由算法也告一段落。当整个网络的所有路由器的路由信息都不改变时,距离向量路由算法也就全部收敛,也叫路由收敛
。
DV算法示例
该网络中的信息如下:
假设每经过一个路由器,它的跳数就增加1
路由器B到网络3和4的跳数都是0,因为不需要经过路由器
此时邻居A通告路由信息,B更新路由表
A也可以通告它到网3,
但是从B到A再到网3的跳数是1,B原本记录的0。B发现原有的更小,此条不更新。
通过互相通告后,一次通告结束,等待下一次的通告
通告是周期性的,因为防止路由器的结构变化,而其他路由器不知道,发生问题
路由环路问题
路由环路问题就是指数据包在一系列路由器中不断循环往复传输而始终无法达到预期的目的网络的一种现象。
产生的原因一般是:
- 静态路由配置错误。
- 动态路由协议因为网络异常学习了错误的路由。
比如根本没有网一的线路,但是第一个路由器认为自己可以通过第二个路由器到网1,第二个路由器认为自己可以通过第一个路由器到网一,不停往复。
DV算法导致路由环路问题
具体是这样的
首先,在一个已经路由收敛的网络中
忽然,R3到它的局域网的线路突然断开
于是R3需要发送这跳路断开的信息给R2更新它的路由表,但是恰好R2正在周期性地告知R3自己的路由信息。
R3于是就以为可以通过R2发给10.4.0.0
于是网络就出现了环路
- R2认为R3可以到达,把包发给R3.
- R3认为R2可以到达,把包发给R2。
于是就出现了死循环,俗称路由环路。
DV算法导致无穷计数问题
讨论
无论是路由环路还是无穷计数其根本就是学习了错误的路由
解决方法
- 方法1:防止无穷计数问题,比如RIP协议设定了最大距离(计数)为16.
- 方法2:防止路由环路,BGP协议设定每条路由都记录所经过的路由器,确保路由器不会学习错误的路由
- 方法3,水平分割:不向某条路由对应的出接口通告该路由信息。
R2从R3学到了知道到达10.4.0.0的路由,但是不告诉R3,它能到达10.4.0.0.
-方法4,路由毒化
路由毒化和水平分割很像。
但是路由毒化是告诉它不可能到达(其实它也许可以到达),水平分割是不告诉它能不能到达。
至此,DV算法以及它导致的问题和解决方案都通告完毕,欢迎交流。
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046189.html