前言
在OSPF出现前,RIP是网络上使用最广泛的IGP协议,但随着网络的快速成长和扩展, RIP的某些限制可能会导致其在大型网络中不再适用,OSPF则能够解决RIP所面临的诸多问题
一、OSPF概述
1、OSPF简介
OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol),OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域,OSPF通过链路状态通告LSA(Link State Advertisement)的形式发布路由,OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一,OSPF报文封装在IP报文内,可以采用单播或组播的形式发送, 目前针对IPv4协议使用的是OSPF Version 2,针对IPv6协议使用OSPF Version 3
2、OSPF与RIP对比
OSPF | RIPv2 | RIPv1 | |
协议类型 | 链路状态 | 距离矢量 | 距离矢量 |
CIDR | 支持 | 支持 | 不支持 |
VLSM | 支持 | 支持 | 不支持 |
自动聚合 | 不支持 | 支持 | 支持 |
手动聚合 | 支持 | 支持 | 不支持 |
路由泛洪 | 组播 | 周期组播 | 周期广播 |
路径开销 | 带宽 | 跳数 | 跳数 |
路由收敛 | 快 | 慢 | 慢 |
跳数限制 | 无 | 15 | 15 |
邻居认证 | 支持 | 支持 | 不支持 |
分级网络 | 支持 | 不支持 | 不支持 |
更新 | 事件触发更新 | 周期更新 | 周期更新 |
路由计算 | Dijkstra | Bellman-ford | Bellman-ford |
3、OSPF的特点
在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态通告LSA (Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器,RIP交互的是路由,与RIP不同,OSPF交互的是链路状态信息,也就是说,RIP中,路由器的选路依赖于邻居路由器的路由信息,但不管邻居路由器传达的信息是否正确, 而OSPF中,路由器的选路是一种“自主行为”,LSA只是一种选路的参考信息, 每台路由器都通过链路状态数据库LSDB(Link State DataBase)掌握全网的拓扑结构,每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB,LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整 个自治系统的网络拓扑结构的描述,路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映,在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的
路由器根据最短路径优先(Shortest Path First)算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息,每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由,相对于RIP,这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路,LSDB保证路由器能够时刻掌握全网的拓扑结构,SPF算法保证路由器能够迅速计算出到达目的网络的最短路径
4、OSPF运行机制
(1)通过交互Hello报文形成邻居关系
路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文,如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系
(2)通过泛洪LSA通告链路状态信息
形成邻居关系的路由器之间进一步交互LSA形成邻接关系,每台路由器根据自己周围的网络拓扑结构生成LSA,LSA描述了路由器所有的链路、接口、邻居及链路状态等信息,路由器通过交互这些链路信息来了解整个网络的拓扑信息,由于链路的多样性,OSPF协议定义了多种LSA类型
(3)通过组建LSDB形成带权有向图
通过LSA的泛洪,路由器会把收到的LSA汇总记录在LSDB中,最终,所有路由器都会形成同样的LSDB,LSA是对路由器周围网络拓扑结构的描述,而LSDB则是对整个自治系统的网络拓扑结构的描述,LSDB是LSA的汇总
(4)通过SPF算法计算并形成路由
当LSDB同步完成之后,每一台路由器都将以其自身为根,使用SPF算法来计算一个无环路的拓扑图来描述它所知道的到达每一个目的地的最短路径 (最小的路径代价),这个拓扑图就是最短路径树,有了这棵树,路由器就能知道到达自治系统中各个节点的最优路径
(5)维护和更新路由表
根据SPF算法得出最短路径树后,每台路由器将计算得出的最短路径加载到OSPF路由表形成指导数据转发的路由表项,并且实时更新,同时,邻居之间交互Hello报文进行保活,维持邻居关系或邻接关系,并且周期性地重传LSA
5、OSPF报文类型
(1)Hello报文
Hello报文的主要作用如下
邻居发现:OSPF功能的接口会周期性地发送Hello报文,与网络中其他收到Hello报文的路由器协商报文中的指定参数,决定是否建立邻居关系
建立双向通信:如果路由器发现收到的Hello报文的邻居列表中有自己Router ID,则认为已经和对端建立了双向通信,邻居关系建立
指定DR和BDR:Hello报文包含DR优先级和Router ID等信息,每台路由器将自己选出的DR和BDR写入Hello报文的DR和BDR字段中,然后进行DR和BDR的选举
保活:在建立邻居关系后,OSPF功能的接口仍周期性地发送Hello报文维护邻居关系,如果在一定的时间间隔内没有收到邻居发来的Hello报文,则中断邻居关系
(2)DD报文
两台路由器在邻接关系初始化时,DD报文(Database Description packet)用来协商主从关系,此时报文中不包含LSA的Header,在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave,由Master规定起始序列号,每发送一个 DD报文序列号加1,Slave方使用Master的序列号作为确认, 邻接关系建立之后,路由器使用DD报文描述本端路由器的LSDB,进行数据库同 步,DD报文里包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一 条LSA),即所有LSA的摘要信息,LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA
(3)LSR报文
两台路由器互相交换过DD报文之后,需要发送LSR报文(Link State Request packet)向对方请求更新LSA,LSR报文里包括所需要的LSA的摘要信息
(4)LSU报文
LSU报文(Link State Update packet)用来向对端路由器发送其所需要的LSA或者泛洪本端更新的LSA,其报文内容是多条完整的LSA的集合,为了实现泛洪的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传, 重传的LSA是直接发送到邻居的
(5)LSAck报文
LSAck报文(Link State Acknowledgment packet)用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header,一个LSAck报文可对多个LSA进行确认
6、OSPF支持的网络类型
(1)广播类型
当链路层协议是Ethernet或FDDI(Fiber Distributed Digital Interface)时,缺省情况下,OSPF认为网络类型是Broadcast,在该类型的网络中, 通常以组播形式发送Hello报文、LSU报文和LSAck报文,其中224.0.0.5的组播地址为OSPF设备的预留IP组播地址,224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址,以单播形式发送DD报文和LSR报文
(2)NBMA类型
当链路层协议是帧中继或X.25时,缺省情况下,OSPF认为网络类型是NBMA, 在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、 LSU报文、LSAck报文)
(3)点到多点P2MP类型
没有一种链路层协议会被缺省的认为是P2MP类型,点到多点必须是由其他的网络类型强制更改的,常用做法是将非全连通的NBMA改为点到多点的网络,在该类型的网络中,以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)
(4)点到点P2P类型
当链路层协议是PPP、HDLC或LAPB时,缺省情况下,OSPF认为网络类型是P2P, 在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报 文、LSR报文、LSU报文、LSAck报文)
7、DR和BDR选举
(1)Router ID
Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数,每个运 行OSPF的路由器都有一个Router ID,Router ID的格式和IP地址的格式是一样的
OSPF的Router ID的选取有两种方式:手动配置和设备自动选取,在实际网络部署中,考虑到协议的稳定,推荐手工配置Loopback接口的IP地址做为Router ID
(2)DR和BDR选举的原因
在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息, 网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系,这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源,为解决这一问题,OSPF定义了DR,通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去,为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR,这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量
(3)DR和BDR选举的原则
DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的,路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本网段内DR优先级大于0的路由器都可作为“候选人”,选举中使用的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器,当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出, 如果优先级相等,则Router ID大者胜出,如果一台路由器的优先级为0,则它不会被选举为DR或BDR
每一台新加入的路由器并不急于参加选举,而是先考察一下本网段中是否已存在DR,如果目前网段中已经存在DR,即使本路由器的DR优先级比现有的DR还高,也不会再声称自己是DR,而是承认现有的DR,因为网段中的每台路由器都只和DR、BDR建立邻接关系,如果DR频繁更换,则会引起本网段内的所有路由器重新与新的DR、BDR建立邻接关系,这样会导致短时间内网段中有大量的OSPF协议报文在传输,降低网络的可用带宽,实际上,在一个广播网络或NBMA网络上,最先启动的两台具有DR选举资格的路由器将成为DR和BDR
如果DR发生故障了,那么下一个当选为DR的一定是BDR, 其他的路由器只能去竞选BDR的位置,这个原则可以保证DR的稳定,避免频繁地进行选举,并且DR是有备份的(BDR),一旦DR失效,可以立刻由BDR来承担DR的角色,由于DR和BDR的数据库是完全同步的,这样当DR故障后,BDR立即成为DR,履行DR的职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短,同时,在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算了
(4)DR和BDR选举过程
接口UP后,发送Hello报文,同时进入到Waiting状态,在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的,默认值为40秒,用户不可自行调整
在WaitingTimer触发前,发送的Hello报文是没有DR和BDR字段的,在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举,直接离开Waiting状态,开始邻居同步
假设网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR
当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR
只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR,该规则是:优先选择DR优先级最高的作为DR,次高的作为BDR,DR优先级为0的路由器只能成为DR Other,如果优先级相同,则优先选择Router ID较大的路由器成为DR,次大的成为BDR,其余路由器成为DR Other
8、OSPF接口状态机
Down:接口的初始状态,表明此时接口不可用,不能用于收发流量
Loopback:设备到网络的接口处于环回状态,环回接口不能用于正常的数据传输,但可以通过Router-LSA进行通告,因此,进行连通性测试时能够发现到达这个接口的路径
Waiting:设备正在判定网络上的DR和BDR。在设备参与DR和BDR选举前,接口上会启动Waiting定时器,在这个定时器超时前,设备发送的Hello报文不包含DR 和BDR信息,设备不能被选举为DR或BDR,这样可以避免不必要地改变链路中已存在的DR和BDR,仅NMBA网络、广播网络有此状态
P-2-P:接口连接到物理点对点网络或者是虚拟链路,这个时候设备会与链路连接的另一端设备建立邻接关系,仅P2P、P2MP网络有此状态
DROther:设备没有被选为DR或BDR,但连接到广播网络或NBMA网络上的其他设备被选举为DR,它会与DR和BDR建立邻接关系
BDR:设备是相连的网络中的BDR,并将在当前的DR失效时成为DR,该设备与接入该网络的所有其他设备建立邻接关系
DR:设备是相连的网络中的DR,该设备与接入该网络的所有其他设备建立邻接关系
9、OSPF邻居状态机
Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文,除了NBMA网络OSPF路由器会每隔PollInterval时间对外发送Hello报文,包括向处于Down状态的邻居路由器(即失效的邻居路由器)发送之外,其他网络是不会向失效的邻居路由器发送Hello报文的
Attempt:这种状态适用于NBMA网络,邻居路由器是手工配置的,邻居关系处于本状态时,路由器会每隔HelloInterval时间向自己手工配置的邻居发送Hello报文,尝试建立邻居关系
Init:本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文,收到的Hello报文的邻居列表并没有包含本端的Router ID,双向通信仍然没有建立
2-Way:互为邻居,本状态表示双方互相收到了对端发送的Hello报文,报文中的邻居列表也包含本端的Router ID,邻居关系建立,如果不形成邻接关系则邻居状态机就停留在此状态,否则进入ExStart状态,DR和BDR只有在邻居状态处于2- Way及之后的状态才会被选举出来
ExStart:协商主从关系,建立主从关系主要是为了保证在后续的DD报文交换中能够有序的发送,邻居间从此时才开始正式建立邻接关系
Exchange:交换DD报文,本端设备将本地的LSDB用DD报文来描述,并发给邻居设备
Loading:正在同步LSDB,两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB
Full:建立邻接,两端设备的LSDB已同步,本端设备和邻居设备建立了完全的邻接关系
10、路由器类型
(1)区域内路由器
该类设备的所有接口都属于同一个OSPF区域
(2)区域边界路由器ABR
该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域,ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接
(3)骨干路由器
该类设备至少有一个接口属于骨干区域,所有的ABR和位于Area0的内部设备都是骨干路由器
(4)自治系统边界路由器ASBR
与其他AS交换路由信息的设备称为ASBR, ASBR并不一定位于AS的边界,它可能是区域内设备, 也可能是ABR,只要一台OSPF设备引入了外部路由的信息,它就成为ASBR
11、区域类型
(1)普通区域
标准区域:最通用的区域,它传输区域内路由,区域间路由和外部路由
骨干区域:连接所有其他OSPF区域的*区域,用Area 0表示,骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发
(2)Stub区域
Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,因此这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少,Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件,一般情况下,Stub 区域位于自治系统的边界,是只有一个ABR的非骨干区域,为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器
Totally Stub区域允许ABR发布Type3缺省路由,不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由
(3)NSSA区域
NSSA是Stub区域的一个变形,它和Stub区域有许多相似的地方,NSSA区域不允许存在Type5 LSA,NSSA区域允许引入自治系统外部路由,携带这些外部路由信息的Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播,当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,泛洪到 整个OSPF域中, Totally NSSA区域不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由
12、OSPF缺省路由发布原则
(1)普通区域
缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由, 当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治系统中,实现方法是在ASBR上手动通过命令进行配置,产生缺省路由,配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治系统中
(2)Stub区域
Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播, 区域内的路由器必须通过ABR学到自治系统外部的路由,实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内,这样,到达自治系统的外部路由就可以通过ABR到达
(3)Totally Stub区域
Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播, 区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由, 实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内,这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达
(4)NSSA区域
NSSA区域允许引入通过本区域的ASBR到达的少量外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,即到达自治系统外部的路由只能通过本区域的ASBR到达
(5)Totally NSSA区域
Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播, 区域内的路由器必须通过ABR学到其他区域的路由,实现方法是配置 Totally NSSA区域后,ABR会自动产生一条缺省的Type3 LSA通告到整个NSSA区域内,这样其他区域的外部路由和区域间路由都可以通过ABR在区域内传播
13、OSPF LSA类型
(1)Router-LSA
Router-LSA是一种最基本的LSA,即Type1 LSA
OSPF网络里的每一台路由设备都会发布Type1 LSA,这种类型的LSA用于描述设备的链路状态和开销,在路由器所属的区域内传播
(2)Network-LSA
Network-LSA,也就是Type2 LSA,由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播
(3)Network-summary-LSA
Network-summary-LSA,也叫Type3 LSA,由ABR发布,用来描述区域间的路由信息,ABR将Network-summary-LSA发布到一个区域,通告该区域到其他区域的目的地址,实际上,ABR是将区域内部的Type1和Type2的信息收集起来并汇总之后扩散出 去,这就是Summary的含义
(4)ASBR-Summary-LSA
ASBR-summary-LSA,也叫Type4 LSA,由ABR发布,描述到ASBR的路由信息,并通告给除ASBR所在区域的其他相关区域
(5)AS-external-LSA
AS-external-LSA,也叫Type5 LSA,由ASBR产生,描述到AS外部的路由,通告到除Stub区域和NSSA区域以外所有的区域
(6)NSSA LSA
NSSA LSA,也叫Type7 LSA, NSSA LSA由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播,NSSA区域的ABR收到NSSA LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域
14、OSPF虚连接
虚连接(Virtual link)是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道, 根据RFC 2328,在部署OSPF时,要求所有的非骨干区域与骨干区域相连,否则会出现有的区域不可达的问题,但是在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求,此时可以通过配置OSPF虚连接来解决这个问题
二、OSPF配置
1、案例
通过配置ospf、完全末梢区域、虚链路、完全nssa区域、rip、路由重分发、下发默认路由实现全网互通
2、配置过程
(1)AR1
(2)AR2
(3)AR3
(4)AR4
(5)AR5
(6)AR6
3、查看路由
4、测试
结语
OSPF协议通过将自治系统划分成不同的区域,将LSA泛洪限制在一个区域内,提高网络的利用率和路由的收敛速率,每个区域内的路由器数量减少,维护的LSDB规模降低,SPF计算也仅限于区域内的LSA,每台路由器需要维护的路由表也越来越小,此外,多区域提高了网络的扩展性,有利于组建大规模的网络