写着好玩的(10) —— 动态路由
原创
©著作权归作者所有:来自51CTO博客作者yxx352的原创作品,请联系作者获取转载授权,否则将追究法律责任
由于自己懒,给自己找了各种理由“拖稿”,今天自己终于良心上面过不去了,至少今天要补上一篇文章才行。
之前说到,把各个地方不同的网段,联系起来需要用到路由器或三层交换机,来用其路由功能让数据包们知道如何在不同的IP地址段之间达到目的地。不过,每个路由器只知道和自己直接相连的IP网段,而不知道自己的隔壁的、以及隔壁的隔壁的。以前说的那个方法是手工指定,告诉路由器,要是某个包要到哪个IP地址段去,应该往哪个端口丢。
但是这样,每个路由器上面都要去手工设置静态路由,一来太麻烦, 随着路由器的增加,要输入的数量成倍增长。二来,配置的时候挺万一手误,敲错了一两个数字,那整个网络可能也跑不起了。而且后面排错的时候又会异常地麻烦。
静态路由是一个解决联通性的办法。但它是一个从无到有的东西。配置麻烦,易错,不易管理。于是,就有人可能想到,要是有协议可以自动地让路由器去学习彼此直接的路由,那该多好呀。前辈们真的很强大,还真的就折腾出了这样的一些协议,来让路由之前相互学习彼此的路由,并且可以根据路由器现在的状态动态地调整拓扑。会根据实际情况选出一条最优的路径出来。 这些协议就叫动态路由协议。
动态路由协议有很多种,同时根据不同的分类方式又可以有很多中划分的方式。但最重要的一种方式是,把他们分成“距离矢量”和“链路状态”两种。从交换信息的角度而言,其中距离矢量是指,运行距离矢量路由协议的路由器,会将所有它知道的路由信息与邻居共享,但是只与直连邻居共享。 而链路状态是这样的,运行链路状态路由协议的路由器,只将它所直连的链路状态与邻居共享,这个邻居是指一个域内(domain),或一个区域内(area)的所有路由器。
百度里面有一个比喻,可能不太准确,但是很形象。“一个是距离最短;一个是用时最短。就好比距离矢量和链路状态。距离短有吊用啊,全是车子堵的一笔,你还不是要堵个几个小时,路上宽阔车子好开才是最实在的。(http://zhidao.baidu.com/question/403285014.html)”。
虽说动态路由有很多协议,但是他们的基本工作原理还是差不的。就是彼此直接,周期性地交换协议数据包,来交换彼此之间知道的路由信息。然后,再根据某些算法,用来这些协议数据包里面的内容,来算出一条最佳路径。然后扔到“路由表”里面,供路由器来调用。要是在某些时候,路由的信息改变了,则再触发更新一下“路由表”。在超过一定的时间没有收到某个路由的协议数据包的时候,就会认为该路由器没有工作,则把路由器跑的协议里面拿掉,再重新计算一次整个网络的路由情况。
这是一套很神奇的工作过程,真的很牛逼。
至于具体的路由协议,之后再细说。
广州这次,一次下七天的雨什么时候才是个尽头呢...