众多Internet服务提供商在自治域系统(Autonomous System)间普遍使用外部路由协议—BGP(Border Gateway Protocol) Version 4,然而在自治域系统内部使用的路由协议都不尽相同,但都属于内部网关协议—IGP(Internal Gateway Protocol)。
本文将结合目前国内大型网络中正在使用着的内部网关路由协议进行分析对比,并提出自己的见解和看法。
首先,让我们来看两个早期的比较简单的路由协议:
RIP Version1 (--Routing Information Protocol)和igrp(--Interior Gateway Routing Protocol)
这两个路由协议都是非常容易设计、配置和维护的路由协议,属于距离矢量路由协议,仅适用于小型网络,而且并不需要结构化的地址,只是用平面的结构。
它们的缺点主要有:
· RIP使用跳数(Hop Count)作为路径的开销,并作为最佳路径的选择依据,所以有时会导致选择出来的路径并不是真正的最佳路径,并且使网络直径只能限制在15跳之内,超过15跳的路由将被RIP认为是不可到达。而igrp并不使用路由器跳数计算路径开销,所以对于网络直径的限制非常小(最大允许255跳路由器)。igrp使用复合的开销算法,利用这些参数:带宽(Bandwidth);延时(Delay);可信度(Reliability);负载(Load);最大传输单元(MTU)。所以选择最佳路径将会更准确。
· RIP(每30秒)和igrp(每90秒)定期就要将整个路由表作为路由更新从各个端口广播出去,这样虽然需要的计算不多,占用的CPU和内存并不多,但是消耗的网络带宽很多。而且因为必须是等到更新周期到才能通知其他路由器路由的变化,所以网络收敛速度非常慢,在大型网络中有可能导致路由表不一致。
· 需要使用例如Split Horizon; Count to Infinity; Poison Reverse; Hold-Down timer 等等技术以保证不出现路由循环。(这些技术中,有些在一定条件下反而有负面影响)
即使RIP现在已经有了Version 2,相对于第一个版本已经有了很多改进,例如RIP v2已经支持VLSM,并且使用组播发送路由更新,但是RIP v2在很多特性仍然是继承了第一个版本,所以仍然属于距离矢量路由协议,仍然不适用于大型网络。
igrp是特有的距离矢量路由协议,是Cisco于80年代中期为了解决RIP路由协议所具有的问题的开发的。igrp较RIP已经有了很多改进,包括使用更丰富的开销算法参数、消除了RIP对于网络直径的15跳数限制、可以在开销不等的路径上进行负载均衡等等。 但是igrp仍然没有解决RIP version1的例如扩展性方面的问题。
这两种路由协议都是较早期推出的距离矢量路由协议,所以都有一定的缺点,使它们非常不适于在大型网络上应用。
根据该路由协议的名称就可以知道,OSPF是一个开放标准,并不被某个设备厂商所独自拥有,也就是说各个厂商生产的路由设备可以互操作(只要支持该路由协议),这也就正是OSPF被广泛使用的原因之一。OSPF是由IETF在RFC 1583中定义的。
OSPF使用链路带宽作为路径开销,并没有使用路由器跳数,所以对网络直径没有限制。
作为链路状态路由协议,OSPF维护邻居表和拓扑(相同区域中的每个OSPF路由器都维持一个整个区域的拓扑数据库,并且都是相同的),并且根据拓扑数据库通过Dijkstra或SPF(Shortest Path First)算法以自己作为根节点计算出最短路径树。因为一旦某个链路状态有变化,区域中所有OSPF路由器必须再次同步拓扑数据库,并重新计算最短路径树,所以会使用大量CPU和内存资源。 然而OSPF不像RIP操作那样使用广播发送路由更新,而是使用组播技术发布路由更新,并且也只是发送有变化的链路状态更新(路由器会在每30分钟发送链路状态的概要信息,不论是否已经因为网络有拓扑变化发送了更新),所以OSPF会更加节省网络链路带宽。
在大型的网络中,通常会将整个网络分成多个区域进行管理。
作为整个网络的骨干区域—区域零必须存在,其必须唯一存在其他非骨干区域必须和骨干区域相连(通过物理连接或通过Cisco的技术—Virtual Link均可以),非骨干区域之间只能通过骨干区域相互通信。
将网络划分成多个区域有很多益处:
· 可以按照不同的地域或行政上的策略创建区域,从而限制区域之间路由信息的共享。
· 创建区域可以增加安全性。
· 有助于增加整个网络的稳定性。
考虑到OSPF网络中划分区域将会使配置和故障排除的难度增大,也许有人会提出,可以将所有的路由器放在同一个区域中,也就是说整个网络只有骨干区域--区域零,那么有没有考虑过这个问题呢:
因为根据OSPF路由协议的特点,每个OSPF路由器都需要维持一份整个网络的拓扑,一旦有某条链路状态改变,这将促使区域内部的所有路由器都需要重新计算自己的最短路径树,这将消耗大量的路由器CPU和内存资源。
所以对于ChinaNet这样的大型骨干网络,网络内需要运行近百台路由器,如果网络上只建立区域零,所有路由器都在这一个区域中,那么网络将会变得非常的不稳定,整个网络受到的波动非常大, 如果分成区域后,如果有链路状态改变,则只有该区域内的路由器需要更新拓扑数据库,并重新计算最短路径树,而该区域之外的路由器却不受到影响,这样就隐藏了链路状态变化带来的影响,而且减少了需要传送的链路状态发布信息,大大节省了网络带宽。
况且,如果整个网络只有一个区域,所有路由器都只存在于区域零中,则每个路由器中存放的整个网络的拓扑数据库将会非常大,不但占用大量路由器的内存,而且在计算该路由器的最短路径树时也将会占用大量的CPU资源。 所以Cisco推荐的是区域所包含的路由器最大不应该超过200个。
OSPF中规定区域的类型有以下几种:
· Backbone Area: 也就是区域零。 所有的非骨干区域必须通过骨干区域才能互相通信,这也是OSPF的一个缺点,它导致了骨干区域的压力非常大,从而限制了OSPF的扩展性。
· Stub Area: 并不接收外部的链路状态发布信息(是由ABSR产生的,用于出此自治域的路由),但是仍然接收ABR发送的汇总的链路状态发布信息。
· Totally Stubby: 不接收汇总的和外部的链路状态发布信息。 注意,这种类型的区域是Cisco特有的. 该有更多类型的区域在此不作更深的介绍,如果有兴趣可以查阅相关资料。
根据以上区域的划分情况,可以将路由器按作用不同进行分类:
· 内部路由器(Internal Router): 所有端口都在同一个区域中的路由器。
· 骨干路由器(Backbone Router): 有端口和所有端口都在区域零中(可以是内部路由器或区域边界路由器)
· 区域边界路由器(ABR): 用于连接不同区域,也就是端口在不同的区域中。 (区域边界路由器将为它所连接的每个区域维持分开的不同的拓扑数据库)
· 自治系统边界路由器(ASBR): 用于连接运行其它路由协议的区域。 注意,ASBR的位置很重要,建议应该位于区域零中。
为了更好地理解各种类型的路由器在网络中的位置,可以参见下图:
图一
OSPF非常灵活支持的网络类型多达四种:
· 广播多路访问(Broadcast MultiAccess): 例如以太网、令牌环、FDDI。
· 点到点(Point-to-Point): 例如串行链路
· 点到多点(Point-to-MultiPoint)
· 非广播多路访问(NBMA—Non-BroadCast MultiAccess): 例如X。 25和帧中继。
OSPF在这些类型的网络上操作大都不同,例如在广播多路访问的介质中,为了减少每对路由器之间都需要建立邻居关系而带来的路由器资源和带宽资源的耗费,需要选定 指定路由器(DR—Designated Router)和备份的指定路由器(BDR—Backup Designated Router),其他的所有路由器只需要和这些DR和BDR建立邻居关系就可以了(注意,这一点和IS-IS中是不同的,注意下文),从而大大减少了需要建立的邻居关系。
因为OSPF属于无类别路由协议,所以支持VLSM和CIDR,并且能够进行路由汇总,但是有一定的局限性,就是路由汇总(可以是自动汇总也可以是手动汇总)只能够在区域的边界路由器(ABR—Area Border Router)上和自治系统的边界路由器(Autonomous System Boundary Router)上进行,并不能像EIGRP那样在网络任何地方进行路由汇总。 这样就引出了OSPF的另一个缺点,就是对于网络初始设计时的要求非常高,网络必须是结构化良好的, IP地址规划非常良好才能够正确地在区域边界或自治系统边界进行汇总。所以OSPF相对于其他路由协议而言要更难设计和配置。
因为所有的区域都必须和骨干区域相连,所以必然存在一定的设计限制,但使用这种体系结构时,必须有一个良好的并且一致的IP地址结构以能够在进入骨干区域时进行汇总,从而减少区域中链路状态变化给其他区域和骨干区域带来波动。
OSPF还支持对路由更新的认证,通过使用MD5算法,只有经过认证的路由器之间才能共享路由信息,提高了网络的安全性。出于安全性的考虑,建议在大型网络中使用这个特性。
随着网络规模不断扩大,需要一些运行更加高效的路由协议,它们包括:
EIGRP----Enhanced igrp
从该路由协议的名称就可以看出,EIGRP是Cisco开发的增强型版本的igrp路由协议,所以仍然是Cisco特有的。
开发EIGRP的目的就是解决igrp所面临的可扩展性问题。