所有路由选择协议都是围绕着一种算法而构建的。通常,一种算法是一个逐步解决问题的过程。一种路由算法至少应指明以下内容:
- 向其他路由器传送网络可达性信息的过程。
- 从其他路由器接收可达性信息的过程。
- 基于现有可达性信息决策最优路由的过程以及在路由表中记录这些信息的过程。
- 响应、修正和通告网络中拓扑变化的过程。
对所有路由选择协议来说,几个共同的问题是路径决策、度量、收敛和负载均衡。
路径决策
在网络内的所有子网都必须连接到一台路由器上, 无论什么情况下,只要路由器有接口连接到一个网络上,那么该接口必须具有一个属于该网络的地址。这个地址就是可达性信息的起始点。
图41给出了一个包含3台路由器的网络。路由器A知道网络192.168.1.0、192.168.2.0和192.168.3.0的存在,因为路由器有接口连接到这些网络上,并 且配置了相应的地址和掩码。同样的,路由器B知道网络192.168.3.0、 192.168.4.0、 192.168.5.0 和192.168.6.0的存在,路由器C知道网络192.168.6.0、192.168.7.0 和192.168.1.0的存在。由于每个接口都实现了所连接网络的数据链路和物理层协议,因此路由器也知道网络的状态(工作正常“up”或发生故障“down").
信息共享过程看上去很简单。考虑路由器A:
- 步骤1:路由器A检查自己的IP地址和相关掩码,然后推导出与自身所连接的网络是192.168.1.0、192.168.2.0 和192.168.3.0.
- 步骤2:路由器A将这些网络连同某种标记-起保存到路由表中,其中标记指明了网络是直连网络。
- 步骤3:路由器A向数据包中加入以下信息:“我的直连网络是 192.168.1.0、192.168.2.0和192.168.3.0.
- 步骤4:路由器A向路由器B和路由器C发送这些路由信息数据包的拷贝,或者叫做路由选择更新。
路由器B和路由器C执行与路由器A完全相同的步骤,并且也向路由器A发送带有与它们直接相连的网络的更新信息。路由器A将接收到的信息连同发送路由器的源地址一起写入路由表。现在,路由器A知道了所有的网络,而且还知道连接这些网络的路由器的地址。
这个过程看似非常简单。那么为什么路由选择协议比这更复杂呢?让我们重新看一下图4-1。
- 路由器A将来自路由器B和路由器C的更新信息保存到路由表之后,它应该用这些信息作什么?例如,路由器A是否应该将路由器C的数据包信息传递给路由器B,还是将路由器B的路由选择信息包传递给路由器C呢?
- 如果路由器A没有转发这些更新消息,那么就不能完成信息共享。例如,如果路由器B和路由器C之间的链路不存在,那么这两台路由器就无法知道对方的网络。因此路由器A必须转发那些更新信息,但是这样做又产生了新的问题。
- 如果路由器A从路由器B和路由器C那里知道网络192.168.4.0, 那么为了到达该网络应该使用哪一台路由器呢?它们都合法吗?谁是最优路径呢?
- 什么机制可以确保所有路由器能接收到所有的路由选择信息,而且这种机制还可以阻止更新数据包在网络中无休止地循环下去呢?
- 如果路由器共享某个直连网络(192.168.1.0、 192.168.3.0 和192.168.6.0) ,那么路由器是否仍旧应该通告这些网络呢?
这些问题同开头解释路由选择协议一样显得有点过分单纯,但是它们给读者的感觉却是:正是这些问题造成了协议的复杂性。
度量
当有多条路径到达相同目标网络时,路由器需要一种机制来计 算最优路径。度量(metric)是指派给路由的一种变量,作为一种手段,度量可以按最好到最坏,或按最先选择到最后选择的顺序对路由进行等级划分。考虑下面的例子,了解为什么需要度量。
如图4-1所示,假设在网络中信息共享可以正常进行,并且路由器A中的路由表如表41所示。
路由表说明了前3个网络直接连接到路由器,因而从路由器A到达它们不需要进行路由选择。根据路由表,后4个网络需要经过路由器B或路由器C才能到达。这些信息同样是正确的。但是,如果通过路由器B或路由器C都可以到达网络192.168.7.0,那么优先选择哪一条路径呢?这时就需要度量对这两条路径进行等级划分。
不同的路由选择协议使用不同的度量。例如,RIP定义含有路由器跳数最少的路径是最优路径; EIGRP基于路径沿路最小带宽和总时延定义最优路径。
跳数
跳数(Hop Count)度量可以简单地记录路由器跳数。例如,如果数据包从路由器A的接口192.168.3.1发出,经过路由器B到达网络192.168.5.0,则记为!跳;如果从路由器接口192.168.1.1发出,经路由器C和路由器B到达网络192.168.5.0, 记为2跳。假设仅使用跳数作为度量,那么最优路径就是跳数最少的路径,在本例中就是A-B。
但A-B是真正的最优路径吗?如果A-B是一条DS-0链路,并且A-C和C-B都是TI链路,那么跳数为2的路由实际上可能是最优路径,因为带宽对如何有效地使流量通过网络影响很大。
带宽
带宽(Bandwidth)度量将会选择高带宽路径,而不是低带宽链路。然而带宽本身可能不是一个好的度量。如果两条TI链路或其中一条被其他流量过多占用,那么与一个56KB的空闲链路相比到底谁好呢?或者一条高带宽但时延也很大的链路又如何呢?
负载
负载(Load)度量反应了流量占用沿途链路带宽的数量。最优路径应该是负载最低的路径。不像跳数和带宽,路径上的负载会发生变化,因而度量也会跟着变化。这里要当心,如果度量变化过于频繁,路由波动——最优路径频繁变化——可能就发生了。路由波动会对路由器的CPU.数据链路的带宽和全网稳定性产生负面影响。
时延
时延(Delay)是度量数据包经过一条路径所花费的时间。使用时延作度量的路由选择协议将会选择最低时延的路径作为最优路径。有多种方法可以测量时延。时延不仅要考虑链路时延,而且还要考虑路由器的处理时延和队列时延等因素。另一方面,路由的时延可能根本无法测量。因此,时延可能是沿路径各接口所定义的静态延时量的总和,其中每个独立的时延量都是基于连接接口的链路类型估算得到的。
可靠性
可靠性(Reliability)度量是用来测量链路在某种情况下发生故障的可能性,可靠性可以是变化的或固定的。可变可靠性度量的例子是链路发生故障的次数,或特定时间间隔内收到错误的次数。固定可靠性度量是基于管理员确定的一条链路的已知量.可靠性最高的路径将会被最优先选择。
代价
由管理员设置的代价(Cost) 度量可以反应更优或更差路由。通过任何策略或链路特性都可以对代价进行定义,同时代价也可以反应出网络管理员对路径的随意判断。因而代价是一个描述无量纲度量的术语。
每当谈论起路由选择的话题时,常常会把代价作为-种通用术语。例如,“RIP基于跳数选择代价最低的路径”。还有一个通用术语是最短(shortest), 如“RIP基于跳数选择最短路径”。当在这种情况中使用它们时,最小代价(最高代价)或最短(最长)仅仅指的是路由选择协议基于自己特定的度量对路径的一种看法。
收敛
动态路由选择协议必须包含一系列过程, 这些过程用于路由器向其他路由器通告本地的直连网络,接收并处理来自其他路由器的同类信息,以及传递从其他路由器接收到的信息。此外,路由选择协议还需要定义已确定的最优路径的度量。
对路由选择协议来说,另一个标准是网络上所有路由器的路由表中的可达性信息必须一致。在图4-1中,如果路由器A确定了经过路由器C到达网络192.168.5.0是最优路径,而路由器C确定到达相同网络的最优路径是经过路由器A.那么路由器A发向192.168.5.0 的数据包到达路由器C后又被发回给路由器A.路由器A又再次发给路由器C,如此往复循环。
我们称这种在两个或多个目标网络之间流量的持续循环为路由选择环路(routing loop)。使所有路由表都达到-致状态的过程叫做收敛(convergence)。全网实现信息共享以及所有路由器计算最优路径所花费的时间总和就是收敛时间。
图4-2所示的网络已经收敛,但是现在拓扑又发生了变化。最左边的两台路由器之间的链路发生故障,这两台直接相连的路由器都从数据链路协议获知链路故障,转而通知它们的邻居该链路不再可用。邻接路由器立即更新路由表并通知它们的邻居,这个过程一直持续到所有路由器都知道此变化为止。
注意,在立时刻,最左边的3台路由器知道拓扑发生了变化,但最右边的3台路由器依然不知道。最右边的3台路由器仍旧保存着原来的路由信息并继续交换数据包。这时网络处于未收敛状态,正是在这段时间里可能发生路由选择错误。因此,在任何路由选择协议里收敛时间是一个重要的因素。在拓扑发生变化之后,一个网络的收敛速度越快越好。
负载均衡
为了有效地使用带宽,负载均衡作为一种手段,将流量分配到相同目标网络的多条路径上。如图4-1所示,再让我们考虑一下这个讨论负载均衡有效性的例子。图中所有网络都存在两条可达路径。如果网络192.168.2.0.上的设备向192.168.6.0上的设备发送一组数据包流,路由器A可以经过路由器B或路由器C发送这些数据包。在这两种情况下,到日的网络的距离都是1跳。然而,在一条路径上发送所有的数据包不能最有效地利用可用带宽:因此应该执行负载均衡交替使用两条路径。正加第3章所述,负载均衡可以是等代价或不等代价,基于数据包或基于目标地址的。