随着Internet技术在全球范围的飞速发展,OSPF已成为目前应用最广泛的路由协议之一。OSPF(Open Shortest Path First)路由协议是由IETF(Internet Engineering Task Force)IGP工作组提出的,是一种基于SPF算法的路由协议,目前使用的OSPF协议是其第2版。
OSPF 概述
OSPF的特性及术语
OSPF的特性
OSPF(Open Shortest Path First,开放最短路由优先协议)是一种典型的链路状态路由协议。在 IP 网络上,它通过收集和传递自治系统的链路状态来动态地发现并传播路由。采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握整个网络的拓扑结构,独立计算路由。因为RIP路由协议不能服务于大型网络,所以,IETF的IGP工作组特别开发出链路状态协议——OSPF。OSPF作为一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治系统中的路由器之间交换路由信息。
OSPF的特性如下:
(1)快速收敛;
(2)能够适应大型网络;
(3)能够正确处理错误路由信息;
(4)使用区域,能够减少单个路由器的CPU负担,构成结构化的网络;
(5)是无类别的路由协议,完全支持CIDR和VLSM;
(6)支持多条路径等价负载均衡;
(7)使用组播地址来进行信息互通,减少了非OSPF路由器的负载;
(8)使用路由标签来表示来自外部区域的路由;
(9)支持简单口令和MD5认证;
(10)OSPF路由协议的管理距离是110;
(11)OSPF路由协议采用开销(Cost)作为度量标准。
术语
(1)链路(Link):链路就是路由器用来连接网络的接口。
(2)链路状态(Link State):用来描述路由器接口及其与邻居路由器的关系。所有链路状态信息构成链路状态数据库。
(3)最短路径优先(SPF)算法:SPF算法是OSPF路由协议的基础。SPF算法有时也被称为Diikstra算法,这是因为最短路径优先算法是Dijkstra发明的。利用SPF,路由器独立地计算出到达任意目的地的最佳路由。
(4)区域(Area):指有相同的区域标志的一组路由器和网络的集合。在同一个区域内的路由器有相同的拓扑结构数据库。
(5)自治系统(Autonomous System):采用同一种路由协议交换路由信息的路由器及其网络构成一个自治系统。
(6)成本(Cost):也称为链路开销,用来描述从接口发送数据包所需要花费的代价带宽越大,开销越小。成本的计算公式为:
1
0
8
/
带宽(
b
p
s
)
10^8/带宽(bps)
108/带宽(bps),带宽是接口下使用bandwidth命令设置的值。例如,默认情况下,快速以太网的带宽为100Mbps,所以开销是1。
如结果出现小数,会舍弃小数部分取整(如果整数部分为0,则Cost记为1)
(7)邻接(Adjacencies):路由器之间以交换路由信息为目的而建立起来的一种关系。
(8)链路状态数据库(Link State Database):代表网络的拓扑结构,其中包含了网络中所有的路由器的链路状态信息。在一个区域内的所有的路由器有着相同的链路状态数据库。
(9)拓扑结构数据库(Topological Database):也叫链路状态数据库。
(10)转发数据库(Forwarding Database)/路由表(Routing Table):每个路由器对自己的拓扑结构数据库运行SPF算法得出的路由条目,每台路由器的路由表是不相同的。
邻居及邻接关系
OSPF网络类型
根据路由器所连接的物理网络不同,OSPF将网络主要划分为四种类型:广播多路访问(Broadcast Multi Access,BMA)型、非广播多路访问(None Broadcast Multi Access,NBMA)型、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。
网络类型 | 确定性特性 | 是否选举DR | Hello间隔/s | Dead间隔/s |
---|---|---|---|---|
广播多路访问 | Ethernet | 是 | 10 | 40 |
非广播多路访问 | Frame Relay、X.25 | 是 | 30 | 120 |
点到点 | PPP、HDLC | 否 | 10 | 40 |
点到多点 | 管理员配置 | 否 | 30 | 120 |
Hello协议
在网络中,OSPF路由器可以周期性发送Hello包来建立和维持邻接关系。管理OSPF的Hello包交换的规则称为Hello协议(Hello Protocol)。Hello包的发送周期与OSPF网络类型有关。当Hello包中的几个字段的内容互相一致时,相邻的OSPF路由器才有可能形成Neighbor关系,Neighbor保存在 Neighbor表里。Hello协议的目的如下:
(1)用来发现OSPF Neighbor;
(2)Hello包包含了多个需要OSPF路由器协商的参数,以形成Neighbor的关系;
(3)可以用来维持邻接关系;
(4)用来确定DRBDR路由器的选择。尽管Hello包比较小,但它含有OSPF的报头。
各个字段的含义如下:
(1)版本:定义所采用的OSPF路由协议的版本。
(2)类型:定义OSPF报文类型,OSPF数据包共有五种。
(3)包长度:定义整个数据包的长度。
(4)路由器ID:路由器的32位长的一个惟一标识符,以IP地址来表示。
(5)区域ID:用于区分OSPF数据包属于的区域号,所有的OSPF数据包都属于个特定的OSPF区域。
(6)校验和:用于标记数据包在传递时有无错误。
(7)身份认证类型:定义OSPF认证类型。OSPF认证类型有如下3种:
0 表示不进行认证,是默认的类型;
1 表示采用简单口令认证;
2 表示采用MD5认证
(8)身份认证:包含OSPF认证信息,长为8个字节。
(9)网络掩码:指发送接口的网络掩码,必须与接收接口的网络掩码相同,以确保它
们位于同一个网段中。
(10)Hello间隔:邻居路由器发送Hello包的周期。
(11)路由器优先级:在选择DR和BDR时使用,优先级越高,被选为DR或BDR的可能性越大。每个接口上都会有优先级,如果优先级为0时,表示不参加DR、BDR选举。
(12)失效间隔:路由器在认为其邻居路由器失效之前等待接收来自邻居Hello包的时间。默认是Hello间隔的4倍。
(13)指定路由器(DR)和备用指定路由器(BDR):在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全邻接关系而引起的大量开销,OSPF要求在区域中选举一个
DR,每个路由器都与之建立完全邻接关系。DR负责收集所有的链路状态信息,并发布给其他路由。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR 担负起DR的职责,而且所有其他路由器只与DR和BDR建立邻接关系,出于这个原因,DR和BDR有它们自己的组播地址 224.0.0.6。当DR和BDR需要发送一个链路状态更新(Link State Update,LSU)时,它会将更新发送给组播地址 224.0.0.5(对应所由路由器),而非DR/BDR路由器将它们的链路状态更新发送到地址224.0.0.6。
(14)邻居:是与之交换更新以同步数据库的另一台路由器。
OSPF状态
OSPF路由协议依靠5种不同的数据包来识别它们的邻居,并更新链路状态信息。
类型 | 描述 |
---|---|
Type 1:Hello | OSPF使用Hello分组建立和维护邻接关系。在一个路由器能够给其他路由器分发它的邻居信息前,必须先问候它的邻居们。 |
Type 2:数据库描述(Database Description,DBD)分组 | DBD分组不包含完整的“链路状态数据库”信息,只包含数据库中每个条目的概要。当一个路由器首次连入网络,或者刚刚从故障中恢复时,它需要完整的“链路状态数据库”信息。此时,该路由器首先通过hello分组与邻居们建立双向通信关系,然后将会收到每个邻居反馈的DBD分组。新连入的这个路由器会检查所有概要,然后发送一个或多个链路状态请求分组,取回完整的条目信息。 |
Type 3:链路状态请求(Link State Request,LSR)分组 | LSR分组用来请求邻居发送其链路状态数据库中某些条目的详细信息。当一个路由器与邻居交换了数据库描述分组后,如果发现它的链路状态数据库缺少某些条目或某些条目已过期,就使用LSR分组来取得邻居链路状态数据库中较新的部分。 |
Type 4:链路状态更新(Link State Update,LSU)分组 | LSU分组被用来应答链路状态请求分组,也可以在链路状态发生变化时实现洪泛(flooding)。在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就要使用LSU,用洪泛法向全网更新链路状态。 |
Type 5:链路状态确认(Link State Acknowledgment,LSAck)分组 | LSAck分组被用来应答链路状态更新分组,对其进行确认,从而使得链路状态更新分组采用的洪泛法变得可靠。 |
在OSPF邻接关系建立的过程中,接口可以处于下面7种状态之一,并且从Down状态到FullAdiacency状态,逐步进行。
(1)Down
没有收到任何Hello包的时候,或是在DeadInterval中,没有收到Hello包。
(2)Init
收到第一个Hello包,就进入Init状态。路由器在建立任何关系之前必须先从一个邻居路由器那里收到一个 Hello包。
(3)Two-Way
当路由器看到自己的路由器ID在邻居发来的Hello包里,就宣布与对方进入Two-Way状态。如果是多路访问型网络,就进入DR与BDR选举的过程。
(4)Exstart
Exstart状态是用DBD(Database Description,数据库描述)数据包建立的,两台路由器通过DBD数据来决定Master/Slave关系,并利用DBD数据包来交换数据库信息。
(5)Exchange
邻居路由器使用DBD数据包来相互发送它们的链路状态信息。
(6)Loading
在相互描述各自的链路状态数据库后,路由器用LSR数据包来请求更新完整的信息。当路由器收到一个LSR数据包后,它会用LSU进行回应,LSU数据包需要LSAck进行确认。
(7)Full Adiacency
完成了LSA的交换,路由器进入Full Adjacency状态。每台路由器都维护着一张邻居路由器列表。
OSPF协议配置
- OSPF在有组播发送能力的链路层上以组播地址发送协议报文,既达到了广播的作用,又最大程度地减少了对其他网络设备的干扰。
- OSPF可以划分区域,路由更新信息只在本区域内传播,不同域间不交换路由信息,以减少路由存储和维护的信息量。其中,区域是在逻辑上将路由器划分为不同的区域,不同的区域间通过ABR(边界路由器)来传递路由信息。划分区域给OSPF协议的处理带来了很大的变化。每一个网段必须属于一个区域,或者说每个运行OSPF协议的接口必须指明属于某一特定的区域,每个区域用区域号(Area ID)来标识。区域号是一个32位的无符号整数,范围0~4 294 967 295,其中区域ID为0(也可以表示为0.0.0.0)时表示的是主干区域。
OSPF基本配置命令说明
- router ospf:该命令用来启动OSPF进程,命令格式为“router ospf <Process ID>”,其中Process ID(PID)是OSPF的进程号,它的范围是 1~65 535,process ID可以在指定范围内随意设置,它只对本地路由器内部有意义,不同的路由器PID可以相同,也可以不同。
- network ip:该命令用来定义参与OSPF的子网地址,它的命令的格式为“network ip <子网号> <子网掩码的反码 > area <区城号>”,在单个IP地址参与OSPF时也使用此命令。
- range:该命令用于定义某一特定范围子网的聚合,它的命令格式为“area <区域号> range <子网地址> <子网掩码 >”。
- passive-interface:该命令用来配置OSPF的被动接口。
- distribute-list:该命令用来配置路由器的过滤功能。OSPF可以引入其他路由协议产生的路由,引入后,还可以作为自己的外部路由在整个自治系统内传播。OSPF可以引入的外部路由有多种,包括静态路由、RIP 等内部网关协议和BGP外部网关协议的路由信息。OSPF路由过滤功能与RIP完全相同,配置方法也基本一致。
- distance:该命令用来配置或改变OSPF的管理距离。
以下3个命令用来配置引入外部路由到OSPF时的参数
7. redistribute metric:该命令用来配置引入外部路由的花费值(metric)。metric值范围为0~16 777 214。
8. redistribute tag:该命令用来配置引入外部路由时默认的标记值。标记能告诉OSPF,外部路由来源于什么路由协议。标记值为一个32位的数值,范围为0~4 294 967 295。
9. redistribute connected metric-type:该命令用来设置引入外部路由时默认的外部路由类型,OSPF中外部路由类型有类型1和类型2两种,分别对应两种不同的路由花费值的计算方式,默认情况下使用类型2,可通过命令“redistribute connected metric-type”修改外部路由类型。
配置命令的使用
- 配置参与OSPF的网络地址
router-test ( config) #router ospf 10
router-test ( config-router) #network 192.168.1.0 0.0.0.255 area 0
router-test ( config-router) exit
router-test ( config) # exit
Router-test#
- 配置单个IP地址参与OSPF
router-test ( config )# router ospf 10
Router-test( config-router) network 192. 168. 1.1 0. 0. 0. 0 area 0
router-test ( config-router) #exit
router-test ( config) # exit
Router-test#
- 使用area range命令定义参与OSPF的子网地址。
router-test ( config )# router ospf 10
router-test ( config-router) # area 0 range 212. 37. 123. 0 255. 255. 255. 0
router-test ( config-router) #exit
router-test ( config) # exit
Router-test#
- 配置被动接口。
路由器的配置命令:
router-test ( config )# router ospf 10
router-test ( config-router) #passive-interface ethernet0
router-test ( config-router) #exit
router-test ( config) # exit
Router-test#
另外,第三层交换机的配置命令如下:
router-test( config )#router ospf 60
router-test( config-router)#passive-interface vlan10
router-test( config-router) #end
router-test#
- 配置路由过滤
router-test ( config )#access-list 12 deny any
router-test ( config )# router ospf 10
router-test ( config-router) #distribute-list 10 out serial 0
router-test ( config-router) #end (end 直接退回到用户特权模式)
Router-test#
- 配置管理距离
router-test ( config )# router ospf 10
router-test ( config-router) # distance 100
router-test ( config-router) #end
Router-test#
- 配置引入外部路由的花费值
router-test ( config )# router ospf 10
router-test ( config-router) # redistribute metric 200
router-test ( config-router) #end
Router-test#
- 配置引入外部路由时默认的标记值
router-test ( config )# router ospf 10
router-test ( config-router) # redistribute tag 100
router-test ( config-router) #end
Router-test#
- 配置引入外部路由时默认的外部路由类型。
router-test ( config )# router ospf 10
router-test ( config-router) #redistribute connected metric-type 1 subnets
router-test ( config-router) #end
Router-test#
配置案例
路由器R1的配置
Router>enable
Router#configure terminal
Router(config)#hostname R1
R1(config)#interface FastEthernet0/0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface FastEthernet0/1
R1(config-if)#ip address 12.12.12.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#network 10.1.1.0 0.0.0.255 area 0
R1(config-router)#network 12.12.12.0 0.0.0.255 area 0
路由器R2的配置
Router>enable
Router#configure terminal
Router(config)#hostname R2
R2(config)#interface FastEthernet0/0
R2(config-if)#ip address 12.12.12.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface FastEthernet0/1
R2(config-if)#ip address 23.23.23.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#router ospf 1
R2(config-router)#network 23.23.23.0 0.0.0.255 area 0
R2(config-router)#network 12.12.12.0 0.0.0.255 area 0
路由器R3的配置
Router>enable
Router#configure terminal
Router(config)#hostname R3
R3(config)#interface FastEthernet0/0
R3(config-if)#ip address 23.23.23.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface FastEthernet0/1
R3(config-if)#ip address 192.168.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface loopback 0
R3(config-if)#ip address 3.3.3.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#router ospf 1
R3(config-router)#network 23.23.23.0 0.0.0.255 area 0
R3(config-router)#network 192.168.1.0 0.0.0.255 area 0
-
show ip route
该命令用来查看路由表
-
show ip protocols
该命令显示路由器上启动的IP路由协议,并对每种协议有用的信息给出一个汇总
-
show ip ospf
该命令显示OSPF进程及其细节,如路由器运行SPF算法的次数
-
show ip ospf neighbor
该命令用来查看OSPF邻居及其状态
-
show ip ospf interface f0/0
该命令可以查看运行OSPF所有或特定接口的情况。如果该命令后面跟路由器的具体接口,那么只显示特定接口的信息,否则显示所有运行OSPF协议的接口信息。
-
show ip ospf database
该命令用来查看OSPF链路状态数据库
理论习题
- OSPF是一种典型的链路状路由协议
- OSPF路由协议的管理距离是110
- OSPF路由协议利用开销为度量标准
- OSPF路由器利用最短路径优先算法,独立地计算出到达任意目的地的路由。
- 默认情况下,快速以太网的开销是1
- OSPF将网络划分为四种类型:BMA(广播多路访问型)、NBMA(非广播多路访问型)、Point-to-Point(点到点型)、点到多点
- Ethernet的Hello Interval为10秒,Dead Interval为40秒。
- NBMA网络的Hello Interval为30秒,Dead Interval为120秒
- OSPF路由器可以周期性发送Hello包来建立和维持邻接关系
- 当DR和BDR需要发送一个 LSU时,它会将更新发送给组播地址224.0.0.5
- OSPF接口优先级的范围是0~255。
- OSPF路由进程process-id必须指定范围在1~65535
- 网络区域为0的区域称为主于区域。
- show ip ospf neighbor用来查看邻居及其状态
- OSPF通过简单口令认证和信息摘要(MD5)认证两种方法启用认证功能
- OSPF路由器的类型分为内部路路由器、主干路由器、ABR、ASBR
- OSPF区域类型包括标准区域、主干区域、末节区域、完全末节区域、NSSA
- ABR区域负责把LSA Type 7转换成LSA Type 5
- OSPF 路由汇总的两种类型包括区城间路由汇总、外部路由汇总
- 如何确定路由器ID?
(1)如果在OSPF进程中指定了路由器ID,那么这是最优先的。
(2)如果没有在OSPF进程中指定路由器ID,那么选择IP地址最大的Loopback接口的IP地址为路由器ID;如果只有一个Loopback接口,那么路由器ID就是这个Loopback的地址
(3)如果没有Loopback接口,就选择最大的活动的物理接口的IP地址为路由器ID。
- OSPF的特性包括哪些?
(1)快速收敛;
(2)能够适应大型网络;
(3)能够正确处理错误路由信息;
(4)使用区域,能够减少单个路由器的CPU负担,构成结构化的网络;
(5)支持无类路由,完全支持超网、可变长子网等无类特性;
(6)支持多条路径等价负载均衡;
(7) 使用组播地址来进行信息互通,减少了非OSPF路由器的负载;
(8) 使用路由标签来表示来自外部区域的路由;
(9)支持简单口令和MD5认证;
(10)OSPF路由协议的管理距离是110;
(11)OSPF路由协议采用Cost作为度量标准