路由协议—OSPFV2

理论

一、简介

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。OSPF支持负载均衡和基于服务类型的选路,也支持多种路由形式,如特定主机路由和子网路由等。

目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。

二、定义

OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。

作为一种链路状态的路由协议,OSPF将链路状态组播数据LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。

在信息交换的安全性上,OSPF规定了路由器之间的任何信息交换在必要时都可以经过认证或鉴别(Authentication),以保证只有可信的路由器之间才能传播选路信息。OSPF支持多种鉴别机制,并且允许各个区域间采用不同的鉴别机制。OSPF对链路状态算法在广播式网络(如以太网)中的应用进行了优化,以尽可能地利用硬件广播能力来传递链路状态报文。通常链路状态算法的拓扑图中一个结点代表一个路由器。若K个路由器都连接到以太网上,在广播链路状态时,关于这K个路由器的报文将达到K的平方个。为此,OSPF在拓扑结构图允许一个结点代表一个广播网络。每个广播网络上所有路由器发送链路状态报文,报告该网络中的路由器的链路状态。

三、OSPF的特点

在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态使用组播地址224.0.0.5通告LSA(Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器。
RIP交互的是路由。与RIP不同,OSPF交互的是链路状态信息。也就是说,RIP中,路由器的选路依赖于邻居路由器的路由信息,但不管邻居路由器传达的信息是否正确;而OSPF中,路由器的选路是一种“自主行为”,LSA只是一种选路的参考信息。
每台路由器都通过链路状态数据库LSDB(Link State DataBase)掌握全网的拓扑结构。如图1所示,每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。

图1 通过LSDB掌握全网的拓扑结构

路由器根据最短路径优先(Shortest Path First)算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息。如图2所示,每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。相对于RIP,这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路。

图2 根据SPF计算到达目的网络的路径

总之,LSDB保证路由器能够时刻掌握全网的拓扑机构,SPF算法保证路由器能够迅速计算出到达目的网络的最短路径。

四、OSPF提供五种类型的报文

  • Hello报文
    Hello报文是最常用的报文,用于建立和维护邻接关系。使能了OSPF功能的接口周期性地发送Hello报文。Hello报文中包括一些定时器的数值、本网络中的DR(Designated Router)、BDR(Backup Designated Router)以及已知的邻居。
  • 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。
  • LSR报文
    两台路由器互相交换过DD报文之后,需要发送LSR报文(Link State Request packet)向对方请求更新LSA。LSR报文里包括所需要的LSA的摘要信息。
  • LSU报文
    LSU报文(Link State Update packet)用来向对端路由器发送其所需要的LSA或者泛洪本端更新的LSA,其报文内容是多条完整的LSA的集合。为了实现泛洪的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
  • LSAck报文
    LSAck报文(Link State Acknowledgment packet)用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。一个LSAck报文可对多个LSA进行确认。

五、OSPF提供七种类型的LSA

六、OSPF区域类型

七、OSPF支持的网络类型

OSPF根据链路层协议类型,将网络分为如下四种类型:

  • 广播类型(Broadcast)
    当链路层协议是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报文。
  • NBMA类型(Non-Broadcast Multi-Access)
    当链路层协议是帧中继或X.25时,缺省情况下,OSPF认为网络类型是NBMA。
    在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
  • 点到多点P2MP类型(Point-to-Multipoint)
    没有一种链路层协议会被缺省的认为是P2MP类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。
    在该类型的网络中:
  • 以组播形式(224.0.0.5)发送Hello报文。
  • 以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
  • 点到点P2P类型(Point-to-Point)
    当链路层协议是PPP、HDLC或LAPB时,缺省情况下,OSPF认为网络类型是P2P。
    在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。

八、DR、BDR选举

Router ID
在了解DR/BDR的选举过程之前,需要先了解Router ID。Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的。在实际网络部署中,考虑到协议的稳定,推荐使用路由器上Loopback接口的IP地址做为路由器的Router ID。
Router ID的选取有两种方式:通过命令行手动配置和设备自动设定。
如果没有手动配置Router ID,设备会从当前接口的IP地址中自动选取一个作为Router ID。其选择顺序是:

  1. 优先从Loopback地址中选择最大的IP地址作为Router ID。
  2. 如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为Router ID。

只有重新配置系统的Router ID或OSPF的Router ID,并且重新启动OSPF进程后,才会进行Router ID的重新选取。


DR和BDR选举的原因


在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。如图1所示,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。
为解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。
为了防止DR发生故障,重新选举DR时会产成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
 

图1 DR和BDR选举

DR和BDR选举的原则


在广播网络和NBMA网络中,为了稳定地进行DR和BDR选举,OSPF规定了一系列的选举规则:选举制、终身制、继承制。
选举制
选举制是指DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。如图2所示,路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。

图2 DR和BDR选举的原则—选举制


终身制
终身制也叫非抢占制。每一台新加入的路由器并不急于参加选举,而是先考察一下本网段中是否已存在DR。如图3所示,如果目前网段中已经存在DR,即使本路由器的DR优先级比现有的DR还高,也不会再声称自己是DR,而是承认现有的DR。因为网段中的每台路由器都只和DR、BDR建立邻接关系,如果DR频繁更换,则会引起本网段内的所有路由器重新与新的DR、BDR建立邻接关系。这样会导致短时间内网段中有大量的OSPF协议报文在传输,降低网络的可用带宽。终身制有利于增加网络的稳定性、提高网络的可用带宽。实际上,在一个广播网络或NBMA网络上,最先启动的两台具有DR选举资格的路由器将成为DR和BDR。

图3 DR和BDR选举的原则—终身制


继承制
如图4所示,继承制是指如果DR发生故障了,那么下一个当选为DR的一定是BDR,其他的路由器只能去竞选BDR的位置。这个原则可以保证DR的稳定,避免频繁地进行选举,并且DR是有备份的(BDR),一旦DR失效,可以立刻由BDR来承担DR的角色。由于DR和BDR的数据库是完全同步的,这样当DR故障后,BDR立即成为DR,履行DR的职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短。同时,在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算了。

图4 DR和BDR选举的原则—继承制

DR和BDR选举过程:广播链路或者NMBA链路上DR和BDR的选举过程如下:

  1. 接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。默认值为40秒,用户不可自行调整。OSPF接口状态的详细描述,请参见OSPF接口状态机。
  2. 在WaitingTimer触发前,发送的hello报文是没有DR和BDR字段的。在Waiting阶段,如果收到Hello报文中有DR和BDR,那么直接承认网络中的DR和BDR,而不会触发选举。直接离开Waiting状态,开始邻居同步。
  3. 假设网络中已经存在一个DR和一个BDR,这时新加入网络中的路由器,不论它的Router ID或者DR优先级有多大,都会承认现网中已有的DR和BDR。
  4. 当DR因为故障Down掉之后,BDR会继承DR的位置,剩下的优先级大于0的路由器会竞争成为新的BDR。
  5. 只有当不同Router ID,或者配置不同DR优先级的路由器同时起来,在同一时刻进行DR选举才会应用DR选举规则产生DR。该规则是:优先选择DR优先级最高的作为DR,次高的作为BDR。DR优先级为0的路由器只能成为DR Other;如果优先级相同,则优先选择Router ID较大的路由器成为DR,次大的成为BDR,其余路由器成为DR Other。

九、OSPF运行机制

OSPF的运行机制包括以下5个步骤:

1.通过交互Hello报文形成邻居关系
路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。

OSPF邻接、邻居关系建立过程

  • 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
  • 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。

  • Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
  • Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
  • Init:收到Hello报文后状态为Init。
  • 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
  • Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
  • Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
  • Loading:DD报文交换完成即Exchange done,此时状态为Loading。
  • Full:LSR重传列表为空,此时状态为Full。

OSPF设备启动后,会通过OSPF接口向外发送Hello报文。网络中其它收到Hello报文的OSPF设备会检查该报文中所定义的参数,比如Hello报文发送间隔、网络类型、IP地址掩码等。如果双方Hello报文中的参数一致就会形成邻居关系,两端设备互为邻居。
OSPF邻接关系位于邻居关系之上。两端需要进一步交换DD报文、交互LSA信息时才建立邻接关系。
在广播链路和NBMA链路上,因为DR Other之间不需要交换LSA信息,所以建立的是邻居关系。而DR与BDR之间,DR、BDR与DR Other之间需要交互LSA信息,所以建立的是邻接关系。如图1所示,两台DR Other各有三个邻居,但是分别只有两个邻接。

图1 OSPF邻居关系和邻接关系

  • 并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。
  • LSDB同步(LSA请求、LSA传输、LSA应答)
  • RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。
  • RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。

上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。

NBMA网络
在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。邻接关系建立的过程如图3所示。

  1. 建立邻居关系
  2. RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR设备(DR=2.2.2.2),但不确定邻居是哪台设备(Neighbors Seen=0)。
  3. RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR设备(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居设备的Router ID(Neighbors Seen=2.2.2.2)。在NBMA网络中,两个接口状态是DR Other的设备之间将停留在此步骤。
  4. 主从关系协商、DD报文交换过程与广播网络中邻接关系建立过程相同。
  5. LSDB同步(LSA请求、LSA传输、LSA应答)过程与广播网络中邻接关系建立过程相同。

点到点网络和点到多点网络
点到点网络、点到多点网络中OSPF邻接关系建立的过程与广播网络相似。不同的是,在点到点、点到多点网络中不需要选举DR和BDR,且点到点网络中的DD报文是单播发送的。

十、OSPF NSSA

定义
OSPF规定STUB区域是不能引入外部路由的,这样可以避免大量外部路由对STUB区域路由器带宽和存储资源的消耗。对于既需要引入外部路由又要避免外部路由带来的资源消耗的场景,STUB区域就不再满足需求了。因此产生了NSSA区域。
OSPF NSSA区域(Not-So-Stubby Area)是OSPF新增的一类特殊的区域类型。
NSSA区域和STUB区域有许多相似的地方。两者的差别在于,NSSA区域能够将自治域外部路由引入并传播到整个OSPF自治域中,同时又不会学习来自OSPF网络其它区域的外部路由。

  • N-bit
    一个区域内所有路由器上配置的区域类型必须保持一致。OSPF在Hello报文中使用N-bit来标识路由器支持的区域类型,区域类型选择不一致的路由器不能建立OSPF邻居关系。
    虽然协议有要求,但有些厂商实现时违背了,在OSPF DD报文中也置位了N-bit,为了和这些厂商互通,路由器的实现方式是可以通过命令设置N-bit来兼容。
  • Type7 LSA
    Type7 LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述引入的外部路由信息。Type7 LSA由NSSA区域的自治域边界路由器(ASBR)产生,其扩散范围仅限于ASBR所在的NSSA区域。 NSSA区域的区域边界路由器(ABR)收到Type7 LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
  • Type7 LSA转化为Type5 LSA
    为了将NSSA区域引入的外部路由发布到其它区域,需要把Type7 LSA转化为Type5 LSA以便在整个OSPF网络中通告。 P-bit(Propagate bit)用于告知转化路由器该条Type7 LSA是否需要转化。 缺省情况下,转换路由器的是NSSA区域中Router ID最大的区域边界路由器(ABR) 只有P-bit置位并且FA(Forwarding Address)不为0的Type7 LSA才能转化为Type5 LSA。FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。 区域边界路由器产生的Type7 LSA缺省路由不会置位P-bit。

发布路由过滤

R1

  • interface LoopBack1
  • ip address 172.16.254.254 255.255.255.255
  • #
  • interface LoopBack2
  • ip address 172.16.254.253 255.255.255.255
  • #
  • ospf 1 router-id 1.1.1.2
  • default-route-advertise
  • filter-policy 2000 export
  • import-route direct
  • #
  • acl number 2000
  • rule 5 permit source 172.16.254.253 0

R2

只有acl 匹配而定才会发布

接收路由过滤

R1

  • interface LoopBack1
  • ip address 172.16.254.254 255.255.255.255
  • #
  • interface LoopBack2
  • ip address 172.16.254.253 255.255.255.255
  • #
  • ospf 1 router-id 1.1.1.2
  • default-route-advertise
  • import-route direct
  • #

R2

  • ospf 1 router-id 1.1.1.3
  • filter-policy 2000 import
  • #
  • acl number 2000
  • rule 5 deny source 172.16.254.253 0
  • rule 10 permit

BFD、OSPF

  • bfd
  • interface GigabitEthernet0/0/0
  • ospf bfd enable
  • ospf bfd min-tx-interval 500 min-rx-interval 500 detect-multiplier 4
  • #
  • ospf 1
  • bfd all-interfaces enable

cost 累计计算

  • 以路径上设备的出接口的cost 为标准累加求和 cost 小的优先
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

期待未来的男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值