通俗的讲一些OSPF的基础知识

  • Post author:
  • Post category:其他



关于OSPF:

OSPF(Open Shortest Path First,开放式最短路径优先)协议。是一种基于链路状态的、开放的、最短路径优先的路由协议。是一个运用在同一AS内的内部网关协议,即IGP。



关于OSPF的出现:


OSPF协议是IETF组织开发的,在OSPF出现之前,RIP作为最被广泛使用的IGP。但是由于RIP的特性,存在着收敛速度慢、路由环路等问题。最终OSPF的出现,也解决了前面的这些问题。而RIP也完全被OSPF取代。



关于OSPF的显著特点:

算法优势明显。采用更加合理的SPF算法,即Dijkstra算法。

网络适应性强。支持基于ip协议的多种不同类型的网络,可支持更大规模的网络环境。

区域划分、路由划分、路由器角色划分。一台路由器上支持多种OSPF路由进程,还可以把一个自治系统划分为多个区域,再划分多种不同的OSPF路由类型及OSPF路由器角色。



说一下OSPF的特点?

OSPF作为一种动态路由协议。当然,只能存在于同个自治系统。就如同这套法律只存在于某国。你只有加入某国,换句话说你拥有了某国国籍,才成为了某国的公民,拥有法律带给你的种种权益。当然,在这里我们把某国理解为一个自治系统。不同自治系统之间的交流也可以理解为不同国家之间交流。而到那时候则需要BGP协议等来帮忙了。

当然,就上面的例子,一个国家是可以发展到很大的。就像现在,我国已然是很大了。无论各种方面。在此时,你会发现,管理一个小国,很简单。就如同,我们或许玩过文明这类的游戏,一开始你管理的只有一个城市、些许人口。越到后面,一个回合你需要管理数几个城市,甚至更多,特别繁琐。内部的路由信息也是如此,随着网络的变化,路由信息也可能会爆炸增长。我们需要一些特定的路由器角色,就如同任命一个城主,帮你管理一个城市。而在这种情况下,你会发现一些区域,其实是不重要的。当然,这里说的不重要,指的是特定情况下的一些需求,是不太重要的。就如同藏宝阁,我们不需要将这里建设一个华丽的大门、不需要外来游客在这交谈、不需要铺设绿植、也更加不需要铺满便于交通的设备及道路。我们只需要安全、稳定、限制人流、拒绝闲杂人等的来访。而OSPF也支持这样的特殊区域划分、多区域划分、不同类型的区域划分。

在许久之前,内部网关协议通常采用的RIP,但是随着时间发展,慢慢暴露出了许多问题。如收敛慢、路由环路、可扩展性差,其实一个基于距离矢量算法的路由协议,对于这些问题的出现,我们当然可以归罪于网络的高速发展,只是开个玩笑。虽然通过后期的更新、维护及升级,已经可以解决大多数带来的问题。但OSPF的发展实在太过迅猛。最后RIP还是不免面临被时代淘汰的抉择。而OSPF的出现,即解决了曾经采用RIP的所带来的种种问题,而解决掉的问题,也可以成为他的特点。就如同上面所说,特定路由器角色划分、特定区域划分以及解决了RIP的残留问题,当然可以是他的特点,但却远远不至于此。



关于OSPF的信息交互:

OSPF是通过LSA,也就是链路状态通告报文,来进行路由信息交互。

而后再通过Hello、DBD、LSR、LSU、LSAck五种报文进行建立邻居及邻接关系,以及同区域内各路由器之间的LSDB信息同步,即是链路状态数据库信息同步。最终区域内形成统一的拓扑数据库。



关于建立邻居关系的过程:

我一睁眼,啥都看不见。我直接大吼一声:“歪歪歪!我是Eevee。有人吗?有人吗?歪歪歪!”

此时角落突然一个声音传来。Eevee,我听到你的声音了。我是Pikachu,还有其他人吗?皮卡,皮卡!

我一听。居然有只野生的皮卡丘,为了让它知道我听到它的声音了,并且看看附近还有没有其他奇奇怪怪的东西。我又再次大吼:“歪歪歪,还有野生的宝可梦或是人吗?我和皮卡丘在这里。”

皮卡丘听到我说的话里带有它了。此时,我和皮卡丘已经进行了一次双向确认,确认我们两个都在这个地方。



下面用R1及R2举例,再说一遍这个过程:

  1. R1以组播方式向所有的邻居设备发送 Hello报文,此时状态机为Down。
  2. (R2收到了R1的hello报文)此时,R2又以组播的方式向所有邻居设备发送带有自己及Neighbor字段中封装R1的RouterID的Hello报文,此时接收R1的报文的接口状态机转换为Init状态。
  3. (R1收到了R2的Hello报文)发现此时,R2的报文中Neighbor字段中带有自己的Router ID,所以直接将接到该报文的端口状态机改为2-way状态。与此同时,R1又从接受到的Hello报文中,获取R2的Router ID,并添加到邻居列表中。然后继续组播发送Neighbor字段中带有R2其Router ID的Hello报文
  4. (R2收到了R1的Hello报文)R2发现里面的Neighbor字段中已经带有自己的Router ID。这时,双向的2-way邻居关系建立成功。


OSPF状态机(一):

在介绍进一步的邻接关系时,需要先介绍一下状态机。共有8种,Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full,他们分别代表了在建立邻居及邻接关系时,路由器的接口状态转换过程。

首先我们要说的是Down、Attempt、Init、2-way,前四个状态机,它们出现在建立邻居关系的阶段,即是上面那个过程。

Down可以理解为就初始状态。

Attempt只出现在NBMA网络中,这里先不细说,就如同上面的过程中并没有出现,因为上面的例子是大吼,其实代表的是广播类型网络。

Init则是当设备收到了不带有自己Router ID的Hello报文后的状态。在上面的例子中,Pikachu第一次听到了Eevee发出的声音,或是R2第一次收到R1的Hello报文,此时Pikachu及R2的状态机则为Init。当然状态机是基于接口的,就如同OSPF的边界划分也是。所以你可以理解为,Pikachu有可能右耳被剁掉了,或者它右耳听不见,所以它是左耳听见的声音,所以只有它的左耳,接受到了Hello报文。所以,我们只要理解为状态机是接口的状态。

接下来是2-way,这个状态分为2步。第一步的形成可以用上面的R1、R2的过程3来理解,即为R1收到了R2的Hello报文,报文里还带有自己的Router ID。此时,R1已经确认R2收到自己的Hello报文了,R1将收到信息的端口状态机更改2-way。第二步,在上面R1、R2的过程4里,R2收到了R1发出的带有自己Router ID的Hello报文后,就知道,前面的信息双方都合理收到了,此时R2也把收到信息的端口状态机更改为2-way。而这时,双方已经成功建立双向邻居关系。请注意,双方发出及接收的报文皆为Hello报文,即为在建立双向邻居关系的整个过程里,只产生Hello报文。

接下来的将会涉及OSPF协议中的其他报文类型。所以,需要先了解OSPF主要有哪些报文。



OSPF协议报文:

OSPF报文最主要的有5种,Hello报文、DD报文、LSR报文、LSU报文、LSAck报文。

DD报文,也有许多教材、文章称之为DBD报文。为什么会导致这样的情况,那就得看它的全称了。Database Description,即数据库描述报文。这样是不是感觉一切都合理了。DD报文主要用于描述本地LSDB中包括了哪些LSA。当然,DD报文不会直接将自己LSDB里的所有LSA的完全信息都描绘在DD报文里。可以理解为,DD报文只会描述自己LSDB里所有的LSA的描述信息,具体的信息将在双方确认差异后,用LSR报文来请求。

LSR报文,链路状态请求报文。LSR报文的出现,就代表着双方路由器已经交换完DD报文了。我方路由器发现,你有一些LSA是我的LSDB没有的。这时,我发送一个LSR报文给你,向你请求我所想需的LSA。

LSU报文,链路状态更新报文。此时,你收到了我发来的LSR报文,里面写着多条我所缺的LSA信息。这时你用LSU报文对我的LSR报文进行回答,即为对我的请求报文进行应答,发送出链路状态更新报文。此时,你发出的LSU报文里将带有我所需的LSA完整内容,而不再是描述内容了。

LSAck报文,链路状态应答报文。这时,我收到了你发来的LSU报文。确认完毕后,我需要表示我已经收到了这些LSA的完整内容了。我便给你回复一个LSAck报文,以表我收到了。

当了解完这些报文后,我们仍旧不能去了解剩下的四种状态机。因为在这上半部分及下半部分的状态机转换过程中间,还有一个DR、BDR的选举。



关于DR、BDR选举:

首先我们要明确为什么要存在这个指定路由器。原因很简单。举个例子,现在开着会,大家都有自己的想法,全部人争先恐后发表自己的不当言论。一时间,你会发现,你的耳朵快被这些噪音炸裂。所以,在某些会议召开之前,已经确定好,谁来演讲、谁来控场。就像老师指定学习委员,由他收作业。指定班长,由他统计所有同学的信息,再汇总给老师。这样的好处,不言而喻。

其实还有一个方面,就是选举出DR或者是BDR才能进一步完全的邻接关系。还有就是DRother,即非DR及BDR的路由器,只会与DR及BDR建立邻接关系,是不会其他邻居建立起邻接关系的。

作为DR,当然要负责之后的交互了。正所谓,能力越大责任越大,所以他性能理应比其他设备好,优先级更高。当然,也不一定。那么,BDR是什么呢?其实就是备胎,当有一天,DR被无情资本家压榨光最后一滴后,他倒了,永垂不朽。此时,BDR把握住了机会,一举成为了DR。当然,这时又会选举一个新的BDR,继续这个轮回。而且我们需要知道,除了你被压榨干净了,倒下了。或者你直接把自己给关了,不干了。除开这些,是不会有人抢走你的位置的。无论有一个新的设备,他优先级多高。他只能在DR倒下后,去选举BDR的位置。所以先到先得。当然,对于那些不想被压榨的,不参加选举也是可以的。



OSPF状态机(二):

在经过了上面邻居建立及DR选举的过程后,双方皆进入ExStrart状态。在这之后,双方开始以DD报文进行交互,而Hello报文已然成为了过去式。这一步,主要是为确定主从关系。

确定了主从关系后,则将接口更改至Exchange状态,并准备同步数据库。

当主设备发送完毕带有LSA头部字段的DD报文后,主设备将接口状态更换为Loading。而从设备在收到主设备发来的最后一个DD报文后,也将接口状态更换为Loading。此时,从设备开始查看主设备发来的DD报文中的那些LSA头部信息,检查有没有自己需要的。如果有,则发送LSR给主设备去请求相应的LSA。主设备收到后,则发送LSU。当从设备收到后,则回复LSAck表示确认。

当然,需要知道的是,主从角色是不固定的。双方都有可能成为接收方、也可能成为发送方。取决于,你所持有的LSA。

上面的阶段反复进行,在双方的LSDB完全同步后,双方均为Full状态,此时双方的接口也建立了完全邻接的关系。



写在最后:

本文撰写并不专业,只是一名并不完全精通的学生,用较直白的语句,片面的描绘了一些浅析的理论知识。当然,可以当作是一个小笔记,图一乐就行。

如有错误的地方,请大胆指出。 如转载,请标明出处。

如果有人十分无聊,阅读至此。或者你看完,发现需要更加详细的知识、专业的知识,我的建议是立即购买一本路由器学习指南进行学习。当然,电子书也是极为方便的。



版权声明:本文为weixin_44298597原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。