本文简要分析OSPF协议的原理和应用,利用Cisco Packet Tracer仿真器搭建环境,对OSPF协议进行实验配置,供学习记录。
文章目录
按照作用于AS的范围,常见路由协议可划分为两类:
- 内部网关协议 (Interior Gateway Protocols, IGP):具体包括RIP、OSPF、IS-IS、EIGRP等,一般由单个ISP运营于一个AS内,有统一的自治系统号,目前大型企业内部多使用OSPF、IS-IS,小型企业内部使用RIP或静态路由
- 外部网关协议 (Exterior Gateway Protocols, EGP):BGP是目前唯一使用的一种EGP协议,它是AS间的路由协议,一般用于不同ISP之间交换路由信息,以及大型企业、政府等具有较大规模的私有网络
下面对内部网关协议中的OSPF进行介绍:
一、基本原理
OSPF(Open Shortest Path First) 是一种链路状态路由协议,它克服了距离矢量路由协议依赖邻居进行路由决策的缺点,报文基于IP,多部署于中大型园区、企业或城域网中。
OSPF提出了“区域”的概念,将AS划分成多个逻辑区域,每个区域中所有路由器通过组播的方式 (224.0.0.5 或 225.0.0.6) 宣告链路状态建立并维护着一个相同的链路状态数据库 (Link State DataBase, LSDB),其中存放着接口的相关信息 (IP地址、带宽以及所连接的邻居等),OSPF路由器通过各自的LSDB,利用最短路径优先算法 (Shortest Path First, SPF, 也称为Dijkstra算法) 生成最短路径树并构造路由表,其路径开销 (Cost) 计算基于接口的带宽,每个区域的OSPF路由器负责各自区域的链路状态通告 (Link State Adervertisement, LSA) 传递及路由计算。
(一) 区域类型
划分多区域的优势在于收敛快、易于维护管理、方便扩展,区域的划分基于网段 (路由器接口),区域类型分为两类:
- 骨干区域 (传输区域):Area 0,1个AS中一般只存在1个Area 0区域
- 非骨干区域 (常规区域):Area x,1个AS中可以有多个Area x区域,根据能够学习的路由信息种类进而细分为四类:
标准区域 (Standard Area):正常传输数据的区域
末节区域 (Stub Area):禁用外部AS的信息
完全末节区域 (Totally Stub Area):禁用外部AS和区域间信息
非纯末节区域 (NSSA):禁用非直连的外部AS信息
常规区域只能和骨干区域交换LSA,常规区域相互之间无法交换LSA,因此所有的常规区域应该直接和骨干区域相连,骨干区域的功能类似中转站,将常规区域间的LSA信息进行转发和交换。
(二) 路由器类型
根据路由器接口所在区域的类型,相应地路由器分为四类:
- 内部路由器 (Internal Router, IR):所有接口都在同一个区域内,只维护本区域的LSDB
- 区域边界路由器 (Area Border Routers, ABR):同时属于两个以上的区域,其中必须包括骨干区域 (物理连接或通过虚链路连接),用于连接骨干区域和非骨干区域
- 骨干路由器 (BackBone Router, BR):所有ABR和位于骨干区域内的路由器都属于骨干路由器,只维护骨干区域的LSDB,
- 自治系统边界路由器 (AS Boundary Routers, ASBR):与其他AS交换路由信息的路由器,可以使用多种路由协议,可以是ABR,也可以是内部路由器
基本区域划分和路由器类型如下图所示:
(三) Router-ID
Router-ID是OSPF路由器的唯一身份标识,Router-ID格式与IP一致,可以手动进行配置,如果不配置系统则会自动将路由器环回接口 (Loopback Interface) 中最大的IP作为Router-ID,只要路由器在线,环回接口就处于活动状态,如果没有环回接口,则选择活动的物理接口中最大的IP作为Router-ID。
(四) DR / BDR / DROTHER
在一个OSPF区域中,当路由器之间建立邻居关系后,为避免LSA信息重复发送,选举一个路由器作为指定路由器 (Designated Router, DR),再选举一个路由器作为备份指定路由器 (Backup Designated Router, BDR),其他的路由器为非指定路由器 (DROTHER)。在LSA信息更新时,此区域内发生更新的路由器将LSA发送到DR,再由DR发送到其他区域内的路由器,一个区域内邻居路由器只和DR交换LSA信息,这样节省了网络流量。在DR出现故障时,BDR起着备份的作用,确保网络的可靠性。
DR和BDR的选举首先通过是通过时间,最先启动的OSPF路由器会启动一个定时器 (CISCO 40s),定时器结束前如果没有其他的OSPF启动,则这唯一的OSPF路由器当选为DR;当有多个OSFP路由器时则先比较优先级,优先级高的选为DR,次高的为BDR;如果优先级相同则通过比较Router-ID大小,Router-ID大的选为DR,次高的为BDR;其他的OSPF路由器为DROTHER。
(五) 网络类型
基于链路层网络协议,OSPF支持四种网络类型:
(注意网络类型不同于物理拓扑,其划分主要基于网络在链路层运行的协议)
- 点到点网络 (Point to Point, P2P):链路层协议如PPP和HDLC,此类网络不用进行DR和BDR的选举,直接形成邻接关系
- 广播多路访问网络 (Broadcast Multi-Access, BMA):链路层协议如以太网 (IEEE 802.3),可以 (泛洪) 发送广播和组播报文,需要进行DR和BDR的选举
- 非广播多路访问网络 (None Broadcast Multi-Access, NBMA):链路层协议帧中继、X.25,不能 (泛洪) 发送广播和组播报文,只能发送单播数据包
- 点到多点网络 (Point to Multi-Point, P2MP):需要将其他的网络类型强制更改为P2MP类型,常见如NBMA网络改为P2MP,可以 (泛洪) 发送广播和组播报文,无需选举DR和BDR
(六) 路由器状态
OSPF路由器在同步LSDB过程中,分为七种状态:
- Down:接口没有启用OSPF的状态,邻居失效后变为该状态
- Init:初始化状态,发送完HELLO包,状态就从Down变为Init
- 2-way:接收到了对方的HELLO包之后,从Initial变为2-way邻居状态,开启40秒定时器,相互间周期发送HELLO报文(10秒发一次),给足够的时间深度发现其他路由器发送的HELLO包,等待40秒定时器超时
- Exstart:定时器40秒超时后,状态变为Exstart,但是在变为Exstart状态前,会完成DR和BDR的选举,进入Exstart状态后立即选举主从路由器,引导接下来报文的发送
- Exchange:主从关系确认后,开始交换DBD报文 (本地LSA摘要信息),告知对端本地所有的LSA摘要信息
- Loading:发送完LSA摘要信息后,再通过发送LSR、LSU、LSACK报文更新LSA,学习对端路由器的LSA详细信息
- Full:LSA详细信息学习完毕后,状态变为Full邻接状态,LSDB完成同步,此时在单个域内所有路由器的LSDB相同
(七) 虚链路
非骨干区域和骨干区域之间通过ABR中转LSA,其他路由器需要向ABR建立一条虚链路 (虚链路只能跨一个区域),否则无法同步LSDB信息。如下所示,RT2与RT3建立虚链接后,使得Area2与Area0之间形成逻辑连接,否则LSDB信息无法同步。
骨干区域必须是一个整体,虚链路也可以将隔开的两个骨干区域相连接,如下所示,RT2与RT3建立虚链接后,Area0在逻辑上成为一个整体。
(八) 常见LSA类型
LSA类型 | 名称 | 作用 | 路由表符号及类型 |
---|---|---|---|
Type1 | Router LSA | 所有路由器都会产生,只在本区域内泛洪,用于通告路由器所有接口状态及开销 | O: 区域内路由 |
Type2 | Network LSA | 由一个多路访问网络中的DR产生,只在本区域内泛洪,用于向区域内的其它路由器通告网络信息以及接入此网络的路由器 | O: 区域内路由 |
Type3 | Network Summary LSA | 由ABR产生,用于通告与ABR相连的区域内所有路由器的路由信息,区域间路由指向通告LSA的ABR | IA: 区域间路由 |
Type4 | ASBR Summary LSA | 由ABR产生,用于通告ASBR的地址 (Router-ID),在整个AS的标准区域内泛洪 | IA: 区域间路由 |
Type5 | AS External LSA | 由ASBR产生,用于通告与ASBR相连的其他AS的路由信息,在整个AS的标准区域内泛洪 | E1/E2: 1/2类外部路由 |
Type7 | NSSA External LSA | 由连接到NSSA的ASBR产生,通告内容和Type5 LSA基本相同,区别在于只在产生此LSA的NSSA区域内部泛洪,可以通过ABR转换为Type5 LSA | N1/N2: 1/2类NSSA外部路由 |
(九) 工作过程
以常见的BMA类型网络为例,OSPF基本工作过程如下:
① 建立邻居关系:OSPF路由器初始化时,在同一区域的相邻路由器之间通过HELLO报文发现并建立邻居关系,路由器状态为2-way;
② 同步LSDB (建立邻接关系):互为邻居关系的路由器首先选举出DR/BDR,然后DROTHER和DR/BDR之间相互发送数据库描述报文 (Database Description, DD),如果发现DD描述信息和自身的LSDB信息不一致,则返回数据库状态请求报文 (Link State Request, LSR),收到LSR的路由器会发送数据库状态更新报文 (Link State Update, LSU),LSU内含完整的LSA信息,其中包括接口地址、带宽、邻居等链路状态信息,收到LSA的路由器会返回LSAck,并将信息保存在自身LSDB中,从而完成LSDB的同步,以上报文全部基于组播发送。邻接关系就是邻居路由器之间为完成LSDB同步而发生的LSA交互过程 (DROTHER只和DR/BDR之间建立邻接关系,DROTHER之间不会建立邻接关系),同步后单个区域内所有的路由器都会形成相同的LSDB,路由器状态为Full;
③ 构建路由表:路由器结合自身LSDB信息,使用SPF算法生成最短路径树,构建出各自的区域内路由表;区域间路由则依靠ABR完成,ABR会查找其相邻区域内的路由表,如果存在其他区域的路由信息,则每一条表项生成一条Type3类型的LSA,然后将Type3 LSA泛洪到其他相邻区域 (此类型LSA只有路由信息,不包含链路状态信息,不参与SPF计算),在泛洪区域的路由器会根据Type3 LSA生成区域间路由信息,路由的下一跳指向发布LSA的ABR,路由信息直接加入路由表项;
④ 路由信息维护:一方面,邻居之间根据配置固定时间交换HELLO数据包作为心跳消息,并且每隔30分钟DR会定期重发一次DD包进行LSDB的同步;另一方面,当网络拓扑中节点状态发生了变化,比如有节点故障或者新增节点,那么发生变化的节点将立刻向DR发送LSU更新LSA信息,再由DR向DROTHER发送LSU更新其他路由器的LSA信息,完成LSDB同步,最后会重新计算生成新的路由表项。
(十) 优缺点分析
优点:
- 收敛速度快,能够在最短的时间内将路由变化传递到整个自治系统
- 没有跳数限制,支持大量网络节点,适用于大规模网络
- 采用路径开销 (Cost) 作为度量标准,路径开销计算基于接口的带宽
- 划分区域进行管理,减少大规模网络中协议运行的流量和开销
缺点:
- 配置复杂,需要区分不同的网络区域和路由器类型
- 路由负载均衡性较差,通常只路由最佳路径,而不能均衡不同路径间的流量
二、实验配置
(一) 实验拓扑
以BMA型网络为例,拓扑如下:
(二) 配置命令
(VLAN、DHCP、NAT等基础配置略过,只记录路由配置部分)
# R0配置
R0(config)# ip route 0.0.0.0 0.0.0.0 1.1.1.1 // 边界路由器设置静态路由指向ISP的路由器
# R1配置
R1(config)# interface loopback 0 // 配置环回接口,接口地址用于配置Router-ID,范围 0-2147483647
R1(config-if)# ip address 10.10.10.1 255.255.255.255
R1(config-if)# exit
R1(config)# router ospf 1 // 启动OSPF进程,范围 1-65535
R1(config-router)# router-id 10.10.10.1 // 配置Router-ID
R1(config-router)# network 1.1.1.0 0.0.0.255 area 2 // 宣告直连网段和所属区域,用反向掩码表示子网掩码
R1(config-router)# network 2.2.2.0 0.0.0.255 area 2
R1(config-router)# network 10.10.10.1 0.0.0.0 area 2
R1(config-router)# exit
# R2配置
R2(config)# interface loopback 0
R2(config-if)# ip address 10.10.10.2 255.255.255.255
R2(config-if)# exit
R2(config)# router ospf 1
R2(config-router)# router-id 10.10.10.2
R2(config-router)# area 1 virtual-link 10.10.10.3 // 建立虚连接,指向跨越区域ABR的Router-ID
R2(config-router)# network 2.2.2.0 0.0.0.255 area 2
R2(config-router)# network 3.3.3.0 0.0.0.255 area 1
R2(config-router)# network 10.10.10.2 0.0.0.0 area 1
R2(config-router)# exit
# R3配置
R3(config)# interface loopback 0
R3(config-if)# ip address 10.10.10.3 255.255.255.255
R3(config-if)# exit
R3(config)# router ospf 1
R3(config-router)# router-id 10.10.10.3
R3(config-router)# area 1 virtual-link 10.10.10.2
R3(config-router)# network 3.3.3.0 0.0.0.255 area 1
R3(config-router)# network 4.4.4.0 0.0.0.255 area 0
R3(config-router)# network 10.10.10.3 0.0.0.0 area 1
R3(config-router)# exit
# R4配置
R4(config)# interface loopback 0
R4(config-if)# ip address 10.10.10.4 255.255.255.255
R4(config-if)# exit
R4(config)# router ospf 1
R4(config-router)# router-id 10.10.10.4
R4(config-router)# network 4.4.4.0 0.0.0.255 area 0
R4(config-router)# network 5.5.5.0 0.0.0.255 area 0
R4(config-router)# network 10.10.10.4 0.0.0.0 area 0
R4(config-router)# exit
# R5配置
R5(config)# ip route 0.0.0.0 0.0.0.0 5.5.5.2
配置后可用命令查看路由信息:
# 查看OSPF配置信息
Router# show ip ospf ?
# 查看所有路由表项
Router# show ip route
# 查看OSPF路由表项
Router# show ip route ospf
# 查看IP路由协议配置参数和运行情况
Router# show ip protocols
如果一次性需要配置多个路由器,可以先将命令逐行写出,然后复制粘贴就可以一次性完成配置,如下所示: