文章目录
- 一、有关路由选择协议的几个基本概念
- 1、理想的路由算法
- 2、分层次的路由选择协议
- 二、内部网关协议 RIP
- 1、协议 RIP 的工作原理
- 2、特点
- 3、距离向量算法
- 4、坏消息传播慢
- 三、内部网关协议 OSPF
- 1、基本特点
- 2、OSPF 的五种分组类型
本节将讨论几种常用的路由选择协议,也就是要讨论转发表中的路由是怎样得出的
一、有关路由选择协议的几个基本概念
1、理想的路由算法
路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。一个理想的路由算法应具有如下的一些特点
- 算法必须是正确的和完整的。这里,“正确”的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。
- 算法在计算上应简单。路由选择的计算不应使网络通信量增加太多的额外开销。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。当网络中的通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当某个或某些节点、链路发生故障不能工作,或者修理好了再投入运行时,算法也能及时地改变路由。有时称这种自适应性为“稳健性”(robustness)。
- 算法应具有稳定性。在网络通信量和网络拓扑相对稳定的情况下,路由算法应收敛于一个可以接受的解,而不应使得出的路由不停地变化。
- 算法应是公平的。路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。例如,若仅仅使某一对用户的端到端时延为最小,但却不考虑其他的广大用户,这就明显地不符合公平性的要求。
- 算法应是最佳的。路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。虽然我们希望得到“最佳”的算法,但这并不总是最重要的。对于某些网络,网络的可靠性有时要比最小的分组平均时延或最大吞吐量更加重要。因此,所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
一个实际的路由选择算法,应尽可能接近于理想的算法。在不同的应用条件下,对以上提出的6个方面也可有不同的侧重。
倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略与动态路由选择策略。
-
静态路由选择:也叫作非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。
-
动态路由选择:也叫作自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
2、分层次的路由选择协议
互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。由于以下两个原因,互联网采用分层次的路由选择协议:
- 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
为此,可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统 AS是在单一技术管理下的许多网络、IP地址以及路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。每一个AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。这样,互联网就把路由选择协议划分为两大类,即:
- 内部网关协议IGP(lnterior GatewayProtocol)即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多的是RIP和OSPF协议(IS-IS协议也很流行,但不介绍了)。
- 外部网关协议EGP(Extemmal GatewayProtocol) 若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),那么在不同自治系统AS之间的路由选择,就需要使用外部网关协议EGP。目前使用最多的外部网关协议是BGP的版本4
自治系统之间的路由选择也叫作域间路由选择(interdomain routing),而在自治系统内部
的路由选择叫作域内路由选择(intradomain routing)。
总之,使用分层次的路由选择方法,可将互联网的路由选择协议划分为:
- 内部网关协议 IGP:具体的协议有多种,如RIP和OSPF等。
- 外部网关协议 EGP:目前使用的协议是 BGP-4。
二、内部网关协议 RIP
1、协议 RIP 的工作原理
RIP(Routing Information Protocol)是内部网关协议 IGP 中最先得到广泛使用的协议IRFC 1058],它的中文译名是路由信息协议。RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单。
RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。协议 RIP 将“距离”定义如下:
从一路由器到直接连接的网络的距离定义为1。从一主机到非直接连接的网络的距离定义为所经过的路由器数加1。“加1”是因为到达目的网络后就进行直接交付(不需要再经过路由器),而到直接连接的网络的距离已经定义为1。
协议 RIP 的“距离”"也称为“跳数”(hop count),并且每经过一个网络,跳数就加 1。RIP 认为好的路由就是它通过的网络数目少,即“距离短”。RIP 允许一条路径最多只能包含 15个网络。因此“距离”等于 16 时即相当于不可达。可见 RIP 只适用于小型互联网。
RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少网络数的路由(即最短路由),哪怕还存在另一条高速(低时延)但网络数较多的路由。
2、特点
- 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。协议RIP规定,不相邻的路由器不交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。也就是说,交换的信息是:“我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器”。
- 按固定的时间间隔交换路由信息,例如,每隔 30秒。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。网络中的主机虽然也运行协议RIP,但只被动地接收路由器发来的路由信息。
这里要强调一点:路由器在刚刚开始工作时,它的路由表是空的。然后路由器就得出到直接相连的几个网络的距离(这些距离定义为1)。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次的更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
通过这种方式,最后在自治系统中所有的节点都得到了正确的路由选择信息。在一般情况下,协议RIP 可以收敛,并且过程也较快。“收敛”就是在自治系统中所有的节点都得到正确的路由
选择信息的过程。
路由表中最主要的信息就是:到某个网络的距离(即最短距离),以及应经过的下一跳地址。路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法。下面就是协议 RIP使用的距离向量算法。
3、距离向量算法
对每一个相邻路由器发送过来的 RIP 报文,执行以下步骤:
- 对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1(见后面的解释1)。每一个项目都有三个关键数据,即:到目的网络Net,距离是d,下一跳路由器是X。
- 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络Net,则把该项目添加到路由表中(见解释2)。
- 否则(即在路由表中有目的网络Net,这时就再查看下一跳路由器地址)。
- 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目(见解释3)。
- 否则(即这个项目是:到目的网络Net,但下一跳路由器不是X)。
- 若收到的项目中的距离d小于路由表中的距离,则进行更新(见解释 4),
- 否则什么也不做(见解释5)。
- 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为16(距离为16表示不可达)。
- 返回。
上面给出的距离向量算法的基础就是 Bellman-Ford算法(或Ford-Fulkerson 算法)。这种算法的要点是这样的:
设X是节点A到B的最短路径上的一个节点。若把路径A→B拆成两段路径A→X和X→B,则每一段路径A→X和X→B也都分别是节点A到X和节点X到B的最短路径。
下面是对上述距离向量算法的五点解释。
- 解释1:这样做是为了便于进行本路由表的更新。假设从位于地址X的相邻路由器发来的 RIP 报文的某一个项目是:“Net2,3,Y”,意思是“我经过路由器Y到网络 Net2 的距离是3”,那么本路由器就可推断出:“我经过X到网络Net2的距离应为3+1=4”。于是,本路由器就把收到的 RIP报文的这一个项目修改为“Net2,4,X”,作为下一步和路由表中原有项目进行比较时使用(只有比较后才能知道是否需要更新)。读者可注意到,收到的项目中的Y对本路由器是没有用的,因为Y不是本路由器的下一跳路由器地址。
- 解释 2:表明这是新的目的网络,应当加入到路由表中。例如,本路由表中没有到目的
网络 Net2 的路由,那么在路由表中就要加入新的项目“Net2,4.X”。 - 解释 3:为什么要替换呢?因为这是最新的消息,要以最新的消息为准。到目的网络的距离有可能增大或减小,但也可能没有改变。例如,不管原来路由表中的项目是“Net2,3,X”还是“Net2,5,X”,都要更新为现在的“Net2,4,X”。
- 解释 4:例如,若路由表中已有项目“Net2,5,P”,就要更新为“Net2,4,X”。因为到网络 Net2 的距离原来是5,现在减到4,更短了。
- 解释 5:若距离更大了,显然不应更新。若距离不变,更新后得不到好处,因此也不更新。
协议RIP让一个自治系统中的所有路由器都和自己的相邻路由器定期交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。这里还应注意:虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
下图表明RIP 报文作为运输层用户数据报 UDP的数据部分进行传送(使用UDP的端口 520。端口的意义见5.2.2节)。
RIP 报文由首部和路由部分组成。在路由部分要填入自治系统号ASN(AutonomousSystem Number)",这是考虑使RIP有可能收到本自治系统以外的路由选择信息。还要指出目的网络地址(包括网络的子网掩码)、下一跳路由器地址以及到此网络的距离。一个 RIP报文最多可包括 25个路由。如超过,必须再用一个RIP报文来传送。
4、坏消息传播慢
RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。我们可以用下图的简单例子来说明。设三个网络通过两个路由器互连起来并且都已建立了各自的路由表。图中路由器交换的信息只给出了我们感兴趣的一行内容。路由器 R1中的“Net1,1,直接”表示“到网 Net1 的距离是 1,直接交付”。路由器 R2中的“Net1,2,R1,”表示“到网 Net1 的距离是 2,下一跳经过 R1,”
现在假定路由器R1到网 Net1 的链路出了故障,R1无法到达网 Net1。于是路由器R1把到网 Net1的距离改为16,表示不可达,因而在R,的路由表中的相应项目变为“Net1,16.直接”。但是,很可能要经过 30秒钟后R1才把更新信息发送给R2。然而R2可能已经先把
自己的路由表发送给了R1,其中有“Netl,2,R,”这一项。
R1收到 R2的更新报文后,误认为可经过R2到达网 Net1,于是把收到的路由信息“Net1,2.R,”修改为:“Net1,3,R,”,表明“我到网 Netl 的距离是 3,下一跳经过 R2”,并把更新后的信息发送给 R2。
同理,R₂接着又更新自己的路由表为“Net1,4,R1,”,以为“我到网 Netl 距离是 4,下一跳经过 R1”。
这样的更新一直继续下去,直到 R1和 R2到网 Netl 的距离都增大到 16 时,R1和 R2才知道原来网 Net1是不可达的。协议 RIP 的这一特点叫作:好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往较长(例如数分钟)。这是RIP的一个主要缺点。但如果一个路由器发现了更短的路由,那么这种更新信息就传播得很快。
为了使坏消息传播得更快些,可以采取多种措施。例如,让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送。
总之,协议 RIP最大的优点就是实现简单,开销较小。但协议RIP的缺点也较多。首先,RIP限制了网络的规模,它能使用的最大距离为15(16 表示不可达)。其次,路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。最后,“坏消息传播得慢”,使更新过程的收敛时间过长。因此,对于规模较大的网络就应当使用下一节所述的 OSPF 协议。然而目前在规模较小的网络中,使用协议 RIP 的仍占多数。
三、内部网关协议 OSPF
1、基本特点
这个协议的名字是开放最短路径优先OSPF(OpenShortest Path First)。它是为克服RIP的缺点在1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
请注意:OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。实际上,所有的在自治系统内部使用的路由选择协议(包括协议RIP)都是要寻找一条最短的路径。
OSPF最主要的特征就是使用链路状态协议(linkstateprotocol),而不是像RIP 那样的距
离向量协议。协议OSPF的特点是:
- 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。更具体的做法后面还要讨论。我们应注意协议 RIP 是仅仅向自己相邻的几个路由器发送信息。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。OSPF 将这个“度量”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”。我们应注意,对于协议 RIP,发送的信息是:“到所有网络的距离和下一跳路由器”。
- 当链路状态发生变化或每隔一段时间(如30分钟),路由器向所有路由器用洪泛法发送链路状态信息。
从上述的前两点可以看出,OSPF和RIP的工作原理相差较大。
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。因此,每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的,其代价是多少,等等。每一个路由器使用链路状态数据库中的数据,构造出自己的路由表(例如,使用Dikstra 的最短路径路由算法)。我们注意到,协议RIP的每一个路由器虽然知道到所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。
OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫作区域(area)。下图就表示一个自治系统划分为四个区域。每一个区域都有一个32位的区域标识符(用点分十进制形式表示)。当然,一个区域也不能太大,在一个区域内的路由器最好不超过200个。
划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。
在上层的区域叫作主干区域(backbonearea)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器(area border router)进行概括。
在下图中,路由器R3,R4和R7都是区域边界路由器,而显然,每一个区域至少应当有一个区域边界路由器。在主干区域内的路由器叫作主干路由器(backbone router),如 R3,R4,R5,R6和 R7。一个主干路由器可以同时是区域边界路由器,如R3、R4和R7。在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫作自治系统边界路由器(如图 中的 R6)。
采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了。但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPE协议能够用于规模很大的自治系统中。这里,我们再一次地看到划分层次在网络设计中的重要性
除了以上的几个基本特点外,OSPF还具有下列的一些特点:
- OSPF允许管理员给每条路由指派不同的代价。例如,高带宽的卫星链路对于非实时的业务可设置为较低的代价,但对于时延敏感的业务就可设置为非常高的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。链路的代价可以是1至65535 中的任何一个无量纲的数,因此十分灵活。商用的网络在使用OSPF时,通常根据链路带宽来计算链路的代价。这种灵活性是RIP所没有的。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载均衡(load balancing)。在代价相同的多条路径上分配通信量是通信量工程中的简单形式。RIP只能找出到某个网络的一条路径。
- OSPF支持可变长度的子网划分和无分类的编址CIDR。
- 由于网络中的链路状态可能经常发生变化,因此OSPF让每一个链路状态都带上一个32位的序号,序号越大状态就越新。OSPF规定,链路状态序号增长的速率不得超过每5秒钟1次。这样,全部序号空间在600年内不会产生重复号。
2、OSPF 的五种分组类型
OSPF 共有以下五种分组类型:
- 类型1,问候(Hello)分组,用来发现和维持邻站的可达性。
- 类型 2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 类型 3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。
- 类型 4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。这种分组是最复杂的,也是OSPF协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。链路状态更新分组共有五种不同的链路状态「RFC2328],这里从略。
- 类型 5,链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。
OSPF分组是作为IP数据报的数据部分来传送的(如下图所示)。OSPF不用UDP而是直接用 IP 数据报传送(其 IP 数据报首部的协议字段值为 89)。OSPF 构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF规定,每两个相邻路由器每隔10秒钟要交换一次问候分组。这样就能确知哪些邻站是可达的。对相邻路由器来说,“可达”是最基本的要求,因为只有可达邻站的链路状态信息才存入链路状态数据库(路由表就是根据链路状态数据库计算出来的)。在正常情况下,网络中传送的绝大多数OSPF分组都是问候分组。若有40秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。
其他的四种分组都是用来进行链路状态数据库的同步。所谓同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫作“完全邻接的”(fully adiacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。
当一个路由器刚开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的“代价”。如果所有的路由器都把自己的本地链路状态信息对全网进行广播,那么各路由器只要将这些链路状态信息综合起来就可得出链路状态数据库。但这样做开销太大,因此OSPF采用下面的办法。
OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。
在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。OSPF使用的是可靠的洪泛法,其要点如下图所示。设路由器R用洪泛法发出链路状态更新分组。图中用一些小的箭头表示更新分组。第一次先发给相邻的三个路由器。这三个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。图中的空心箭头表示确认分组。
为了确保链路状态数据库与全网的状态保持一致,OSPF还规定每隔一段时间,如30分钟,要刷新一次数据库中的链路状态。
由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。由于 OSPF 没有“坏消息传播得慢”的问题,据统计,其响应网络变化的时间小于100 ms。
若N个路由器连接在一个以太网上,则每个路由器要向其他(N-1)个路由器发送链路状态信息,因而共有 N(N-1)个链路状态要在这个以太网上传送。OSPF 协议对这种多点接入的局域网采用了指定的路由器(designated router)的方法,使广播的信息量大大减少。指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。