帅天今天难得一次写两篇文章,希望兄弟们给点力,点个赞。码字不易啊。
这篇文章简单的聊聊路由协议,注意这里是简单,路由协议太复杂,了解一下即可。
我们在大学里面学习计算机网络与数据结构的时候,知道求最短路径常用的有两种方法,一种是 Bellman-Ford 算法,一种是 Dijkstra 算法。在计算机网络中基本也是用这两种方法计算的。
距离矢量路由
距离矢量路由算法,基于 Bellman-Ford 算法。
有以下几个特征:
好消息传的快,坏消息传的慢。如果有个路由器加入了这个网络,它的邻居就能很快发现它,然后将消息广播出去。要不了多久,整个网络就都知道了。但是一旦一个路由器挂了,挂的消息是没有广播的。当每个路由器发现原来的道路到不了这个路由器的时候,感觉不到它已经挂了,而是试图通过其他的路径访问,直到试过了所有的路径,才发现这个路由器是真的挂了。比如某个人走丢了,问了一圈儿亲戚朋友才确定没看到你,才确定人丢了,这时候才报警,太慢了。
每次发送的时候,要发送整个全局路由表。网络大了,谁也受不了。它适用于小型网络(小于 15 跳)。
链路状态路由
链路状态路由(link state routing),基于 Dijkstra 算法,典型代表 OSPF 协议。
这种算法的基本思路是,当一个路由器启动的时候,首先是发现邻居,向邻居say hello,邻居都回复。并计算和邻居的距离,发送一个 echo,要求马上返回,除以二就是距离。
然后将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器。这样每个路由器都能够收到它和邻居之间的关系的信息。因而,每个路由器都能在自己本地构建一个完整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。
不像距离距离矢量路由协议那样,更新时发送整个路由表。链路状态路由协议只广播更新的或改变的网络拓扑,这使得更新信息更小,省了路由器带宽和 CPU 利用率。而且一旦一个路由器挂了,它的邻居都会广播这个消息,可以使得坏消息迅速收敛。
距离矢量路由
基于距离矢量路由算法的 BGP。
BGP 协议使用的算法是路径矢量路由协议(path-vector protocol)。它是距离矢量路由协议的升级版。一般用于运营商之间的大型网络。
如果喜欢这篇文章,请点个关注,你的关注是我最大的动力。