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(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。
在OSPF出现前,RIP是网络上使用最广泛的IGP协议。但随着网络的快速成长和扩展,RIP的某些限制可能会导致其在大型网络中不再适用,OSPF则能够解决RIP所面临的诸多问题。
RIP | OSPF |
---|---|
基于距离矢量算法,以跳数作为度量方式,忽略带宽的影响。 | 基于链路状态,以链路开销作为度量方式,并把带宽作为参考值,度量方式更科学。 |
RIP的跳数限制为15个,限制了RIP的网络规模。 | 没有跳数限制,适用的网络规模更大。 |
按照路由通告进行路由更新和选择,路由器不了解整个网络拓扑,容易产生路由环路。 | 每台路由器都能够掌握全网拓扑,通过最短路径优先算法SPF(Shortest Path First)计算路由,不会产生路由环路。 |
收敛速度慢,路由更新会经历一段抑制和垃圾收集期,容易导致路由器之间的路由不一致。 | 收敛速度快,因为路由更新是及时的,并且能够快速传递到整个网络。 |
不能处理可变长子网掩码(VLSM)。 | 能够处理VLSM,灵活进行IP地址分配。 |
此外,OSPF还有以下优点:
- OSPF可以采用组播形式收发报文,这样可以减少对未运行OSPF的路由器的影响。
- OSPF支持无类型域间选路(CIDR)。
- OSPF支持对等价路由进行负载分担。
- OSPF支持报文验证。
OSPF的特点
在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态通告LSA(Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器。
RIP交互的是路由。与RIP不同,OSPF交互的是链路状态信息。也就是说,RIP中,路由器的选路依赖于邻居路由器的路由信息,但不管邻居路由器传达的信息是否正确;而OSPF中,路由器的选路是一种“自主行为”,LSA只是一种选路的参考信息。
每台路由器都通过链路状态数据库LSDB(Link State DataBase)掌握全网的拓扑结构。如图1所示,每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB。LSA是对路由器周围网络拓扑结构的描述,LSDB则是对整个自治系统的网络拓扑结构的描述。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。
路由器根据最短路径优先(Shortest Path First)算法计算到达目的网络的路径,而不是根据路由通告来获取路由信息。如图2所示,每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。相对于RIP,这种机制极大地提升了路由器的自主选路能力,使得路由器不再依靠路由通告进行选路。
总之,LSDB保证路由器能够时刻掌握全网的拓扑机构,SPF算法保证路由器能够迅速计算出到达目的网络的最短路径。
OSPF运行机制
OSPF的运行机制包括以下5个步骤:
通过交互Hello报文形成邻居关系
如图3所示,路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。
通过泛洪LSA通告链路状态信息
形成邻居关系的路由器之间进一步交互LSA形成邻接关系,如图4所示。每台路由器根据自己周围的网络拓扑结构生成LSA,LSA描述了路由器所有的链路、接口、邻居及链路状态等信息,路由器通过交互这些链路信息来了解整个网络的拓扑信息。由于链路的多样性,OSPF协议定义了多种LSA类型。详见OSPF LSA类型。
通过组建LSDB形成带权有向图
通过LSA的泛洪,路由器会把收到的LSA汇总记录在LSDB中。最终,所有路由器都会形成同样的LSDB,如图5所示。LSA是对路由器周围网络拓扑结构的描述,而LSDB则是对整个自治系统的网络拓扑结构的描述,LSDB是LSA的汇总。
通过SPF算法计算并形成路由
如图6所示,当LSDB同步完成之后,每一台路由器都将以其自身为根,使用SPF算法来计算一个无环路的拓扑图来描述它所知道的到达每一个目的地的最短路径(最小的路径代价)。这个拓扑图就是最短路径树,有了这棵树,路由器就能知道到达自治系统中各个节点的最优路径。
维护和更新路由表
根据SPF算法得出最短路径树后,每台路由器将计算得出的最短路径加载到OSPF路由表形成指导数据转发的路由表项,并且实时更新,如图7所示。同时,邻居之间交互Hello报文进行保活,维持邻居关系或邻接关系,并且周期性地重传LSA。
OSPF报文类型
OSPF的报文类型可以分为以下五种:
- 邻居发现:使能了OSPF功能的接口会周期性地发送Hello报文,与网络中其他收到Hello报文的路由器协商报文中的指定参数,决定是否建立邻居关系。
- 建立双向通信:如果路由器发现收到的Hello报文的邻居列表中有自己Router ID,则认为已经和对端建立了双向通信,邻居关系建立。
- 指定DR和BDR:Hello报文包含DR优先级和Router ID等信息,每台路由器将自己选出的DR和BDR写入Hello报文的DR和BDR字段中,然后进行DR和BDR的选举,详细的选举原则和过程请参见DR和BDR选举。
- 保活:在建立邻居关系后,使能OSPF功能的接口仍周期性地发送Hello报文维护邻居关系,如果在一定的时间间隔内没有收到邻居发来的Hello报文,则中断邻居关系。
两台路由器在邻接关系初始化时,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。
两台路由器互相交换过DD报文之后,需要发送LSR报文(Link State Request packet)向对方请求更新LSA。LSR报文里包括所需要的LSA的摘要信息。
LSU报文(Link State Update packet)用来向对端路由器发送其所需要的LSA或者泛洪本端更新的LSA,其报文内容是多条完整的LSA的集合。为了实现泛洪的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
LSAck报文(Link State Acknowledgment packet)用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。一个LSAck报文可对多个LSA进行确认。
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选举
在DR和BDR选举的过程中,如果两台路由器的DR优先级相等,需要进一步比较两台路由器的Router ID,Router ID大的路由器将被选为DR或BDR。
Router ID是用于在自治系统中唯一标识一台运行OSPF的路由器的32位整数。每个运行OSPF的路由器都有一个Router ID。Router ID的格式和IP地址的格式是一样的。
OSPF的Router ID的选取有两种方式:手动配置和设备自动选取。在实际网络部署中,考虑到协议的稳定,推荐手工配置Loopback接口的IP地址做为Router ID。
如果没有手动配置OSPF的Router ID,设备会选取全局Router ID作为OSPF的RouterID,如果二者都没有配置,设备会按照一定的规则自动选取。具体的选取规则,请参见路由的Router ID。
以下3种情况会进行Router ID的重新选取:
- 通过本命令重新配置OSPF的Router ID
- 重新配置全局Router ID,并且重新启动OSPF进程
- 原来被选举为全局Router ID的IP地址被删除并且重新启动OSPF进程
在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。如图8所示,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。
为解决这一问题,OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。
为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
在广播网络和NBMA网络中,为了稳定地进行DR和BDR选举,OSPF规定了一系列的选举规则:选举制、终身制、继承制。
选举制
选举制是指DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。如图9所示,路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格,本网段内DR优先级大于0的路由器都可作为“候选人”。选举中使用的“选票”就是Hello报文,每台路由器将自己选出的DR写入Hello报文中,发给网段上的其他路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
终身制
终身制也叫非抢占制。每一台新加入的路由器并不急于参加选举,而是先考察一下本网段中是否已存在DR。如图10所示,如果目前网段中已经存在DR,即使本路由器的DR优先级比现有的DR还高,也不会再声称自己是DR,而是承认现有的DR。因为网段中的每台路由器都只和DR、BDR建立邻接关系,如果DR频繁更换,则会引起本网段内的所有路由器重新与新的DR、BDR建立邻接关系。这样会导致短时间内网段中有大量的OSPF协议报文在传输,降低网络的可用带宽。终身制有利于增加网络的稳定性、提高网络的可用带宽。实际上,在一个广播网络或NBMA网络上,最先启动的两台具有DR选举资格的路由器将成为DR和BDR。
继承制
如图11所示,继承制是指如果DR发生故障了,那么下一个当选为DR的一定是BDR,其他的路由器只能去竞选BDR的位置。这个原则可以保证DR的稳定,避免频繁地进行选举,并且DR是有备份的(BDR),一旦DR失效,可以立刻由BDR来承担DR的角色。由于DR和BDR的数据库是完全同步的,这样当DR故障后,BDR立即成为DR,履行DR的职责,而且邻接关系已经建立,所以从角色切换到承载业务的时间会很短。同时,在BDR成为新的DR之后,还会选举出一个新的BDR,虽然这个过程所需的时间比较长,但已经不会影响路由的计算了。
广播链路或者NBMA链路上DR和BDR的选举过程如下:
- 接口UP后,发送Hello报文,同时进入到Waiting状态。在Waiting状态下会有一个WaitingTimer,该计时器的长度与DeadTimer是一样的。默认值为40秒,用户不可自行调整。OSPF接口状态的详细描述,请参见OSPF接口状态机。
- 在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。
五台路由器组成一个广播网络,R5作为纯二层设备,R1~R4作为路由设备。R1~R4都规划在OSPF的Area0区域内,各路由器的IP地址及Router ID如图12所示。
网络中可以正常选举出DR和BDR时
假设R1~R4各接口的配置已经完成,这里仅给出OSPF相关的配置。
R1的配置
#
ospf 1 Router ID 10.1.1.1
area 0.0.0.0
network 192.168.1.0 0.0.0.255
#
R2的配置
#
ospf 1 Router ID 10.2.2.2
area 0.0.0.0
network 192.168.1.0 0.0.0.255
#
R3的配置
#
ospf 1 Router ID 10.3.3.3
area 0.0.0.0
network 192.168.1.0 0.0.0.255
#
R4的配置
#
ospf 1 Router ID 10.4.4.4
area 0.0.0.0
network 192.168.1.0 0.0.0.255
#
配置完成后,待网络稳定后查看当前网络中DR和BDR的选举情况。
在R1上查看OSPF的邻居信息。
<R1> display ospf peer
OSPF Process 1 with Router ID 10.1.1.1
Neighbors
Area 0.0.0.0 interface 192.168.1.1(GigabitEthernet1/0/1)'s neighbors
Router ID: 10.2.2.2 Address: 192.168.1.2
State: Full Mode:Nbr is Master Priority: 1
DR: 192.168.1.1 BDR: 192.168.1.2 MTU: 0
Dead timer due in 38 sec
Retrans timer interval: 5
Neighbor is up for 00:22:16
Authentication Sequence: [ 0 ]
Router ID: 10.3.3.3 Address: 192.168.1.3
State: Full Mode:Nbr is Master Priority: 1
DR: 192.168.1.1 BDR: 192.168.1.2 MTU: 0
Dead timer due in 35 sec
Retrans timer interval: 5
Neighbor is up for 00:21:30
Authentication Sequence: [ 0 ]
Router ID: 10.4.4.4 Address: 192.168.1.4
State: Full Mode:Nbr is Master Priority: 1
DR: 192.168.1.1 BDR: 192.168.1.2 MTU: 0
Dead timer due in 33 sec
Retrans timer interval: 5
Neighbor is up for 00:20:24
Authentication Sequence: [ 0 ]
可以看出,该网络已经完成了DR和BDR的选举,R1是DR,R2是BDR,R3和R4是DR Other。这里R1是DR,R2是BDR跟系统的启动顺序是直接相关的。本例中按照R1、R2、R3、R4的顺序依次启动设备,所以R1和R2首先完成了初始化,自然成为了DR和BDR。
在R1、R2、R3和R4上查看OSPF邻居的概要信息。
<R1> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 Full
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 Full
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 Full
----------------------------------------------------------------------------
Total Peer(s): 3
<R2> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 Full
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 Full
----------------------------------------------------------------------------
Total Peer(s): 3
<R3> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.3.3.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 Full
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R4> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.4.4.4
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 Full
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
可以看出,R1、R2和其他三台路由器的邻居关系都是Full,而R3和R4之间的邻居关系是2-Way状态。这表示DR、BDR与邻居间建立的是邻接关系,而DR Other之间建立的只是邻居关系。OSPF邻居状态的详细描述,请参见OSPF邻居状态机。
网络中无法选举出BDR时
如果在R2、R3、R4的接口GE1/0/1上执行ospf dr-priority命令将接口的DR优先级配置为0,那么这个时候这三台路由器将失去DR和BDR的选举资格,只能作为DR Other,网络中仅存在一台具备DR和BDR选举资格的路由器,就是R1。
在R1上查看OSPF邻居信息。
可以看到,此时DR是R1,BDR显示为None,即网络中不存在BDR。
<R1> display ospf peer
OSPF Process 1 with Router ID 10.1.1.1
Neighbors
Area 0.0.0.0 interface 192.168.1.1(GigabitEthernet1/0/1)'s neighbors
Router ID: 10.2.2.2 Address: 192.168.1.2
State: Full Mode:Nbr is Master Priority: 0
DR: 192.168.1.1 BDR: None MTU: 0
Dead timer due in 38 sec
Retrans timer interval: 5
Neighbor is up for 00:04:31
Authentication Sequence: [ 0 ]
Router ID: 10.3.3.3 Address: 192.168.1.3
State: Full Mode:Nbr is Master Priority: 0
DR: 192.168.1.1 BDR: None MTU: 0
Dead timer due in 35 sec
Retrans timer interval: 5
Neighbor is up for 00:03:45
Authentication Sequence: [ 0 ]
Router ID: 10.4.4.4 Address: 192.168.1.4
State: Full Mode:Nbr is Master Priority: 0
DR: 192.168.1.1 BDR: None MTU: 0
Dead timer due in 33 sec
Retrans timer interval: 5
Neighbor is up for 00:03:36
Authentication Sequence: [ 0 ]
在R1、R2、R3和R4上查看OSPF邻居的概要信息。
可以看出,R2、R3、R4分别和R1建立了邻接关系(状态为FULL),而R2、R3、R4之间的邻居状态只停留在2-Way的状态。
<R1> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 Full
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 Full
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 Full
----------------------------------------------------------------------------
Total Peer(s): 3
<R2> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R3> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.3.3.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R4> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.4.4.4
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 Full
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
由此可知,如果在一个广播网络或NBMA网络上只有一台路由器具有选举资格,那么这台路由器将成为DR,并且在这个网络上没有BDR,其他所有的路由器都将只和DR建立邻接关系。
网络中无法选举出DR和BDR时
在以上配置的基础上,如果在R1的接口GE1/0/1上执行ospf dr-priority命令将接口的DR优先级配置为0,则R1也失去DR、BDR的选举资格。此时该网络中将没有任何路由器具备DR和BDR的选举资格。
在R1上查看OSPF邻居信息。
<R1> display ospf peer
OSPF Process 1 with Router ID 10.1.1.1
Neighbors
Area 0.0.0.0 interface 192.168.1.1(GigabitEthernet1/0/1)'s neighbors
Router ID: 10.2.2.2 Address: 192.168.1.2
State: Full Mode:Nbr is Master Priority: 0
DR: None BDR: None MTU: 0
Dead timer due in 38 sec
Retrans timer interval: 5
Neighbor is up for 00:00:00
Authentication Sequence: [ 0 ]
Router ID: 10.3.3.3 Address: 192.168.1.3
State: Full Mode:Nbr is Master Priority: 0
DR: None BDR: None MTU: 0
Dead timer due in 35 sec
Retrans timer interval: 5
Neighbor is up for 00:00:00
Authentication Sequence: [ 0 ]
Router ID: 10.4.4.4 Address: 192.168.1.4
State: Full Mode:Nbr is Master Priority: 0
DR: None BDR: None MTU: 0
Dead timer due in 33 sec
Retrans timer interval: 5
Neighbor is up for 00:00:00
Authentication Sequence: [ 0 ]
在R1、R2、R3和R4上查看OSPF邻居的概要信息。
可以看出,此时所有的邻居状态都只停留在2-Way的状态,网络不能建立邻接关系,各个路由器之间不能完成路由信息的交互。
<R1> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R2> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R3> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.3.3.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.4.4.4 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
<R4> display ospf 1 peer brief
OSPF Process 1 with Router ID 10.4.4.4
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/1 10.1.1.1 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.2.2.2 2-Way
0.0.0.0 GigabitEthernet1/0/1 10.3.3.3 2-Way
----------------------------------------------------------------------------
Total Peer(s): 3
由此可知,如果在一个广播网络或NBMA网络上不存在具备DR和BDR选举资格的路由器,那么这个网络上将没有DR或者BDR,而且也不会建立任何邻接关系。这种情况下,网络上所有路由器的邻居状态都将停留在2-Way状态。
OSPF状态机
OSPF设备从接口获取链路信息后,与相邻设备建立邻接关系,交互这些信息。在建立邻接关系之前,邻居设备间需要明确角色分工才能正常建立连接。OSPF接口信息的State字段(可通过display ospf interface命令查看)表明了OSPF设备在对应链路中的作用。
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。该设备与接入该网络的所有其他设备建立邻接关系。
OSPF接口根据不同的情况(即输入事件)在各状态中进行灵活转换,这样就形成了一个高效运作的接口状态机,如图13所示。
下表列出了不同状态切换时的输入事件InputEvent(图13中简称IE)。
OSPF接口状态切换的输入事件
输入事件 | 描述 |
---|---|
IE1 | InterfaceUP:底层协议表明接口是可操作的。 |
IE2 | WaitTimer:等待定时器超时,表明DR和BDR选举等待时间结束。 |
IE3 | BackupSeen:设备已检测过网络中是否存在BDR。发生这个事件主要有下面两种方式: · 接口收到邻居设备的Hello报文,宣称自己是BDR。 · 接口收到邻居设备的Hello的报文,宣称自己是DR,而没有指明有BDR。 · 这都说明邻居间已进行了相互通信,可以结束Waiting状态了。 |
IE4 | 接口所在的设备在网络中被选举为DR。 |
IE5 | 接口所在的设备在网络中被选举为BDR。 |
IE6 | 接口所在的设备在网络中没有被选举为DR或BDR。 |
IE7 | NeighborChange:与该接口相关的邻居关系变化的事件发生,这表明DR和BDR需要重新选举。下面的这些邻居关系变化可能会导致DR和BDR重新选举: · 接口所在的设备和一个邻居设备建立了双向通信关系。 · 接口所在的设备和一个邻居设备之间丢失了双向通信关系。 · 通过邻居设备发送的Hello报文检测到邻居设备重新宣称自己是DR或BDR。 · 通过邻居设备发送的Hello报文再一次检测到邻居设备宣称自己不再是DR或BDR。 · 通过邻居设备发送的Hello报文再一次检测到相邻设备的DR优先级都已经改变。 |
IE8 | UnLoopInd:网管系统或者底层协议表明接口不再处于环回状态。 |
IE9 | InterfaceDown:底层协议表明接口不可操作。任何一种状态都可能触发此事件切换到Down状态。 |
IE10 | LoopInd:网管系统或者底层协议表明接口处于环回状态。任何一种状态都可能触发此事件切换到Loopback状态。 |
输入事件 | 描述 |
---|---|
IE1 | Start:以HelloInterval间隔向邻居设备发送Hello报文,尝试建立邻居关系。仅NMBA网络适用。 |
IE2 | HelloReceived:从邻居设备收到一个Hello报文。 |
IE3 | 2-WayReceived:从邻居设备收到的Hello报文中包含了自己的RouterID,邻居间建立了双向通信关系。接下来会进行判断: · IE3(Y):如果相邻设备间应当建立邻接关系,会将邻居状态切换为ExStart。 · IE3(N):如果相邻设备间不应当建立邻接关系,只建立邻居关系,会将邻居状态切换为2-Way。 |
IE4 | NegotiationDone:邻居间主从关系已经协商完成,DD序列号已经交换。 |
IE5 | ExchangeDone:邻居间成功交换了数据库描述报文。接下来会进行判断: · IE5(Y):如果链路状态请求列表为空,会将邻居状态切换为Full状态,表示链路状态数据已全部交换完成,邻居间建立了完全的邻接关系。 · IE5(N):如果链路状态请求列表不为空,会将邻居状态切换为Loading状态,开始或继续向邻居发送LSR报文,请求还没有接收到的链路状态数据。 |
IE6 | LoadingDone:链路请求状态列表为空。 |
路由器类型 | 含义 |
---|---|
区域内路由器(Internal Router) | 该类设备的所有接口都属于同一个OSPF区域。 |
区域边界路由器ABR(Area Border Router) | 该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
骨干路由器(Backbone Router) | 该类设备至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部设备都是骨干路由器。 |
自治系统边界路由器ASBR(AS Boundary Router) | 与其他AS交换路由信息的设备称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。 |
路由类型 | 含义 |
---|---|
Intra Area Routes | 区域内路由。从区域内生成的且目的地属于该区域的路由。 |
Inter Area Routes | 区域间路由。来自其他区域的路由。 |
External Routes | 外部路由。引入其他路由协议或不同OSPF进程的路由。根据路由开销的计算方式,外部路由可以分为以下两类: |
区域类型 | 作用 | 说明 |
---|---|---|
普通区域 | 缺省情况下,OSPF区域被定义为普通区域。普通区域包括: | |
Stub区域 | Stub区域是一些特定的区域,Stub区域的ABR不传播它们接收到的自治系统外部路由,因此这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。Stub区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。一般情况下,Stub区域位于自治系统的边界,是只有一个ABR的非骨干区域,为保证到自治系统外的路由依旧可达,Stub区域的ABR将生成一条缺省路由,并发布给Stub区域中的其他非ABR路由器。Totally Stub区域允许ABR发布Type3缺省路由,不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 | |
NSSA(Not-So-Stubby Area)区域 | NSSA是Stub区域的一个变形,它和Stub区域有许多相似的地方。NSSA区域不允许存在Type5 LSA。NSSA区域允许引入自治系统外部路由,携带这些外部路由信息的Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,泛洪到整个OSPF域中。Totally NSSA区域不允许发布自治系统外部路由和区域间的路由,只允许发布区域内路由。 |
区域类型 | 作用 |
---|---|
普通区域 | 缺省情况下,普通OSPF区域内的OSPF路由器是不会产生缺省路由的,即使它有缺省路由。当网络中缺省路由通过其他路由进程产生时,路由器必须将缺省路由通告到整个OSPF自治系统中。实现方法是在ASBR上手动通过命令进行配置,产生缺省路由。配置完成后,路由器会产生一个缺省ASE LSA(Type5 LSA),并且通告到整个OSPF自治系统中。 |
Stub区域 | Stub区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。区域内的路由器必须通过ABR学到自治系统外部的路由。实现方法是ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统的外部路由就可以通过ABR到达。 |
Totally Stub区域 | Totally Stub区域既不允许自治系统外部的路由(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。区域内的路由器必须通过ABR学到自治系统外部和其他区域的路由。实现方法是配置Totally Stub区域后,ABR会自动产生一条缺省的Summary LSA(Type3 LSA)通告到整个Stub区域内。这样,到达自治系统外部的路由和其他区域间的路由都可以通过ABR到达。 |
NSSA区域 | NSSA区域允许引入通过本区域的ASBR到达的少量外部路由,但不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播。即到达自治系统外部的路由只能通过本区域的ASBR到达。只配置了NSSA区域是不会自动产生缺省路由的。此时,有两种选择: |
Totally NSSA区域 | Totally NSSA区域既不允许其他区域的外部路由ASE LSA(Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。区域内的路由器必须通过ABR学到其他区域的路由。实现方法是配置Totally NSSA区域后,ABR会自动产生一条缺省的Type3 LSA通告到整个NSSA区域内。这样,其他区域的外部路由和区域间路由都可以通过ABR在区域内传播。 |
OSPF LSA类型
OSPF网络中划分了不同的区域,每个区域都维护自己独立的LSDB,同时路由器也被定义成不同的类型。封装了路由描述信息的LSA根据路由器的类型也可以分门别类。
图22是一个被划分区域的OSPF网络。R4上配置了静态路由,在R4上将静态路由引入到OSPF进程中。
R1、R2、R3、R4的Router ID及各接口的IP地址如表所示。
表 数据规划
设备 | Router ID | 接口IP地址 |
---|---|---|
R1 | 10.1.1.1/32 | GE1/0/1:192.168.12.1/24 |
R2 | 10.2.2.2/32 | GE1/0/2:192.168.12.2/24GE1/0/1:192.168.23.1/24 |
R3 | 10.3.3.3/32 | GE1/0/2:192.168.23.2/24GE1/0/1:192.168.34.1/24 |
R4 | 10.4.4.4/32 | GE1/0/2:192.168.34.2/24 |
下面结合图22所示的网络介绍各类LSA。
Router-LSA是一种最基本的LSA,即Type1 LSA。
OSPF网络里的每一台路由设备都会发布Type1 LSA。这种类型的LSA用于描述设备的链路状态和开销,在路由器所属的区域内传播。以R2为例,如图23所示,R2在Area 0、Area 1会分别发布Router-LSA。
以R2在接口GE1/0/1上泛洪的一条Router-LSA为例,该LSA中包含的信息如图24所示。
LSA报文包括LSA头部和LSA信息字段。所有类型的LSA报文,其LSA头部包含的字段都是一样的,唯一不同的是Link State ID字段含义。在LSA头部中,主要关注以下三个字段:
- Link-State Advertisement Type:LSA类型。
- Link State ID:链路状态ID。在Router-LSA中代表始发该LSA的设备的Router ID,这里即是R2自己的Router ID。
- Advertising Router:通告路由器。
Router-LSA的信息字段有三个,用于将自己连接的所有链路的状况以及开销告诉该LSA泛洪区域的其他路由器。
图3所示的LSA描述的信息为:链路类型(Type)为一个传送网络(Transit),DR接口的IP地址(ID)为192.168.23.2,和网络相连的通告路由器接口的IP地址是192.168.23.1(Data),到达该网络的开销(Metric)是1。收到该LSA报文的路由器根据这些链路状态的描生成拓扑。
其中,Link Type有四种类型,并且ID和Data的值会根据Link Type而有不同:
- 1-P2P(点对点):此时ID表示邻居路由设备的Router ID,Data表示和网络相连的通告路由器接口的IP地址。
- 2-Transit(传送网络):此时ID表示DR接口的IP地址,Data表示和网络相连的通告路由器接口的IP地址。
- 3-Stub(末梢网络):此时ID表示IP网络或子网地址,Data表示网络的IP地址或子网掩码。
- 4-Virtual Link(虚链路):此时ID表示邻居路由设备的Router ID,Data表示通告路由器接口的MIB-II ifIndex值。
Network-LSA,也就是Type2 LSA,由DR(Designated Router)产生,描述本网段的链路状态,在所属的区域内传播。如图25所示,R3向R2发送一条Network-LSA,列出了所有与DR形成完全邻接关系的路由器的Router ID。
该Network-LSA中包含的信息如图26所示。
在Network-LSA中,Link State ID字段的含义是DR接口上的IP地址。
通过Router-LSA和Network-LSA在区域内洪泛,区域内每个路由器可以完成LSDB同步,这就解决了区域内部的通信问题。
Network-summary-LSA,也叫Type3 LSA,由ABR发布,用来描述区域间的路由信息。ABR将Network-summary-LSA发布到一个区域,通告该区域到其他区域的目的地址。实际上,ABR是将区域内部的Type1和Type2的信息收集起来并汇总之后扩散出去,这就是Summary的含义。如图6所示,R2作为ABR,将Area 0和Area 1中的路由信息分别发布对方区域。
如图28所示,是R2在接口GE1/0/1上发布的一条Network-summary-LSA。
在Network-summary-LSA中,Link State ID字段代表该LSA所描述网络的网络地址。从LSA的信息中可以看出,该LSA由R2发布(10.2.2.2),可以到达192.168.12.0,掩码为255.255.255.0的网络,代价为1。R2将Area 1中的网络地址在Area 0中发布,从而让Area 0中的路由器知道去该网络的路径,实现区域间的通信。
如果—台ABR在与它本身相连的区域内有多条路由可以到达目的地,那么它将只会始发单一的一条网络汇总LSA到骨干区域,而且这条网络汇总LSA是上述多条路由中代价最低的。
Network-summary-LSA不会通告给Totally Stub和Totally NSSA区域。
ASBR-summary-LSA,也叫Type4 LSA,由ABR发布,描述到ASBR的路由信息,并通告给除ASBR所在区域的其他相关区域。如图29所示,R3作为ABR通告ASBR-summary-LSA到Area 0中。
ASBR-summary-LSA信息如图30所示。其中,Link State ID表示该LSA所描述的ASBR的Router ID(10.4.4.4),即R4,发布该LSA的路由设备是R3(10.3.3.3),R3到达R4的代价是1。
AS-external-LSA,也叫Type5 LSA,由ASBR产生,描述到AS外部的路由,通告到除Stub区域和NSSA区域以外所有的区域。如图10所示,R4作为ASBR发布了一条OSPF AS到外部目的网络的路由信息。
AS-external-LSA中包含的信息如图32所示。其中,Link State ID代表外部网络目的IP地址,转发地址是指到达该外部网络的数据包应该被转发到的地址。此处的转发地址为0.0.0.0表示数据包将被转发到始发ASBR上。
除了上述几种LSA之外,还有一种比较特殊的LSA,NSSA LSA,也叫Type7 LSA。NSSA LSA由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。NSSA区域的ABR收到NSSA LSA时,会有选择地将其转化为Type5 LSA,以便将外部路由信息通告到OSPF网络的其它区域。
如果图22中的Area 2为NSSA区域,R4的接口GE1/0/2会始发一条NSSA LSA,如图33所示。
NSSA LSA所有的字段与AS-external-LSA字段均相同,但这两种LSA泛洪的区域不同。AS-external-LSA是在整个AS泛洪,而NSSA LSA仅在NSSA区域中泛洪。
NSSA区域允许引入外部路由,但描述外部路由信息的NSSA LSA只能在本区域泛洪。为了使外部路由能被引入到除NSSA区域以外的其他区域,NSSA LSA在ABR(R3)上会转换成AS-external-LSA,并且泛洪到骨干区直至整个自治系统中。
- P-bit(Propagate bit)用于告知转化路由器该条Type7 LSA是否需要转化。
- 缺省情况下,转化路由器是NSSA区域中Router ID最大的ABR。
- 只有P-bit置位并且FA(Forwarding Address)不为0的NSSA LSA才能转化为AS-external-LSA。FA用来表示发送的某个目的地址的报文将被转发到FA所指定的地址。
- 区域边界路由器产生的NSSA LSA缺省路由不会置位P-bit。
Opaque LSA包括Type9 LSA,Type10 LSA和Type11 LSA,用于OSPF的扩展通用机制。
LSA在各区域中传播的支持情况如表所示。
表 LSA在各区域中传播的支持情况
区域类型 | Router-LSA(Type1) | Network-LSA(Type2) | Network-summary-LSA(Type3) | ASBR-summary-LSA(Type4) | AS-external-LSA(Type5) | NSSA LSA(Type7) |
---|---|---|---|---|---|---|
普通区域(包括标准区域和骨干区域) | 是 | 是 | 是 | 是 | 是 | 否 |
Stub区域 | 是 | 是 | 是 | 否 | 否 | 否 |
Totally Stub区域 | 是 | 是 | 否 | 否 | 否 | 否 |
NSSA区域 | 是 | 是 | 是 | 否 | 否 | 是 |
Totally NSSA区域 | 是 | 是 | 否 | 否 | 否 | 是 |
请问一下上面的左右选项卡是怎么实现的,谢谢。
兔砸,兔砸
有事?! ::bx:baiyan::