蒋磊
(南京城市职业学院,江苏南京,210000)
互联网发展到今天出现了很多新的概念和新的应用场景,但不论怎样创新和发展也都无法离开其最原始和最朴素的本质,即实现资源的共享,说到底就是实现设备间的互连与互通。路由器是网络中非常重要的硬件设备,是网络互连的基石,没有它的存在,网络互连便无从谈起。路由器和路由器之间会运行路由协议来学习彼此的网络,从而达到网络的互通。常见的路由协议有很多种,可以从如下几个方面对其进行分类,按照路由协议所使用的算法来分,有距离矢量型路由协议和链路状态型路由协议,它们的典型代表分别是RIP和OSPF;按照路由作用的范围来分,有内部网关路由协议和外部网关路由协议,简称IGP和EGP,它们的典型代表分别是OSPF和BGP;按照路由来源来分,有直连路由、静态路由和动态路由,直连路由由路由器接口IP地址所在的网络组成;静态路由由管理员手工配置完成,优缺点明显;动态路由是路由器运行动态路由协议学习到的路由。本文探讨的OSPF路由协议是一种典型的链路状态型内部网关动态路由协议。OSPF路由协议的主要特点如下:没有路由跳数的限制,OSPF不像RIP那样具有最大15跳的限制,这样OSPF就可以被应用在一个较大规模的网络之中;OSPF使用组播而非广播来更新变化的路由和网络信息,太多的广播会带来网络性能的下降以及设备资源的损耗;路由收敛速度较快;以开销作为度量值,可以防止以跳数作为度量值所带来的次优路径等问题;采用SPF算法可以有效的避免环路,虽然RIP协议采用了很多补救措施来防止环路,但不可否认的是RIP协议从算法上就存在劣根性,因此无法保证没有环路,而OSPF采用最短路径优先算法,可以确保区域内无环路,区域间无环路则是通过连接骨干区域来解决;OSPF在互联网上被大量使用,是运用最广的路由协议。除此之外,OSPF还支持VLSM,支持加密认证,安全等级更高,支持CIDR,可以轻松完成路由的汇总,从而减小路由表的规模。
区域类型:OSPF采用分层结构将网络划分成两种类型不同的区域,分别是骨干区域和非骨干区域,这样做的好处有以下几点,一是减少区域内LSDB的规模,LSDB又称为链路状态数据库,LSDB规模越大,其对路由器性能的损耗就越大,缩小LSDB规模可以使得运行OSPF协议的路由器门槛更低。二是方便组织和管理,可以根据功能或者地理位置的不同将路由器划分在不同的区域,以便于管理。三是隔离拓扑变化带来的网络震荡,发生在一个区域内的网络震荡其影响不会传递给另外一个区域。从名称上来看,两种类型的区域其地位是不平等的,之所以称为骨干区域是因为所有的非骨干区域之间的路由学习都要通过骨干区域进行中转,两个非骨干区域之间是不可以直接相连的,这样做是为了防止区域间出现环路,类似于网络拓扑中的星型结构。如果出现因不合理设计而造成的非骨干区域直接相连,那也是有办法解决的,即采用虚链路技术。
路由器类型:OSPF协议中有4种路由器类型,分别是区域内路由器、骨干路由器、区域边界路由器和自治系统边界路由器。区域内路由器是指所有接口都属于同一个区域的路由器,在OSPF协议中就称为区域内路由器,简称IR;骨干路由器是指只要有一个接口处在骨干区域中,那么这样的路由器就称为骨干路由器,简称BR;区域边界路由器是指连接骨干区域和非骨干区域的路由器,这样的路由器在OSPF协议中就称为ABR,ABR也是BR,但不是IR;自治系统边界路由器是指AS边界上的路由器,它们一边连接着OSPF路由域,一边连接着非OSPF路由域,通常将引入外部路由的路由器称之为自治系统边界路由器。外部路由即非OSPF域内的路由,引入是指将非OSPF路由重分发进OSPF路由域中的过程,使得所有OSPF路由器都能学习到如何去往OSPF域外。
三张表:邻居表、链路状态数据库和路由表。邻居表里面存放的是建立邻居关系的路由器,邻居关系不同于邻接关系,前者仅仅是交互了Hello报文,达到了2–Way状态,而后者不仅仅是交互了Hello报文,还交互了后续的DD、LSR、LSU和LSAck等报文,通过学习彼此没有的LSA来最终达到Full状态。邻居关系的建立是通过定期发送Hello报文来实现的;链路状态数据库简称LSDB,同一区域内的路由器其LSDB相同,ABR由于连接不同的区域,因此它有多个LSDB,每个LSDB对应不同的区域。同一区域内的每台路由器会将LSDB转换成带权有向图,然后运行SPF算法,以自己为树根计算去往每个节点的最短路径,这条最短路径就是去往各节点的路由;路由表是指OSPF的协议路由表,并不是指全局性的IP路由表。OSPF通过SPF算法计算后,会将去往目的地的最短路径首先放进OSPF协议路由表中,这条路由能否进入IP路由表,还必须与其它协议进行比较,只有全局最优的路由才能最终进入IP路由表。
五种协议报文:OSPF协议有五种报文,分别是Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。Hello报文用于建立邻居关系;DD报文用于交互LSA的摘要,通过彼此的交互来查找自己所缺少的LSA;LSR报文用于向对方请求自己所没有的LSA;LSU报文用于向对方发送链路状态更新信息;LSAck报文用于对LSU报文进行确认,是OSPF协议提供的一种可靠性保障机制。众所周知,IP协议是一种尽力而为的、不可靠的协议,OSPF报文是直接封装在IP报文中的,为了提供额外保障,OSPF协议设计出了LSAck报文。
OSPF网络类型:包括Broadcast类型、NBMA类型、P2P类型和P2MP等4种类型。OSPF可以根据二层的网络类型来决定上层的网络类型。如果二层网络类型是PPP或者HDLC,那么OSPF的网络类型就是P2P;如果二层网络类型是Ethernet,那么OSPF的网络类型就是Broadcast;如果二层网络类型是帧中继,那么OSPF的网络类型就是NBMA;默认情况下,没有一种二层网络类型对应着P2MP,需要进行转换。不同OSPF网络类型其工作方式是不一样的,主要表现在Hello报文的发送间隔不一样,有的类型需要选举DR和BDR,有的类型则不需要选举,这需要读者进行仿真实验来进一步验证。
RID:每台运行OSPF协议的路由器都必须要设置一个RID,RID全称是Router ID,是每台路由器在OSPF路由域中的唯一标识,RID是一个32位的无符号整数,其形式类似于IP地址。RID可以手工配置,也可以自动生成。如果没有手工配置,那么RID自动生成的顺序如下,如果路由器环回接口有效,并且配置了IP地址,那么最大的IP地址将作为RID;如果没有有效的环回口,那么从有效物理接口中选择最大的IP地址作为RID。由于RID是非强占式的,所以一旦完成选择,便不会轻易改变,这样做也是为了网络的稳定。
DR和BDR:DR和BDR的出现主要是为了降低需要维护的邻接关系数量,DR和BDR类似于班长和副班长,所有的DROther需要和DR和BDR建立邻接关系即可,而DROther之间只需要建立邻居关系。选举DR和BDR的原则是首先比较Hello报文当中携带的优先级,优先级最高的被选为DR,次高的被选为BDR;如果优先级一致,则比较RID的大小,RID越大越优先。一旦DR或BDR选举完成,就保持稳定状态。
LSA类型:LSA有多种类型,常见的有以下7类。1类LSA,区域内的每台路由器都会产生1类LSA,用来描述路由器直连路由的链路状态和开销值;2类LSA,由DR产生,用来描述DR所在网段的掩码和该网段内的其它路由器;3类LSA,由ABR产生,用来描述区域间的路由信息;4类LSA,由ASBR所在区域的ABR产生,用来描述去往ASBR的路由;5类LSA,由ASBR产生,用来描述去往AS外部网络的路由;7类LSA,用来描述去往AS外部网络的路由。
限于篇幅有限,本例只讲解OSPF的多区域配置方法。如下图所示,Lo1和Lo2分别处在不同的区域当中,现要求配置多区域OSPF,使得Lo1和Lo2能够正常通信,由于Area2没有直接连接在Area0上,因此需要建立虚链路来完成域间路由的传递。
R1上的配置:
R1(config)#router ospf 1
R1(config–router)#router–id 1.1.1.1
R1(config–router)#network 1.1.1.1 0.0.0.0 area 2
R1(config–router)#network 12.1.1.0 0.0.0.255 area 2
R1(config–router)#exit
R2上的配置:
R2(config)#router ospf 1
图 1 多区域OSPF配置
R2(config–router)#router–id 2.2.2.2
R2(config–router)#network 12.1.1.0 0.0.0.255 area 2
R2(config–router)#network 23.1.1.0 0.0.0.255 area 1
R2(config–router)#network 2.2.2.2 0.0.0.0 area 1
R2(config–router)#area 1 virtual–link 3.3.3.3
R2(config–router)#exit
R3上的配置:
R3(config)#router ospf 1
R3(config–router)#router–id 3.3.3.3
R3(config–router)#network 23.1.1.0 0.0.0.255 area 1
R3(config–router)#network 34.1.1.0 0.0.0.255 area 0
R3(config–router)#area 1 virtual–link 2.2.2.2
R3(config–router)#exit
R4上的配置:
R4(config)#router ospf 1
R4(config–router)#router–id 4.4.4.4
R4(config–router)#network 34.1.1.0 0.0.0.255 area 0
R4(config–router)#network 4.4.4.4 0.0.0.0 area 0
R4(config–router)#exit
当配置完成以后,Lo1和Lo2就可以正常通信了。本实验完成了OSPF多区域的配置和虚链路的配置,其中涉及到很多OSPF的具体原理,值得深入研究。OSPF的路由分为3种类型,分别是域内路由、域间路由和外部路由,其中外部路由又分为一类外部路由和二类外部路由。它们之间的优先级排序为域内路由、域间路由、一类外部路由和二类外部路由。
以下是OSPF协议中Hello报文的结构,通过Wires hark进行分析可以看出Hello报文中每个字段的值,但由于篇幅有限,在此不作赘述。总之,通过对协议的分析和解释,我们可以很好的理解OSPF协议的工作原理和运行机制。
图 2 Hello报文的结构
OSPF是目前使用最广的一种内部网关路由协议,被广泛应用于企业的核心网络当中,作为网络运维人员必须要很好的掌握。本文介绍了OSPF协议仅仅是基本的原理和配置方法,部分高级原理并未涉及,望读者能够先夯实基础,多做实验,通过不断的练习最终达到掌握OSPF协议的目的。