网络基础知识讲座十五:OSPF路由协议进阶


OSPF,这一众人心目中的IGP,其具体细节则有些复杂,不过奇怪的是,人们还都挺满意。了解其工作原理之后,我们感到疑惑的是:我们还需要什么?在开始这趟可能让你困惑的旅程之前,最好复习一下第一部分的内容。

本文将阐述LSA的类型、数据包类型和区域类型。不过首先要澄清关于动态路由的一个普遍误解:

人们常喜欢调盲目高速流量设置,即使他们的问题事实上与此无关。在OSPF网络中,除了调整metric值,你并没有其它方式来影响路由的工作模式。一些路由器支持对路径的weights参数做修改,但通常不需要这样做。OSPF一般会根据路由器上接口的速度考虑分配weights,如果有两条链路通往同一目的地,而你在它们上面做负载平衡,那么也可以在OSPF中采用ECMP(等价多路径)。不要试图乱改OSPF参数;如果你认为有问题,那多半是网络设计的问题,只要修改网络设计就可以解决。

LSA和数据包

要理解OSPF对网络的影响,关键是要认识到有多种类型的LSA。数据包每隔几秒都会更新并发送出去,从而刷新LSA数据库,并且还可能改变路由表。“new”类型的LSA会令每台路由器丢掉自己原来的路由表,开始进行SPF(最短路径优先)计算。

LSA包含5种不同的数据包类型。Hello和数据库描述信息已在第一部分介绍过,它们用于“建立相邻关系”。第三种OSPF数据包是链路状态请求,第四种是链路状态更新,而第五种则是链路状态ACK(命令正确应答)。OSPF在第4层协议上实现,所以直接位于IP最上端。OSPF没有用到TCP和UDP,因此为实现可靠性它有一个校验和(checksum)以及自己内置的ACK。为了能够通过查看流量来解决问题,我们必须知道OSPF的多点传送地址是224.0.0.5,而每台DR之间则用224.0.0.6进行对话。

即使采用现在最新式的路由器,在一个网络拓扑中要计算出最短路径也非常困难,并且要花相当长的时间。幸运的是,Edsger W. Dijkstra用他的SPF算法改善了这一问题,不过还是麻烦。这正是OSPF不能用于Internet 的主要原因,另外也不要把整个BGP边界网关协议)路由表一股脑都交给OSPF,那太耗时了.每次增加或删除网络时,都会进行SPF计算。

不要被另一种“类型”搞糊涂了,OSPF有很多类型,所以一定要注意你所指的“类型”。LSA可以是更新的数据包,或者请求数据包,这些是可以发送的不同类型LSA,是第三类或第四类OSPF数据包:

第1类:路由器LSA。该数据包描述路由器自身以及相邻路由器的接口信息。

第2类:网络LSA。仅用于广播网络信息;该LSA由DR更新,包含网络上OSPF协议路由器列表。

第3类:网络汇总LSA。通过ASBR发送,广播所连接的网络信息。Stub区域路由器也会把它作为缺省路由信息。

第4类:ASBR-汇总LSA。由ASBR发送,但仅限内部。它告诉其它路由器如何仅用内部metric连接ASBR。

第5类:AS-外部LSA。用于描述连接内部区域的外部路由信息,表示“这条路通往Internet(或其子网)”。

第6类:Group汇总。用于多点传送(MOSPF)。不用管它。

第7类:NSSA区域导入。

注意我们同时拥有一个路由器LSA和一个网络LSA。而路由器LSA存在的原因是没有DR就不会发送网络LSA。路由器LSA包含网络上所有通往其它路由器的链路信息,这样没有DR或BDR时,OSPF也能正常工作,不过因为没有DR传送正确的汇总信息,情况会更加复杂。

区域

在第一部分我们已经说过几种类型的OSPF区域,也稍微介绍了一下主干区域(BA,也称为区域零)的概念。其实只有两种类型的区域:与区域零相连的普通区域,以及不与区域零相连的Stub区域。Stub区域不接收外部LSA,也不传送数据包。它只有一个出口,即通过它所相连的区域,这就意味着Stub区域内任何内部路由器不需要重新计算SPF。

好的,上面已经提到NSSA,所以不跟你玩文字游戏了,实际上还有一种区域:Not So Stubby Area。它与Stub区域的唯一不同之处在于NSSA可以发送第7类LSA输出内部路由信息。有意思的是,这种类型的LSA会由ABR转化为第五类(AS-外部)LSA,因此NSSA会向整个OSPF域发送一些具体的路由信息。你可以把它当成一个ASBR:它能向主干区域发送一些AS-外部路由信息,方法可能是在内部运行另一种路由协议,如RIP或BGP。NSSA路由器与区域(不是区域零,而是Stub区域)相连,无法接收AS-外部路由信息,只能发送。

下面就要让你真正感到困惑了。假如我们有一个NSSA因为物理位置原因无法与区域零进行物理连接,那么你可能想让上面所说的Stub区域位于区域零上。或者,你想让非主干区域上的两个Stub区域无需连接区域零而进行对话,因为如果通过主干区域就太耗时耗力了。这时虚拟链路可以把你从蹩脚设计的梦魇中拯救出来,虚拟链路在路由器之间建立隧道,两端的路由器之间就形成虚拟的相邻关系,并且可以相应调整自己的路由表。

OSPF非常能干,我甚至见过将OSPF用于获得高度可用性的失效自恢复设计。运行OSPF的路由器会自动检测路由是否丢失(因为运行ospfd的主机停止了响应),并且将不再向该主机发送数据流。这对工作安全很有益处,不过如果它在凌晨2点出了故障,而你又是唯一懂得OSPF的人,那可就糟糕了。不过认真来说,OSPF确实力量强大,主要是因为其收敛速度很快,使用的带宽又很小。在内部路由协议中还没有什么可与OSPF匹敌的。

小结

设计精良的网络无需“调整”即可超越路由协议本身所拥有的能力。

OSPF支持一些奇怪的配置,如NSSA等。尽量不要使用Stub区域,即使大型网络也尽可能避免。

关于类型:有OSPF数据包类型、LSA类型,以及路由器类型。看,多么有趣啊。

网络基础知识讲座十四:OSPF路由协议初步
网络基础知识讲座十三:路由信息协议(RIP)
网络基础知识讲座十二:路由协议基础知识
网络基础知识讲座之十一:互联网的管理架构
网络基础知识讲座之十:TCP协议理解进阶
网络基础知识讲座之九:初步理解TCP协议
网络基础知识讲座之八:初步理解IP协议
网络基础知识讲座之七:理解和使用ICMP协议
网络基础知识讲座之六:实现子网包括IPv6)
网络基础知识讲座之五:学习生成树协议
网络基础知识讲座之四:理解数据链路层
网络基础知识讲座之三:理解OSI网络分层
网络基础知识讲座之二:理解子网和CIDR
网络基础知识讲座之一:理解IPv4地址的含义

相关内容