计算机网络(路由器与路由算法)

前言

昨天经过字节一面感觉自己对路由器了解甚少,所以决定还是认真学习一下路由器与路由算法吧。

定义

首先我们先对路由下一个定义,什么是路由?
根据百度百科的解释,路由是指分组从源到目的地的时候,决定端到端路径的网络范围的进程。
说白了就是选择一条合适路径来传输需要发送的数据包。

自治系统

自治系统(Autonomous System,AS)指的是在单一技术管理下的一组路由器,这些路由器使用同一种内部路由选择协议并且通过外部路由协议与其他的AS进行连接,一般来说一个大学、一个公司内部的所有路由器就属于一个自治系统。

路由协议

刚才说到一个AS有着自己的内部路由协议并且通过外部路由协议和其他AS连接。
路由协议就可以根据内部和外部的不同分为:

  • 内部网关协议(Interior Gateway Protocol,IGP)
  • 外部网关协议(External Gateway Protocol,EGP)

内部网关协议

先来介绍内部网关协议,内部网关协议比较常用的有RIP和OSPF看,目前说的都是动态路由协议,如果采用静态路由协议则需要人为的设定路由信息。

RIP

RIP全称为路由信息协议,是一种基于距离向量的路由选择算法,其最大优点就是简单。
基于距离向量的意思就是根据距离(代价)和方向决定目标网络或者目标主机位置的一种方式。
RIP一般会采用洪泛法来进行更新,但是这样的问题就在于当网络构造变得复杂的时候在获得稳定的路由信息之前需要消耗大量的时间(俗称“坏消息传得慢”),而且比较容易法生路由循环等问题。

RIP规定:

  • 网络中每个路由器都要维护从它自己到其他每一个目标网络的距离记录(也就是路由表)。
  • 距离也被称为跳数,直接相连的路由器跳数为1,然后每经过一个跳数就加1,最多不能超过15,距离为16的两个路由器被认为是不可达(防止环的问题)。
  • 两个路由器之间每隔30S发送一次路由信息。
  • 不支持子网掩码(RIP2中支持)。

RIP是一个基于UDP的网络协议(内容跟在UDP的数据部分后面发送),选择的是路由跳数最少的路径而非最短时间的,适合用于比较小的网络。

如何解决路由环路的问题?

由于RIP协议中经常会出现环路的问题,所以一般有以下方法来防止一个数据包进入环路:

  • 最长距离不超过16,如果超过16则直接把数据包丢弃。
  • 规定一个路由器不再把所收到的路由信息原路返回给发送端,这也被称为水平分割。

但是这样仍然不能解决网络中带有环这个根本问题,所以又提出了如下解决方案:

  • 毒性逆转:指的是当网络中发生链路被断开的时候不是不在发送这个消息而是将这个无法通信的消息传播出去。
  • 触发更新:当路由表发生变化的时候直接更新而不是等待30S。

OSPF

与RIP正好相反,OSPF常常用于管理比较大和复杂的网络。
OSPF全称开放最短路径优先协议,采用的是分布式链路状态路由算法,每个节点会使用洪泛法的方式向其他节点告知自己与那些节点相邻,并且自己的度量(也就是从自己这里传递的代价),这样所有的节点都能直接构建出一个网络拓扑结构,最后会采用Dijkstra算法计算出一个最优的路径。
但是这样又带来一个问题,当网络巨大的时候构建出一个完整的网络拓扑图的代价是非常巨大的,所以OSPF引入了“区域”的概念,把一个自治网络划分为若干个更小的范围,将洪泛法局限在区域之内而非整个网络,每个区域会指定若干个路由器作为默认路由来参与对外的信息交换。

RIP的缺点还在于它利用好路由控制信息一遍确认是否连接了网络,一边传递网络信息,当网络比较巨大时候就路由控制信息就会随之变大,并且当路由表没什么变化的时候也会发送数据,浪费了网络带宽。

相对了,OSPF面对这些问题划分出了5个不同功能的数据包:

  • 问候(Hello):确认相邻路由器或者指定路由器存在。
  • 数据库描述:链路状态数据库的摘要信息。
  • 链路状态请求:从数据库中获取链路状态信息。
  • 链路状态更新:更新链路状态数据库中的信息。
  • 链路状态确认应答:链路状态更新的确认应答。

基于这些功能包,OSPF中每个节点会每隔一时间发送Hello数据包确认相邻节点的存活,达到一定次数没有返回则认为断开。
当自己的链路连接情况发生变化的时候才会发送更新请求告知其他节点。

OSPF相对RIP更加复杂,所以消耗的资源也更多,当网络巨大的时候光是计算最短路径就需要占用大量CPU。OSPF是基于IP协议的。

外部网关协议

BGP

边界网关协议,BGP,是一种作用在不同AS之间的外部网关协议。采用的是路径向量路由协议,由于AS内部的协议差别巨大,所以很难找出一条最短路径,所以BGP力求一条能够达到目的网络并且比较好的路径。
BGP要求每个AS选择至少一个对外的发言人,与RIP类似,每个节点都需要生成一个自己的路由表,并且在发生变化的时候和其他节点进行交换。
由于路径向量在访问信息中保存了转发防线和距离还涵盖了途径所有的AS编号,所以能够检测出环路的问题,避免了无线计数的问题。

后记

暂时先更新到这里,算是把之前的坑给填上了,之后学习交换机工作原理以及其他网络协议的时候也会更新在这里。
这一次字节面试让我感受到了很多不足,是时候收拾一些之前有点自满的心态,好好准备一下周五面试,感谢面试官手下留情,希望下次能出个简单点的算法。


参考文章:
《图解TCP/IP》学习——第七章路由协议
到底什么是路由
知乎问题:如何用一句话解释,链路状态协议与动态路由协议之间的区别?
《图解TCP/IP》
《王道考研系列计算机网络2019版》

猜你喜欢

转载自blog.csdn.net/qq_33241802/article/details/107316565