OSPF路由协议是一种开放式最短路径优先协议,它更是一种链路状态路由协议。而所谓的链路状态,主要是指链路状态信息,包含接口IP地址、网络类型、接口对象、对端IP地址、接口的开销等等。
我们的OSPF路由协议就可以根据这些链路状态信息和SPF算法计算出全网的拓扑,简单来说就是OSPF可以以此获得一张全网地图,最后路由器就可以根据这张全网地图来转发我们的数据报文。
这篇文章就是一个关于OSPF的总结和概括,关于OSPF,我主要是用了1~7个数字来概括它的绝大多数内容,是的,绝大多数,不是所有,因为目前该文章内容只是涉及到IA内容。
一、一种协议
“1”就是指我们的一种协议,OSPF协议。除此之外,“1”还包括OSPF学习过程中涉及到一些名词概念。比如,LSA,LSDB和Router ID。
LSA,就是我们在上面提到的链路状态信息,全英文是link State Advertisement,这里不再重复赘述。
LSDB,link State Database,即链路状态数据库,是运行OSPF协议的每台路由器都会有的,主要作用就是存储自己和其它路由器的LSA。
Router ID,这是路由器的标识符,作用就是用来唯一标识一台路由器,它的产生有几种方式,并且优先级不同,首先是经由我们网络管理员手工配置,若没有手动配置的Router ID,选取Loopback接口上最大的IP地址作为Router ID,若连Loopback接口都没有配置,则选择已经配置IP地址的接口上数值最大的IP地址作为Router ID。
值得注意的是,Router ID是一个32bit的无符号整数,所以不一定是路由器上的接口IP地址,只要它的范围是从0.0.0.0~255.255.255.255就可以了,之所以我们经常将Router ID和接口IP地址联系在一起,则是因为它独特的选举机制。
二、两层结构
“2”主要是指OSPF的分层结构,可以说是OSPF将网络分成了骨干区域和非骨干区域。非骨干区域必须和骨干区域相连,非骨干区域之间不可以连接,这是为了防止环路的产生。
虽然在以后的进阶学习中,会有一个叫虚连接的方法来解决非骨干区域没有和骨干区域连接在一起的问题。但IA阶段中,非骨干区域和骨干区域直接相连是毫无问题的。
三、三张表/三种身份
“3”主要是指三张表和三种身份。
1、三张表
三张表包括OSPF邻居表、OSPF拓扑表和OSPF路由表。
OSPF邻居表就是用来记录路由器邻居关系的表,包括邻居的相关描述和状态。也就是说可以用邻居表来显示该路由器与哪些设备建立邻居或邻接关系,我们可以用display OSPF peer来查看这张表。
OSPF拓扑表,也被叫做LSDB表,这张表存储了当前区域的所有链路状态信息,用来计算OSPF的最优路由。
而OSPF路由表记录根据LSDB的链路状态信息和SPF算法计算出来的最优路由,这些路由将有可能作为最优加入该表。
这里需要注意,OSPF路由表不是我们的全局路由表,我们使用display ip router-table查看的就是路由器的全局路由表,它保存的是根据所有途径学习到的最优路由,而OSPF路由表存储的是根据OSPF协议计算到最优路由。
2、三种身份
三种身份则是指运行了OSPF协议路由器的身份,主要是DR,BDR和DRother。
首先明确OSPF需要为路由器划分身份的背景。假设没有对运行OSPF协议的路由器进行任何的配置,那么整个网络中,所有运行OSPF协议的路由器两两之间都会建立起邻居和邻接关系,它们之间都会互相发送和学习报文,那么可能就会造成一种重复学习的现象。
类似于教室中,学生A把他的笔记给了学生B和学生C进行抄录,然后学生B又将他的笔记给了学生A和学生C抄录。在这个过程中,学生B的笔记是已经包括了学生A的,那么学生A和学生C就会不得不再次抄录一遍最开始学生A的笔记,这就是重复学习。
然后为了防止路由器之间重复学习造成的资源浪费问题,OSPF就给路由器划定了角色,也就是DR,BDR和DRother。
这三种角色类似于组长,副组长和组员的关系,其中DR是组长,BDR是副组长,DRother则是组员。之后当组员需要交换笔记的时候,就只会把笔记提交给组长和副组长,然后由他们把笔记分发给各个组员,而组员之间不能够互相交换笔记。
这就是我们DR和BDR的作用,也就是之后OSPF网络中,DRother的路由器只会把LSA信息提交给DR和BDR,然后由他们进行分发,而DRother之间不会传递LSA信息。
其中DR和BDR的选举首先是根据接口的优先级来选的,不过路由器接口的优先级一般默认都是1,所以接下来就会根据Router ID来进行选举,Router ID大的优选。
需要注意的是,接口优先级的取值范围是0-255,为0时,表示当前路由器不参加选举。而且,当选举已经结束,再加入新的设备,即便新设备的优先级更高,也不会重新选举DR和BDR,DR不故障,就不会选举DR,DR故障后,只会是BDR成为DR,再竞选新的BDR。
四、四种网络类型/四种路由器类型
“4”主要包括四种网络类型和四种路由器类型。
1、四种网络类型
四种网络类型,分别是Broadcast,NBMA,P2MP和P2P。
这四种网络类型主要影响OSPF在接口上的操作,例如采用什么方式来发送OSPF协议报文,以及是否需要选举DR和BDR。
首先是Broadcast,广播多点可达,当链路层协议是Ethernet时,OSPF默认的网络类型就是这个,这个时候需要选举DR和BDR。
接着是NBMA,非广播多点可达,该网络类似是取消了广播报文的广播多点可达类型,当链路层协议是帧中继类型,OSPF默认的网络类型就是此项,这个时候也是需要选举DR和BDR。
第三个是P2MP,点到多点网络,该网络类型必须由其它网络类型更改的,一般是由NBMA网络类型更改过来的,不需要选举DR和BDR,这是为了加快OSPF网络中邻居的建立速度。
第四个就是P2P,点到点网络,当链路层协议是PPP时,OSPF默认的网络类型就是这个,这个时候不需要选举DR和BDR。
2、四种路由器类型
接着是四种路由器类型,这是根据OSPF网络的分层结构进行划分的。
首先是区域内路由器,IR,路由器所有接口都是在同一区域中的路由器。
接着是区域边界路由器,ABR,是连接骨干区域和非骨干区域的路由器。
然后是自治系统边界路由器,ASBR,是与其它自治系统交换路由信息的路由器。
最后是骨干路由器,BR,有接口在骨干区域中的路由器。
五、五种报文
“5”即五种报文:Hello报文,DD报文,LSR报文,LSU报文和LSAck报文。
Hello报文,它的作用就是发现、建立和维护邻居关系。
DD报文,全英文是Database Description,就是描述链路状态信息,用于选举主从以及携带LSA的摘要信息。
LSR报文,link State Request,链路状态请求报文,根据对方发送过来的DD报文的摘要信息,请求获取自己没有的LSA信息。
LSU报文,link State Update,链路状态更新报文,根据对方发送过来的请求,向对方发送相应的LSA信息,此时LSA信息是完整的。
LSAck报文,链路状态确认报文,回复对方自己收到了LSA信息,如果对方长时间没有收到LSAck报文,对方就会重新发送LSU报文。
六、六种LSA
“6”即六种LSA信息。正如我开篇所说,该文章是对IA阶段内容的概括,而这六种LSA是更高阶的内容,所以这里为了文章的完整性,只是稍微提及一下,不会作详细的赘述。
七、七种状态
“7”指七种状态,即运行OSPF的路由器之间建立邻居和邻接的过程中,路由器所需要经历的状态变化过程。
严格来说,路由器的状态应该是8种,不过多的这一种只会出现在NBMA网络中,应用极少,且该状态的作用和当中其它的某种状态也是相同的,所以我最后只是用了7种状态而不是8种状态,不过我会在文章的最后对此状态作补充。
首先是第一种状态,Down状态,即关闭状态,这也是路由器的第一个稳定状态,即不会随便发现变化的状态,该状态表示当前接口没有收到任何的Hello报文。
然后当路由器收到其它路由器发送过来的Hello报文之后,就会进入Init状态,这是一种单方发现状态,该状态表示已经收到其它路由器发送的Hello报文,但在对方的Hello报文的邻居表中没有看到自己的Router ID,也就是对方还不知道我是邻居。
然后当两边路由器相互发送Hello报文,建立起邻居关系之后,就会进入2-way状态,这是邻居状态,也是第二个稳定状态,表示路由器建立邻居关系成功。
之后当路由器之间想要同步LSDB数据库时,路由器首先会进入ExStart状态,该状态表示路由器和它的邻居路由器开始协商主从关系,也就是协商谁先发送报文。
协商完成后,路由器就正式进入Exchange状态,该状态表示路由器的主从关系已经确认,开始正式交换DD报文,此时的DD报文主要包含路由器的LSDB的摘要信息。
然后就会进入Loading状态,该状态中,路由器会比较DD报文和自己的LSDB信息,如果DD报文中存在LSDB不具有的LSA信息,则向邻居发送LSU报文请求该LSA的完整信息。
之后当LSA信息交换完毕,也就是LSDB同步结束,路由器就会进入最后一个状态——Full状态,即邻接状态,也是第三个和最后一个稳定状态,该状态就是表示路由器的LSDB同步已经完成。
之后,建立起关系的路由器之间就只会周期性发送Hello报文来维护彼此之间的关系。
这就是运行OSPF协议的路由器之间建立起邻居或邻接关系所需要经历的七种状态。
然后是只会出现在NBMA网络中的第8种状态,Attempt状态,该状态和Init状态类似,当路由器发现了Hello报文,但还没有收到对方回应的报文的时候,路由器就会处于这种状态。