何为路由?
所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。一般来说,在路由过程中,信息至少会经过一个或多个中间节点。通常,人们会把路由和交换进行对比,这主要是因为在普通用户看来两者所实现的功能是完全一样的。其实,路由和交换之间的主要区别就是交换发生在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)路由器来接收所有无法被正确路由的数据包,这样,我们就可以保证所有的信息都能够以某种方式被处理。
单路径vs多路径
一些复杂的路由协议可以支持到同一目的地的多条路径。与单路径算法不同,多路径算法可以在多条路径之间实现数据流量的多路复用。多路径路由算法的优势是非常明显的,可以提供更大的数据吞吐量,同时增强了网络的可靠性。
单层结构vs分层结构
在单层次的路由系统中,所有的路由器都是对等的;而在分层路由系统中,则是由一部分路由器组成路由主干。任何一台主机发送出的数据包首先经过非主干路由器到达主干路由器,然后沿着路由主干传递。当到达目的地的网络区域时,从主干路由器转入非主干路由器,并最终抵达目标接收方。
通常,我们把路由系统中的本地节点群称为域,自主系统,或区域。在分层路由系统中,一个域中的某些路由器可以与位于其它域中的路由器进行通讯,而另外一些路由器则只能与本域中的路由器通讯。在规模更大的网络中,可能会存在更多的路由等级,而路由主干一般都是由位于最高等级的路由器组成。
分层路由的最大优势就在于其组成结构与我们在现实企业中所采用的管理和组织结构相符,因而可以非常好的支持公司内部的数据流量和模式。举例来说,在企业网中,绝大多数的网络通讯都发生在小范围内的组或域中,所以域内路由器只需要知道如何与本域中的其它路由器通讯即可,不必关心其它域中的路由器。这样,就可以使路由算法得到简化,并相应降低了路由的更新流量。
主机智能vs路由器智能
所谓主机智能算法就是指由数据包的发送方决定整个传输过程中的完整路由,通常也被称为源路由。在源路由系统中,路由器的作用只是简单的存储和转发。
路由器智能算法的基础就是假定数据包的发送方对路由没有任何决定能力,完全由路由器基于各自的计算方法选择和确定数据的传输路径。
域间vs域内
有些路由算法只能在单独的域中使用,而另外一些路由算法则既可以在域间也可以在域内使用。这两种算法的性质是不同的,因此,一种好的域内路由算法往往并不一定能够在域间环境下使用。
链路状态vs距离向量
链路状态算法(又称为最短路径优先算法)可以把路由信息传递到网络上的所有节点。不过每一台路由器只是向外界发送描述自己链路状态的那一小部分路由表信息。距离向量算法(又称为Bellman-Ford算法)要求每一台路由器向外发送全部或绝大部分的路由表信息,不过该信息只能发送给临近的路由器。因此,两者的区别就是链路状态算法可以向整个网络范围发送数据量较小的更新信息,而距离向量算法则是只能向临近的路由器发送大批量的更新信息。
因为链路状态算法的聚敛速度相对较快,所以要比距离向量算法更能有效的避免路由回路的出现。不过,从另一方面来说,链路状态算法需要占用更多的CPU处理时间和系统内存,因此比距离向量算法的实现和支持成本更高。除了我们在这里所提到的区别之外,两种路由算法都可以在绝大多数的网络环境中使用。
路由度量标准
路由算法使用很多不同的度量标准来确定最佳路径。一些复杂的路由算法更是可以把几个独立的度量标准综合起来,作出更为全面和准确的路由决定。以下是最为常用的路由度量标准:
路径长度
可靠性
时延
带宽
负载
通讯成本
路径长度是最为常用的一种路由度量标准。有些路由协议可以允许网络管理人员为每一条网络连接指定路由成本。在这种情况下,路径长度就是所有有关连接的路由成本的总和。其它一些路由协议还可以定义跳数,即数据包从源地址到目的地所必须经过的网络互连设备(如路由器等)的个数。
在路由算法的范畴内,可靠性主要是指每一条网络连接的可使用性(通常使用误码率表示)。一些网络连接可能比其它连接更容易出现问题。在网络故障修复之后,有些网络连接可能比其它连接的恢复速度更快或更方便。网络管理人员可以把任何可靠性因素考虑在内,并据此为每一条网络连接指定相应的可靠值。
路由时延是指通过网络把数据包从源地址移动到目的地所需要的时间总和。有许多因素可以造成路由时延,其中包括网络连接的带宽,每一台途经路由器的负载,网络拥挤状况以及数据包所需要经过的物理距离等。因为路由时延是多项重要变量的综合反映,所以被普遍的采用。
带宽是指一条网络连接所能提供的流量吞吐能力。很明显,10-Mbps以太网的带宽要大大高出64-kbps专线的带宽。虽然带宽反映了一条网络连接所能够提供的最大速率,但是有时使用宽带连接的路由并不一定是最优路径。例如,如果一条高速连接非常繁忙,那么实际等待发送数据包的时间可能会更长。
负载是指象路由器这样的网络资源和设备的繁忙程度。我们可以通过多种方式计算负载,例如CPU的使用率以及每秒钟可以处理的数据包的数目等。对路由负载进行长期的持续监控可以更加有效的管理和配置网络资源。
通讯成本是另外一种非常重要的路由度量标准,尤其是对那些相对于网络性能更加关注运行成本的企业来说,其重要性就更加明显。举例来说,有时企业会为了节省公用线路的使用成本而改用延迟更大的私人线路,这就是通讯成本的具体体现。
所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。一般来说,在路由过程中,信息至少会经过一个或多个中间节点。通常,人们会把路由和交换进行对比,这主要是因为在普通用户看来两者所实现的功能是完全一样的。其实,路由和交换之间的主要区别就是交换发生在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)路由器来接收所有无法被正确路由的数据包,这样,我们就可以保证所有的信息都能够以某种方式被处理。
单路径vs多路径
一些复杂的路由协议可以支持到同一目的地的多条路径。与单路径算法不同,多路径算法可以在多条路径之间实现数据流量的多路复用。多路径路由算法的优势是非常明显的,可以提供更大的数据吞吐量,同时增强了网络的可靠性。
单层结构vs分层结构
在单层次的路由系统中,所有的路由器都是对等的;而在分层路由系统中,则是由一部分路由器组成路由主干。任何一台主机发送出的数据包首先经过非主干路由器到达主干路由器,然后沿着路由主干传递。当到达目的地的网络区域时,从主干路由器转入非主干路由器,并最终抵达目标接收方。
通常,我们把路由系统中的本地节点群称为域,自主系统,或区域。在分层路由系统中,一个域中的某些路由器可以与位于其它域中的路由器进行通讯,而另外一些路由器则只能与本域中的路由器通讯。在规模更大的网络中,可能会存在更多的路由等级,而路由主干一般都是由位于最高等级的路由器组成。
分层路由的最大优势就在于其组成结构与我们在现实企业中所采用的管理和组织结构相符,因而可以非常好的支持公司内部的数据流量和模式。举例来说,在企业网中,绝大多数的网络通讯都发生在小范围内的组或域中,所以域内路由器只需要知道如何与本域中的其它路由器通讯即可,不必关心其它域中的路由器。这样,就可以使路由算法得到简化,并相应降低了路由的更新流量。
主机智能vs路由器智能
所谓主机智能算法就是指由数据包的发送方决定整个传输过程中的完整路由,通常也被称为源路由。在源路由系统中,路由器的作用只是简单的存储和转发。
路由器智能算法的基础就是假定数据包的发送方对路由没有任何决定能力,完全由路由器基于各自的计算方法选择和确定数据的传输路径。
域间vs域内
有些路由算法只能在单独的域中使用,而另外一些路由算法则既可以在域间也可以在域内使用。这两种算法的性质是不同的,因此,一种好的域内路由算法往往并不一定能够在域间环境下使用。
链路状态vs距离向量
链路状态算法(又称为最短路径优先算法)可以把路由信息传递到网络上的所有节点。不过每一台路由器只是向外界发送描述自己链路状态的那一小部分路由表信息。距离向量算法(又称为Bellman-Ford算法)要求每一台路由器向外发送全部或绝大部分的路由表信息,不过该信息只能发送给临近的路由器。因此,两者的区别就是链路状态算法可以向整个网络范围发送数据量较小的更新信息,而距离向量算法则是只能向临近的路由器发送大批量的更新信息。
因为链路状态算法的聚敛速度相对较快,所以要比距离向量算法更能有效的避免路由回路的出现。不过,从另一方面来说,链路状态算法需要占用更多的CPU处理时间和系统内存,因此比距离向量算法的实现和支持成本更高。除了我们在这里所提到的区别之外,两种路由算法都可以在绝大多数的网络环境中使用。
路由度量标准
路由算法使用很多不同的度量标准来确定最佳路径。一些复杂的路由算法更是可以把几个独立的度量标准综合起来,作出更为全面和准确的路由决定。以下是最为常用的路由度量标准:
路径长度
可靠性
时延
带宽
负载
通讯成本
路径长度是最为常用的一种路由度量标准。有些路由协议可以允许网络管理人员为每一条网络连接指定路由成本。在这种情况下,路径长度就是所有有关连接的路由成本的总和。其它一些路由协议还可以定义跳数,即数据包从源地址到目的地所必须经过的网络互连设备(如路由器等)的个数。
在路由算法的范畴内,可靠性主要是指每一条网络连接的可使用性(通常使用误码率表示)。一些网络连接可能比其它连接更容易出现问题。在网络故障修复之后,有些网络连接可能比其它连接的恢复速度更快或更方便。网络管理人员可以把任何可靠性因素考虑在内,并据此为每一条网络连接指定相应的可靠值。
路由时延是指通过网络把数据包从源地址移动到目的地所需要的时间总和。有许多因素可以造成路由时延,其中包括网络连接的带宽,每一台途经路由器的负载,网络拥挤状况以及数据包所需要经过的物理距离等。因为路由时延是多项重要变量的综合反映,所以被普遍的采用。
带宽是指一条网络连接所能提供的流量吞吐能力。很明显,10-Mbps以太网的带宽要大大高出64-kbps专线的带宽。虽然带宽反映了一条网络连接所能够提供的最大速率,但是有时使用宽带连接的路由并不一定是最优路径。例如,如果一条高速连接非常繁忙,那么实际等待发送数据包的时间可能会更长。
负载是指象路由器这样的网络资源和设备的繁忙程度。我们可以通过多种方式计算负载,例如CPU的使用率以及每秒钟可以处理的数据包的数目等。对路由负载进行长期的持续监控可以更加有效的管理和配置网络资源。
通讯成本是另外一种非常重要的路由度量标准,尤其是对那些相对于网络性能更加关注运行成本的企业来说,其重要性就更加明显。举例来说,有时企业会为了节省公用线路的使用成本而改用延迟更大的私人线路,这就是通讯成本的具体体现。