所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。一般来说,在路由过程中,信息至少会经过一个或多个中间节点。通常,人们会把路由和交换进行对比,这主要是因为在普通用户看来两者所实现的功能是完全一样的。其实,路由和交换之间的主要区别就是交换发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换在移动信息的过程中需要使用不同的控制信息,所以两者实现各自功能的方式是不同的。
早在40 多年之间就已经出现了对路由技术的讨论,但是直到80年代路由技术才逐渐进入商业化的应用。路由技术之所以在问世之初没有被广泛使用主要是因为80年代之前的网络结构都非常简单,路由技术没有用武之地。直到最近十几年,大规模的互联网络才逐渐流行起来,为路由技术的发展提供了良好的基础和平台。
路由技术的构成
我们通常所说的路由技术其实是由两项最基本的活动组成,即决定最优路径和传输信息单元(也被称为数据包)。其中,数据包的传输和交换相对较为简单和直接,而路由的确定则更加复杂一些。
确定路由
度量标准(metric),例如路径长度等,是被路由算法用来计算和确定到达目的地的最优路径的标准。为了帮助确定数据传输的路径,路由算法可以建立和维护路由表。路由表中包含了各种路由信息。路由信息根据所使用的路由算法的不同而各异。
路由算法在路由表中写入各种不同的信息,路由器会根据数据包所要到达的目的地选择最佳路径把数据包发送到可以到达该目的地的下一台路由器处。当下一台路由器接收到该数据包时,也会查看其目标地址,并使用合适的路径继续传送给后面的路由器。依次类推,直到数据包到达最终目的地。这种通过目的地和路由器地址决定最佳传输路径的示意图如下:
除了我们在上图中看到的两项信息之外,路由表中还会包含其它一些对路由的计算和选择有价值的信息。路由器通过比较不同路径的度量值决定最优路径,而具体的度量值则要视所使用的路由算法而定。我们将会在文章稍后对一些较为常用的度量标准进行具体的介绍。
路由器之间可以进行相互通讯,而且可以通过传送不同类型的信息维护各自的路由表。路由更新信息就是这样一种信息,一般是由部分或全部路由表组成。通过分析其它路由器发出的路由更新信息,路由器可以把握整个网络的拓扑结构。链路状态广播是另外一种在路由器之间传递的信息,它可以把信息发送方的链路状态及时的通知给其它路由器。
数据包交换
交换算法相对路由算法来说更加简单,而且绝大多数的路由协议都可以使用相同的交换技术。当数据包的发送方通过一定的方式获取到路由器的地址之后,就会把数据包以该路由器的物理地址(MAC地址)发送出去,同时使用网络层地址标识数据包的最终目的地。
当路由器接收到数据包后将查看标明其目的地的协议地址,并决定是否按照该地址将数据包转发到下一台路由器。假如路由器不知道如何把数据包转发到其目的地的话,一般会丢弃该数据包。假如路由器知道数据包的转发路径,则会将其中的物理地址改为下一台路由器的地址,然后将其发送出去。以此类推,直到数据包到达最终的目的地。在整个过程中,数据包的物理地址会随着移动过程中所经过的不同的路由器而变化,但是代表目的地的协议地址一直保持不变。具体如图所示:
路由算法
路由算法主要由几个要害因素决定。首先,算法的设计意图对路由协议的实际运作具有很大的影响。其次,目前存在许多不同类型的路由算法,每一种算法对网络和路由器资源都有不同的要求和影响。最后,路由算法使用不同的度量标准,从而使最优路径的计算结果不同。
设计意图
通常,一种路由算法可以体现出以下几方面的设计意图:
- 最优性
- 简单,低开销
- 健壮,稳定
- 快速聚敛
- 适用性强
最优性是指路由算法选择最佳路径的能力,这主要取决于计算最佳路径所使用的度量标准。举例来说,一种路由算法可以同时采用数据包经过路由器的跳数和时延作为度量标准,而其中又以时延为主要标准。每一种路由协议都必须严格定义度量值的计算方法。
路由协议的设计应当尽可能的简单。换句话说,路由算法必须能够以最有效的方式发挥其功能,最大程度的降低软件和使用开销。尤其是当实现路由算法的软件只能在资源有限的机器上运行时,有效性就变得更为重要。
路由算法必须具有良好的健壮性,能够在出现异常或突发事件(例如硬件损坏,负载过高以及执行错误等)时正常运行。因为路由器往往是网络的连接节点,所以假如出现问题将会带来非常严重的后果。因此,最好的路由算法应当能够经受时间的考验,在不同的网络条件下都能够保持稳定的运行状态。
路由算法还应当能够快速聚敛。所谓聚敛就是指所有路由器就最优路径重新达成一致的过程。当因为某种原因使路由器出现问题而无法继续正常使用时,路由器会发出路由更新信息传遍整个网络,重新计算最优路径,并最终使所有路由器就新路径达成一致。聚敛速度慢的路由算法可能会导致路由回路的出现。
在下图所示的路由回路中,一个数据包在时间t1到达路由器1。因为路由器1中的信息已经被更新,所以该路由器知道到达数据包目的地的最优路径应当通过路由器 2。因此,路由器1把数据包转发到路由器2。但是路由器2中的信息没有被更新,所以仍然认为最优路径应当通过路由器1,并因此把数据包又转发回路由器1。这样,数据包只能在两台路由器之间往返传递,直到路由器2接收到了路由更新信息或者数据包超出了最大存活时间。
路由算法还应当具有非常好的适应性,能够快速准确的适应不同的网络环境。例如,假设某一个网段出现问题,许多路由协议都可以快速的选择新的最佳路径替代已经无法使用的原由路径。路由算法应当能够通过编程,适应网络带宽,网络时延等参数变量的变化。
算法类型
路由算法可以被划分成许多不同的类型。主要的分类标准如下:
-
静态vs动态
-
单路径vs多路径
-
单层结构vs分层结构
-
主机智能vs路由器智能
-
域间vs域内
链路状态vs距离向量
-
静态vs动态
静态路由算法并不是一种真正意义上的路由算法,而只是由网络治理员在启动网络路由功能之前预先建立起来的 因为静态路由系统无法对网络变化作出响应,所以对今天的大型,动态网络来说并不适用。目前所使用的绝大多数的主流路由算法都是动态路由算法,可以通过分析接收到的路由更新信息针对变化的网络环境作出相应的调整。假如网络发生变化,路由软件就会重新计算新路由,并将新的路由更新信息发送出去。更新信息可以传遍整个网络,所有接收到该信息的路由器都会重新执行各自的路由算法,对路由表作出相应的修改。
静态路由和动态路由并不是完全对立的,在适当的环境下,两者可以有机的结合在一起,互为补充。例如,我们可以创建静态路由,指定一台专门的路由器作为最后诉求(last resort)路由器来接收所有无法被正确路由的数据包,这样,我们就可以保证所有的信息都能够以某种方式被处理。