首页 > 技术文章 > OSPF详解

zhangyandong 2021-05-24 09:57 原文

这篇文章将会让你对OSPF有一个大概的认识,仅仅是个认识,下面进入正题。

OSPF它是一个链路状态路由协议,运行OSPF的路由器它是知道知晓整个网络拓扑结构,这就使得它不易发生路由环路,它本身也支持VLSM,路由汇总,它还引入了Area(区域)的概念使得OSPF能够支持更大规模的网络。OSPF它只要分为两个版本一个是针对IPV4的OSPFv2,一个是针对IPV6的OSPFv3。

OSPF的一些重要概念

Router-ID它是一个长度为32bit数值,用于OSPF域中唯一标识一台OSPF路由器。

MA(多路访问)网络:指在同一个共享介质中连接着多个设备的网络,任意两台设备之间都可以实现二次通信。

DR与BDR:OSPF会在每个MA网络中选举一个DR(指定路由器)和一个BDR(备用指定路由器),DR主要是负责监听网络拓扑中变更信息并通知给其他路由器,BDR主要监视DR状态并在DR发生故障后接替它的工作。

邻居表:当一个接口激活OSPF后,该接口将会周期性地发送hello报文从而发现直连路由上的邻居,当发现邻居后邻居信息(它包括Router-ID,address,DR,BDM,MTU,等)就会写入OSPF邻居表。

LSDB(链路状态数据库):运行在链路状态协议的路由器在网络中泛洪的状态信息即LSA(路由状态通告)路由器将所有收集到的LSA装载到自己的LSDB,所有你可以把它看做成一个集合,而他的子集就是LSA。你也可以把它看做一个对OSPF网络的一个完整的认知。

OSPF路由表:它是根据LSDB的数据运行SPF算法得到一颗以自己为根,无环的最短路径树。基于这棵树能够到达网络的最佳路径,从而得到的路由信息就组成了OSPF路由表。

度量值:OSPF使用Cost(开销)作为它的度量值。值越小路径越优。

报文类型:报文类型分为五种主要有hello报文,DD报文,LSR报文,LSU报文,LSAck报文。

邻居关系:在通过Hello报文发现彼此并确定双方通讯后,边形成了邻居关系。

邻接关系:在邻居关系的基础上,两台设备交互DD报文,再交互包含LSA头部的DD报文,再通过LSR交互LSA,完成LSDB同步后,两台设备形成网络拓扑的一致性,并开始独立运算路由时就形成了邻接关系。

网络类型:OSPF的很多功能和特性都是基于接口实现的,一个OSPF接口激活后会维护很多变量,在不同的网络类型的接口上OSPF会有不同的操作。而OSPF的网络类型有点对点网络,广播性多路访问类型,非广播多路访问类型,点对多点类型。

区域:在一个较大规模的网络中我们会把OSPF划分成多个区域,同一个区域的设备会维护同一个LSDB,每个区域都会独立SPF运算。

OSPF路由器的扮演的角色:在整个OSPF网络中OSPF路由器所扮演的角色有内部路由器,区域边界路由器,骨干路由器,AS边界路由器等。

OSPF协议特性

路由汇总:当网络规模很大时IP网段就会很多,路由表就会变得臃肿,就会消耗太多的路由器资源,为了避免我们使用路由汇总,是将一组路由汇聚成一条路由,进而达到减小路由规模优化设备资源利用率的目的。

Virtual Link(虚链路):OSPF规定网络中存在多区域必须部署骨干区域Area0,如未连接LSA泛洪就会出现问题,当遇到网络不易做大的变动但是此网络必须连接到Area0时就可以使用Virtual Link,它是一种虚拟的,逻辑的链路,被部署两台OSPF两台路由器中间,注意Stub区域千万不能部署Virtual link。

点对点类型网络:

广播型多路访问类型:

非广播型多路访问类型:

点对多点类型:

 

OSPF运行的基本原理

路由器建立邻居关系与邻接关系的工作原理:

邻居关系建立:当网络中的路由器接口被激活时就开始发送组播hello报文。当一个激活OSPF接口接受到时,先对报文进行检查比如说网络掩码的一致性,路由器失效间隔对应字段等等,如果检验合格,接受报文的路由器(R1)会将发送hello报文的路由器(R2)设置为Init状态,。之后R2会发送自己的hello报文这个报文的邻居字段就是R1的Router-ID,R1收到R2的hello报文后就会自己的Router-ID,R1知道R2发现自己了,并认可R2发送的hello报文中的相关参数,于是R1将R2添加到自己的邻居表并把R2的状态设置为2-way,随后R1在自己发送的hello报文中添加R2的Router-ID并发送。R2收到后R1的hello报文后就将R1的状态设置为2-way。到此R1与R2的邻居关系就建立了。

邻接关系的建立:当路由器双方建立了邻居关系后,紧接着建立邻接关系。接下来R1与R2进入ExStart状态下交互空DD报文以便协商Master/slave,而Master与slave角色的决定是由Router-ID决定,Router-id(R1)大为master,R1收到DD报文接受自己并非master路由器,然后将R2状态切换为Exchange并发送带有LSA头部的DD报文,R2收到R1的DD报文后将R1状态设置为Exchange,随后R2就也开始发送DD报文,当R1,R2交互完最后一个报文后便彻底了解对方LSDB中所包含的LSA,此时他们要从对方获取他们需要的LSA,此时R1与R2进入loading,接下来便是数据库同步双发发送相互需要的LSA。LSR用于请求需要的LSA,LSU用于回应对方的请求,而LSACK用于对对方回应的LSU报文进行确认操作,直到LSDB完成同步。知道双方发现没有其他LSA需要从邻居获取后双方的状态切换为Full。

推荐阅读