目录
一、OSPF协议基础
1.诞生
OSPF协议是IETF组织开发的一个基于链路状态的AS内部的IGP(内部网关协议),广泛应用在接入网和城域网中。在OSPF出现之前,网络上广泛应用RIP作为内部网关协议。但是由于RIP是基于距离矢量算法的路由协议,存在收敛慢、路由环路、可扩展性差等问题,逐渐被OSPF取代。
AS介绍:是指一个单一实体管理的网络。这个实体可以是一个ISP或一个大型机构、一个企业。每个AS有唯一的编号,但是与IPV4一样,有公用和私用之分,共用AS是在Internet公网中使用,全球唯一,私用AS是在内部网络使用的,仅要求在同一组织网络内部唯一,不同组织可以重复使用相同的AS编号。现在的AS内部可以运行多个路由协议。
2.OSPF表项
(1)OSPF邻居表
邻居之间交互链路状态信息之前,先要建立OSPF邻居关系。邻居关系是通过交互Hello报文建立的。可以通过display ospf peer命令查看OSPF路由器之间的邻居状态。
(2)LSDB表
LSDB中保存着自己产生或从邻居收到的LSA(链路状态通告),但并不是所有LSA均可在整个网络中传播,具体要由LSA的tpye类型而定。可以使用display lsdb命令查看本地路由器上的LSDB表。
(3)OSPF路由表
OSPF路由表中包含了本地LSDB中LSA为素材,SPF(最短路径优先)为算法生成的各OSPF路由表项,可以使用display ospf routing命令查看本地OSPF路由表。
3.OSPF主要特点
(1)OSPD是一个基于链路状态的路由协议,从设计上保证了无路由环路
(2)OSPF支持区域划分,区域内部的路由器使用最短路径算法,保证了区域内部的无环路,OSPF还利用区域间的连接规则保证了区域之间无路由环路。
(3)OSPF支持触发更新,能够快速检测并通告自制系统内的拓扑变化。
(4)OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围,这种分区域特点,使得OSPF适用于大中型网络。
(5)OSPF可以提供认证功能,防止非法路由器接入。
二、OSPF路由计算器基本流程
OSPF直接运行在IP上,使用IP号89号,是一个网络层协议。目前OSPF包含两种版本:一种是使用IPV4的OSPFv2和使用IPV6的OSPFv3一下主要介绍应用于IPV4的OSPFv2。
OSPF要求每台运行OSPF的路由器都能了解整个网络的链路信息,这样才能计算出到达任一目的地址的最优路径,OSPF把AS划分成逻辑意义上的一个或者多个区域,在一个区域内部,OSPF路由计算的基本流程如下图。
1.LSA泛洪
LSA中包含了路由器已知的接口IP地址、子网掩码、开销和网络信息等。收到令居发来的LSA的路由器可以根据LSA提供的信息建立自己的LSDB。
2.运行SPF算法
收到LSA的路由器,以自己为根,以其他路由节点为叶子进行SPF运算,建立达到每个网络的SPT(最短路径树)。
3.路由计算
通过STP得出到达目的网络的最优路由,并将其加入IP路由表,指导到达对应目的网络的IP数据包转发。当然,生成的OSPF路由表项最终是否可以加入IP路由表还要经过路由选优策略进行决定。
三、OSPF Router ID
为了区别LSDB中不同路由器的链路状态信息,OSPF网络中每个路由器都需要有唯一标识Router ID。
1.Router ID的作用
用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数,格式和IPV4地址的格式一样,Router ID可以针对不同OSPF路由进程分别进行手工配置,但如果没有手工指定,系统会从当前OSPF路由进程中自动选择一个接口的IP地址作为Router ID。
2.Router ID选举规则
(1)优先从Loopback地址中选择最大的IP地址;
(2)如果没有配置Loopback接口,则在其他接口地址中选取最大的IP地址。
推荐使用Loopbakc 0地址作为路由器的Router ID。
以下三种情况会进行Router ID重新选举
(1)系统视图下执行ospf [ process-id] router-id router id 命令重新配置OSPF的Router ID,并且重新启动OSPF进程。
(2)系统视图下执行Router ID命令重新配置系统的Router ID,并且重新启动OSPF进程。
(3)原来被选举为系统的Router ID的IP地址被删除并且重新启动OSPF进程。
四、OSPF报文类型
OSPF把自治系统划分成逻辑意义上的一个或者多个区域,路由通过LSA的形式发布路由信息,然后各台设备在OSPF区域通过各种OSPF报文的交互传达到区域内路由信息的统一,最终区域内部路由器构建完全同步的LSDB。因为OSPF是专为TCP/IP网络设计的路由协议,所以OSPF是封装在IP报文内的,可以采用单播或者组播的形式传播。
1.Hello报文
hello报文用于建立和维护邻居关系,使能了OSPF功能的接口会周期性地向OSPF邻居设备发送hello报文,hello报文包括一些定时器的数值、本网段中的DR、BDR以及已知的邻居信息。
2.DD报文
两台路由器在领接关系初始化时,DD报文(或者DBD报文)用来协商主从关系,此时报文中不包含LSA头。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文,序列号+1,Slave方使用Master的序列号作确认。
邻接关系建立之后,路由器使用DD报文描述本段路由器的LSDB,进行数据库同步。DD报文里包括本地LSDB中每一条LSA头部(LSA头部可以唯一标识一条LSA),即所有LSA的摘要信息。LSA头部只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据收到的DD报文中包含的LSA头部就可以判断出是否已有这条LSA,如果已有该LSA,则不用再通过LSR报文向对方请求该LSA。
3.LSR报文
两台路由器相交换过DD报文之后,需要通过向对端OSPF邻居设备发送LSR报文请求对端有、而本端没有的LSA,LSR报文里包括需要的LSA的摘要信息,即也包含所需LSA的头部。
4.LSU报文
这个报文是用来对收到的LSR报文响应的,向对路由器发送对端在LSR报文中所请求的LSA,或者主动向OSPF邻居设备泛洪本端的LSA,其报文内容是多条完整的LSA的集合。
5.LSACK报文
为了确认LSU报文泛洪的可靠性传输,对端在收到LSU报文后需要使用LSACK报文进行确认(内容是需要确认的LSA头)。没有收到LSACK确认报文的LSA需要本端进行重传,重传的LSA是直接以单播方式发送到对应的邻居设备。LSACK报文用来对接收到的LSU报文进行确认。一个LSACK报文可对多个LSA进行确认。
五、OSPF支持的网络类型
1.广播网络
(1)特点
以单播方式发送Hello报文,LSU报文、LSACK报文。
以单播形式发送DD报文和LSR报文。
DR和BDR向非DR设备发送的组播报文的目的IP地址是244.0.0.5(代表所有OSPF路由器)。
非DR设备向DR和BDR发送的组播报文的目的IP地址为224.0.06。
(2)默认选择
当链路层协议是Ethernet FDDI,默认情况下OSPF认为网络类型是广播。
2.NBMA(非广播多路访问)网络
(1)特点
以单播方式发送所有OSPF报文,其中包括Hello报文、DD报文、LSR报文、LSU报文、LSACK报文。
NBMA网络必须是全连通的,即网络中任意两台路由器之间都必须直接可达。
(2)默认选择
当链路层协议是ATM时,默认情况下OSPF认为网络类型是NBMA。
3.P2P网络
(1)特点
以组播方式发送所有OSPF报文、其中包括Hello报文、DD报文、LSR报文、LSU报文、LSACK报文。
(2)默认选择
当链路层协议是PPP、HDLC和LAPB时,默认情况下OSPF认为网络类型是。
4.P2MP网络
(1)特点
以组播方式发送Hello报文
以单播方式发送DD报文、LSR报文、LSU报文、LSACK报文
(2)默认路由
没有一种链路层协议会被默认为是P2MP类型,必须是由其他网络类型强制更改的。
六、OSPF路由器类型
4种OSPF路由器示例
1.内部路由器(IR)
该设备的所有接口都在同一个OSPF区域内,同一个区域的IR维护相同的LSDB,图中的RTA和RTE是IR。
2.区域边界路由器(ABR)
该设备接口可以区分属于不同区域,其中一个接口位于骨干区域中,ABR用来连接骨干区域和非骨干区域,图中的RTB和RTD均为ABR。ABR为每个所连接的区域各维护一个LSDB。
3.骨干路由器(BR)
该设备至少有一个接口属于骨干区域,所有的ABR和位于骨干区域的内部设备都是骨干路由器,图中的RTB、RTC和RTD都是BR。
4.AS边界路由器(ASBR)
与其他AS中的设备交换路由信息的设备,图中的RTD引入了IS-IS路由,所以是一台ASBR。
从上图又可以看出,一台路由器可以是多种OSPF路由器类型,如RTB即是一台BR,同时又是一台ABR,RTC同时是BR、ABR和ASBR。
另外,虽然ASBR通常位于AS便捷,但也可以是IR或者ABR,可以属于骨干区域,也可以不属于骨干区域。只要一台OSPF设备引入了外部路由的信息,就是ASBR。
七、OSPF LSA类型
1.Router-LSA
每台路由器都会生成,描述某区域内路由器端口链路状态的集合,只在所描述的区域内泛洪。
2.Network-LSA
由DR或BDR生成,描述广播网络或NBMA网络中各接口所在网段的链路状态,在所属区域泛洪。
3.Network-Summary-LSA
由ABR产生,描述从AS内部区域到外部区域(一定是非Totally Stub或NSSA区域)某网段的汇总路由信息,在所连接的外部区域内泛洪。
4.ASBR-Summary-LSA
由ASBR产生,描述从ABR到达某自治系统边界路由器(ASBR)的路由信息,在ABR所连的区域内泛洪,但不包括Sub区域、Totally Stub区域、NSSA区域和Totally NSSA区域。
5.AS-External-LSA
由ASBR产生,描述从ASBR到达AS外部某一网段的路由信息,在整个AS内部泛洪,但仅可在普通区域中泛洪,不能在Sub区域、Totally Stub区域、NSSA区域和Totally NSSA区域。
6.NSSA External LSA
由ASBR产生,内容几乎和Type5是相同的,但它专用于NSSA区域和Totally NSSA区域连接的ASBR,向这两个区域泛洪到达外部AS的路由,经过NSSA区域ABR转换成Type5向OSPF路由区域内其他区域传播。
八、OSPF区域
1.网络路由器增多会产生的问题
(1)每台路由器都会生成自己的LSA,导致LSDB占用大量的内存空间,同步时间长。
(2)运行SPF算法的复杂度增加,占用更多的CPU资源
(3)拓扑结构发声变化的概率增加,造成网络中会有大量的OSPF协议报文在传递,导致网络的带宽利用率降低,且每一次变化都会导致网络中所有的路由器重新进行路由计算,引起网络震荡。
2.OSPF区域的划分
OSPF网络的区域划分示例
(1)一个物理网段的整条链路的两端接口必须属于同一区域,但一台路由器的不同接口可以分属在不同区域。
(2)Area 0为骨干区域,骨干区域负责在非骨干区域之间发布由区域便捷路由器汇总的路由信息,单区域OSPF网络中的区域ID可以任意。
(3)非骨干区域之间必须经过骨干区域连接,所以非骨干区域都必须与骨干区域连接。
(4)为了避免区域间路由环路,非骨干区域之间不允许直接相互发布区域间路由信息。因此,所有区域边界路由器至少有一个接口属于Area 0。
(5)每个区域都有自己的LSDB,不同区域LSDB所包含的LSA不同。
(6)路由器会为每一个自己所连接到的区域维护一个单独的LSDB。但由于区域内的详细链路状态信息不会被发布到区域以外。
九、OSPF领接关系的建立
领接关系和邻居关系是不一样的,领接关系是在邻居关系上建立的
1.OSPF邻居状态机
OSPF邻居状态机一共有8种,可以通过display ospf peer命令查看本地路由器与各邻居路由器之间建立领接关系时的状态。
(1)DOWN
邻居会话的初始阶段,表明在邻居失效时间间隔(DeadInterval,至少为HelloInterval定时器时长的4倍)内没有收到来自邻居设备的Hello报文。
(2)Attempt
此状态仅使用于NBMA网络,邻居路由器是通过peer命令手工指定的,邻居关系处于本状态时,路由器会以HelloInterval时间向自己手工配置的邻居发送Hello报文,尝试建立邻居关系。
(3)Init
此状态表示本端已经收到了邻居的Hello报文,但是对端还没有收到本端发送的Hello报文,因为在收到Hello报文的邻居列表中并没有包含本端的Router ID。
(4)2-Way
此状态表示双方互相收到了对端发送的Hello报文,报文中的邻居列表已包含本端的Router ID,邻居关系和双向通信建立。
(5)ExStart
协商主、从关系,通过仅带有LSA Header字段内容的DD报文协商主、从关系,并确定DD报文的序列号。建立主、从关系主要是为了保证后续能够有序地发送DD报文,此是邻居关系才正式开始建立邻接关系。
(6)Exchange
交换DD报文,主设备开始向从设备正式发送带有LSA Header字段内容的DD报文。
(7)Loading
此状态下,两端设备发送LSR报文向邻居请求对方的LSA,并以LSU报文对对方请求进行应答,同步LSDB。
(8)Full
当设备收到来自对端发来的LSA报文后向对端发送LSACK报文,同时在给对端发送LSA后也收到了来自对端的LSACK报文,即本端向对端发送了LSACK报文,也收到了对方发来的LSACK报文后,本地设备自动切换为Full状态,本端设备和邻居设备建立了完全的邻接关系。
十、DR和BDR选举
在广播网络或NBMA网络的一个IP网段中,任意两台路由器之间都要传递路由信息,若一个IP网段中有n台路由器,则需要建立n×(n-1)/2个邻接关系,使得任何一台路由器的路由变化信息都会导致多次传递,浪费了带宽资源。
为了解决这个问题,OSPF定义了DR。DR是在同一IP网段中的路由器进行选举的。选举产生DR后,其他设备都只讲信息发送给DR,由DR讲网络链路状态LSA广播出去,为了防止DR发生故障,路由器还会选举一个BDR。这样除了DR和BDR之外的路由器之间将不再建立邻接关系,也不再交换任何路由信息,减少了广播网络和NBMA网络中的一个IP网段中各路由器之间建立邻接关系的数量。
1.选举制
选举制不是DR和BDR不是人为指定的,而是本IP网段中所有的路由器共同选择的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本IP网段内DR优先级大于0的路由器都可以作为“候选人”。
DR和BDR的选举原则
选举的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文,发给网段上的其他路由器。在初始状态下,每台路由器都认为自己是DR,没有选举BDR,当处于同一IP网段的两台路由器同时宣布自己是DR时,优先级高者为DR(数值越大,优先级越高)另外一台为BDR。若优先级相等,则Router ID大者胜出。若一台路由器的优先级为0,则不会选举为DR和BDR。
2.终身制
终身制也叫非抢占制。每一台新加入的路由器并不急于参加选举,而是先考察一下本网段中是否已存在DR,观察时长为waiting定时器时间。在waiting定时器(与DeadInterval定时器一样,等于4倍HelloInterval定时器时长)时间内,发送Hello报文中不带有DR和BDR信息,即本地设备不能被选举为DR、BDR信息,则在waiting定时器超时后发送以本地路由器作为DR的Hello报文给本网段其他路由信息。
如果本地路由器在waiting定时器时间内,收到了其他路由器发来的Hello报文中带有DR和BDR信息,则表明目前网段中已存在DR、BDR,这样即使本地路由器的DR优先级比现有的DR高,也不会再声称自己是DR,而是承认现有的DR。
终身制有利于增加网络的稳定性,提高网络的可用带宽,实际上,在一个广播网络或NBMA网络中,最先启动的两台具有DR选举资格的路由器将成为DR和BDR。
3.继承制
继承制是指如果原来的DR发声故障,那么下一个当选为DR的一定是BDR,其他的路由器只能去竞选BDR的位置。这个原则可以保证DR的稳定,避免频繁地进行选举。由于DR和BDR的数据库是完全同步的,因此当DR故障后,BDR立即成为DR,履行DR的职责。在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需要的时间比较长,但不会影响路由计算。
十一、OSPF邻接关系建立过程
OSFP设备启动之后,会通过OSPF接口向外发送Hello把我摁,网络中其他收到Hello报文的OSPF设备回检查该报文中所定义的参数,如果双方Hello报文中的参数一致就会形成邻居关系,两端设备互为邻居,进入2-Way状态。但OSPF邻接关系位于邻居关系之上,两端需要进一步交换DD报文、交互LSA信息才能建立邻接关系,达到ExStart或以上状态。
广播网络和NBMA网络中的OSPF邻居关系和邻接关系
在广播网络或NBMA网络中,应为DROther之间不需要交换LSA信息,所以他们之间建立的仅是邻居关系。而DR和BDR之间,DR、BDR与DROther之间需要交互LSA信息,所以需要建立邻接关系。如图中所示,两台DROther各有3个邻居,但分别只与DR和BDR建立邻接关系,如图中虚线所示,而P2P网络上和P2MP网络中只有OSPF邻接关系。
在广播网络中,DR、BDR和网段内的每一台路由器都要形成邻接关系,但是DROther之间只形成邻居关系,在广播网络中,OSPF邻接关系建立的流程如下:
假设两台设备同时启动、同时参与DR、BDR选举,总体分为三大部分:邻居关系建立,主从关系协商、DD报文交换和LSDB同步。