路由是把信息从源穿过网络传递到目的的行为,在路上,至少遇到一个中间节点。路由通常与桥接来对比,在粗心的人看来,它们似乎完成的是同样的事。它们的主要区别在于桥接发生在OSI参考协议的第二层(链接层),而路由发生在第三层(网络层)。这一区别使二者在传递信息的过程中使用不同的信息,从而以不同的方式来完成其任务。
路由包含两个基本的动作:确定最佳路径和通过网络传输信息。在路由的过程中,后者也称为(数据)交换。交换相对来说比较简单,而选择路径很复杂。
metric是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。为了帮助选路,路由算法初始化并维护包含路径信息的路由表,路径信息根据使用的路由算法不同而不同。
路由算法根据许多信息来填充路由表。目的/下一跳地址对告知路由器到达该目的最佳方式是把分组发送给代表“下一跳”的路由器,当路由器收到一个分组,它就检查其目标地址,尝试将此地址与其“下一跳”相联系。路由表还可以包括其它信息。路由表比较metric以确定最佳路径,这些metric根据所用的路由算法而不同,下面将介绍常见的metric。路由器彼此通信,通过交换路由信息维护其路由表,路由更新信息通常包含全部或部分路由表,通过分析来自其它路由器的路由更新信息,该路由器可以建立网络拓扑细图。路由器间发送的另一个信息例子是链接状态广播信息,它通知其它路由器发送者的链接状态,链接信息用于建立完整的拓扑图,使路由器可以确定最佳路径。
交换算法相对而言较简单,对大多数路由协议而言是相同的,多数情况下,某主机决定向另一个主机发送数据,通过某些方法获得路由器的地址后,源主机发送指向该路由器的物理(MAC)地址的数据包,其协议地址是指向目的主机的。
路由器查看了数据包的目的协议地址后,确定是否知道如何转发该包,如果路由器不知道如何转发,通常就将之丢弃。如果路由器知道如何转发,就把目的物理地址变成下一跳的物理地址并向之发送。下一跳可能就是最终的目的主机,如果不是,通常为另一个路由器,它将执行同样的步骤。当分组在网络中流动时,它的物理地址在改变,但其协议地址始终不变。
路由可以分为以下几类:
(1)静态与动态
静态路由算法很难算得上是算法,只不过是开始路由前由网管建立的表映射。这些映射自身并不改变,除非网管去改动。使用静态路由的算法较容易设计,在网络通信可预测及简单的网络中工作得很好。
由于静态路由系统不能对网络改变做出反映,通常被认为不适用于现在的大型、易变的网络。九十年代主要的路由算法都是动态路由算法,通过分析收到的路由更新信息来适
应网络环境的改变。如果信息表示网络发生了变化,路由软件就重新计算路由并发出新的路由更新信息。这些信息渗入网络,促使路由器重新计算并对路由表做相应的改变。
动态路由算法可以在适当的地方以静态路由作为补充。例如,最后可选路由(router of last resort),作为所有不可路由分组的去路,保证了所有的数据至少有方法处理。
(2)单路径与多路径
一些复杂的路由协议支持到同一目的的多条路径。与单路径算法不同,这些多路径算法允许数据在多条线路上复用。多路径算法的优点很明显:它们可以提供更好的吞吐量和可靠性。
(3)平坦与分层
一些路由协议在平坦的空间里运作,其它的则有路由的层次。在平坦的路由系统中,每个路由器与其它所有路由器是对等的;在分层次的路由系统中,一些路由器构成了路由主干,数据从非主干路由器流向主干路由器,然后在主干上传输直到它们到达目标所在区域,在这里,它们从最后的主干路由器通过一个或多个非主干路由器到达终点。
路由系统通常设计有逻辑节点组,称为域、自治系统或区间。在分层的系统中,一些路由器可以与其它域中的路由器通信,其它的则只能与域内的路由器通信。在很大的网络中,可能还存在其它级别,最高级的路由器构成了路由主干。
分层路由的主要优点是它模拟了多数星空(中国)官方的结构,从而能很好地支持其通信。多数的网络通信发生在小组中(域)。因为域内路由器只需要知道本域内的其它路由器,它们的路由算法可以简化,根据所使用的路由算法,路由更新的通信量可以相应地减少。
(4)主机智能与路由器智能
一些路由算法假定源结点来决定整个路径,这通常称为源路由。在源路由系统中,路由器只作为存贮转发设备,无意识地把分组发向下一跳。其它路由算法假定主机对路径一无所知,在这些算法中,路由器基于自己的计算决定通过网络的路径。前一种系统中,主机具有决定路由的智能,后者则为路由器具有此能力。
主机智能和路由器智能的折衷实际是最佳路由与额外开销的平衡。主机智能系统通常能选择更佳的路径,因为它们在发送数据前探索了所有可能的路径,然后基于特定系统对“优化”的定义来选择最佳路径。然而确定所有路径的行为通常需要很多的探索通信量和很长的时间。
(5)域内与域间
一些路由算法只在域内工作,其它的则既在域内也在域间工作。这两种算法的本质是不同的。其遵循的理由是优化的域内路由算法没有必要也成为优化的域间路由算法。
(6)链接状态与距离向量
链接状态算法(也叫做短路径优先算法)把路由信息散布到网络的每个节点,不过每个路由器只发送路由表中描述其自己链接状态的部分。距离向量算法(也叫做Bellman-Ford算法)中每个路由器发送路由表的全部或部分,但只发给其邻居。也就是说,链接状态算法到处发送较少的更新信息,而距离向量算法只向相邻的路由器发送较多的更新信息。
由于链接状态算法聚合得较快,它们相对于距离算法产生路由环的倾向较小。在另一方面,链接状态算法需要更多的CPU和内存资源,因此链接状态算法的实现和支持较昂贵。虽然有差异,这两种算法类型在多数环境中都可以工作得很好。