Lab5 动态路由协议OSPF配置 详解版
实验资源
1 实验目的
在Lab4中我们通过静态路由和默认路由,一条一条地设计好了网络的路由转发方式,这种方法在网络拓扑固定时行之有效,但它无法应对真实世界中链路中断或拓扑变更带来的挑战,同时对于复杂网络而言也会带来巨大的工作量;本次实验将带你体会动态路由协议的重要性,探索路由器如何自行发现路径、计算最优路由,并在网络变化时快速自愈
我们将首先配置经典的距离矢量协议RIP,体会其简便性及其在路径选择上的局限性,以此作为后续对比的基准;随后,我们将深入本次实验的核心——OSPF(开放最短路径优先)协议;与RIP截然不同,OSPF是一种基于链路状态的动态路由协议,能够实现高效的路由信息传播和极快的网络收敛;为了驾驭大型网络,OSPF还引入了‘区域’的概念,我们将从单区域配置开始,逐步构建跨越骨干区、标准区、甚至是通过虚链路连接的复杂多域网络
通过本次实验,你将:
- 理解链路状态路由协议的工作原理
- 理解OSPF协议的工作机制
- 掌握配置和调试OSPF协议的方法
2 实验数据记录和处理
以下实验记录均需结合屏幕截图,进行文字标注和描述,图片应大小合适、关键部分清晰可见,可直接在图片上进行标注,也可以单独用文本进行描述
记录输入的命令时,直接粘贴文字即可(保留命令前面的提示符,如R1#)
2.0 设计网络拓扑并进行初始配置
设计IP地址方案并标注拓扑图
请根据实验拓扑图和实验要求,为每个PC及路由器的各个接口设计一套完整、合理的IP地址和子网掩码方案,并标注在拓扑图上:
- Area 0使用10.0.0.0/16的网络地址进行分配,每个子网分别使用10.0.0.0/24、10.0.1.0/24、10.0.2.0/24等子网地址;其中点对点连接的路由器之间的子网使用10.0.123.240/28进行分配以最大程度的节约地址,例如使用串行掩码方案,网络地址部分为30位,每个子网刚好有2个可用地址(去掉1个主机地址部分全0的和1个主机地址部分全1的),可以按如下方式进行分配:
- R1-R2互联接口: 10.0.123.241/30、10.0.123.242/30,子网地址:10.0.123.240/30
- R1-R3互联接口: 10.0.123.245/30、10.0.123.246/30,子网地址:10.0.123.244/30
- 依次类推,R2、R3、R4、R6之间的子网为(只需要4个地址):10.0.123.248/29,去掉全0全1地址后,还有6个地址可用
- Area 1、Area 2、Area 3使用10.X.0.0/16的网络地址进行分配,其中X为Area编号,例如Area 1的3个子网分别使用10.1.0.0/24、10.1.1.0/24、10.1.2.0/24等子网地址(同一个交换机上的多台路由器的接口属于同一个子网)

配置路由器接口和PC网络参数
在配置任何动态路由协议之前,我们必须确保网络中所有链路层和网络层的基本连通性是正常的,这是后续路由协议能够成功建立邻居关系并交换路由信息的前提
-
根据你在上一步规划的拓扑图,为路由器R1、R2、R3的各个接口配置IP地址和子网掩码,并激活这些接口
- 进入接口配置模式:
interface [接口类型/编号](例如:interface fastethernet 0/0) - 配置IP地址:
ip address [IP地址] [子网掩码] - 激活接口:
no shutdown - 对于串口,还需配置封装协议和时钟速率(在DCE端):
encapsulation hdlc,clock rate 128000
正在加载功能... - 进入接口配置模式:
-
为PC1和PC2配置静态IP地址、子网掩码以及默认网关
-
在PC上使用
ping命令测试其与直连路由器网关地址的连通性,确保链路正常工作
2.1 配置RIP用于对照
配置RIP动态路由协议
背景知识:RIP协议简介
路由信息协议(Routing Information Protocol, RIP)是一种经典的距离矢量(Distance-Vector)路由协议;它的工作原理可以通俗地理解为“听信邻居”;每台运行RIP的路由器都会周期性地向其直连邻居广播自己的整张路由表,即“我能去往这些地方,代价分别是多少跳”;路由器收到邻居的路由信息后,简单地将其合并到自己的路由表中,然后又将这张新表广播给其他邻居,这个过程也被称为“基于传闻的路由”(routing by rumor)
RIP使用跳数(Hop Count)作为衡量路径优劣的唯一度量(Metric),也就是到达目标网络需要经过的路由器数量;这种机制的巨大缺陷在于它完全忽略了链路的带宽、延迟、负载等关键性能指标;在RIP的视角里,一条1000M的高速光纤链路和一条64K的低速串行链路,只要都是一跳,成本就是完全相同的;这种简单化的度量方式在现代复杂网络中显然是不够智能的,这也是它被OSPF等更先进的链路状态协议取代的主要原因
值得注意的是,与其他距离矢量路由协议相同的是,RIP也具有“坏消息传得慢”的劣势,具体来说,距离矢量路由协议中,节点仅从邻居处学习路由信息,无法获得网络拓扑的全貌,如果一个节点连接目的地的链路断开,它会尝试使用邻居的路由,但邻居可能还未察觉链路变化,并向它通告一条经过它自己的旧路由,这使得两个节点陷入一个循环,它们会不断向对方发送更新信息,并在此过程中将路径成本逐渐推向无穷大,导致收敛过程极其缓慢
为了更好地理解OSPF协议的先进性,我们首先配置一个经典的距离矢量协议——RIP,并观察其行为,作为后续实验的参照基准
- 在R1, R2, R3上分别进入全局配置模式,使用
router rip命令启动RIP路由进程 - 配置RIP使用版本2:
version 2,该版本支持无类别域间路由(CIDR),能够正确传递子网掩码信息,是现代网络的基本要求 - 使用
network [网络地址]命令宣告与路由器直连的网络,激活相应接口上的RIP协议,并开始向外通告这些网络;注意这里我们只填写网络地址,不填写子网掩码
查看RIP路由表并跟踪路由
配置完成后,我们验证一下RIP协议是否按预期工作,并分析其路径选择的结果
- 在R1上使用
show ip route命令查看路由表,标出到PC2子网的路由,下一跳是哪个路由器
- 在R2上使用
show ip route命令查看路由表,标出到PC1子网的路由,下一跳是哪个路由器
- 在R3上使用
show ip route命令查看路由表
- 分析从PC1所在子网到PC2所在子网的路由条目,记录其下一跳地址和度量值(跳数)
- 在PC1上使用
tracert [PC2_IP]命令跟踪到PC2的路径,可以看到经过的路由器顺序是R1、,路由表中的路径选择应当与实际数据转发路径一致
2.2 配置单域OSPF(Area 0)
现在,我们正式进入本次实验的核心——OSPF协议;我们将首先在一个单一的区域(Area 0)内配置OSPF,并将其与之前的RIP进行深入比较,以体会链路状态协议的有效性
背景知识:OSPF协议基础
开放最短路径优先(Open Shortest Path First, OSPF)是一种链路状态(Link-State)路由协议,它从根本上改变了路由器认知网络的方式;与RIP听信邻居的机制不同,OSPF让每台路由器都负责探测并描述自身接口的状态、IP地址、以及与哪些邻居相连等拓扑信息,然后将这些信息打包成链路状态通告(Link-State Advertisement, LSA),并将其在网络中泛洪;最终,网络中的所有路由器都会收到所有其他路由器的LSA,从而在各自的内存中构建出一张完全相同的、上帝视角的网络拓扑图,这张图被称为链路状态数据库(Link-State Database, LSDB);有了这张完整的地图后,每台路由器便可以独立运行SPF(最短路径优先)算法,计算出以自己为根(起点)的、到达网络中所有目的地的无环路最短路径树,并将计算出的最优路径加载到自己的路由表中
Router ID: 在OSPF网络中,每台路由器都必须有一个唯一的32位标识符,称为Router ID,其格式与IP地址相同;它如同路由器的“身份证号”,用于在整个自治系统中唯一标识一台路由器;Router ID的选举遵循一个明确的优先级顺序:
- 首先,使用通过
router-id命令手动配置的值,这是最推荐的方式,因为它稳定且可预测 - 若未手动配置,则选择所有已激活(up/up)的Loopback(环回)接口中,IP地址数值最大的一个;由于Loopback是逻辑接口,永远不会物理宕机,使用其IP作为Router ID非常稳定,是工程实践中的首选
- 若既未手动配置,也没有可用的Loopback接口,则选择所有已激活的物理接口中,IP地址数值最大的一个;这种方式的缺点在于,一旦该物理接口宕机,Router ID就可能发生改变,导致整个OSPF邻居关系重置,引发网络震荡
Area与进程ID: 为了提高可扩展性,OSPF允许将一个大型网络划分成多个区域(Area),所有区域都必须直接连接到一个称为骨干区域(Backbone Area)的特殊区域,即 Area 0;而在router ospf [process-id]命令中,进程ID仅用于在单台路由器上区分不同的OSPF进程,它只具有本地意义,不同路由器上的进程ID无需相同
配置R1的OSPF协议
- 在R1上使用
router ospf [pid]启动OSPF进程,其中进程ID(pid)请设置为你学号的后两位(若为00则向前取值) - 使用
network [网络地址] [通配符掩码] area 0命令将R1的所有直连网络宣告进Area 0
通配符掩码(Wildcard Mask) 与子网掩码的作用相反,其中0表示对应位必须精确匹配,1表示对应位可以是任意值
例如,对于子网192.168.1.0/24,其子网掩码为255.255.255.0,而通配符掩码为0.0.0.255
配置R2的回环接口和OSPF协议
背景知识:回环接口
回环接口是一种特殊的、完全由软件实现的虚拟网络接口,它不与任何物理硬件(如网卡)相关联,其核心作用是在设备内部创建一个自我通信的闭环通道,当一个应用程序向回环地址发送数据时,这些数据并不会被发送到外部网络,而是在操作系统的TCP/IP协议栈内部被“回环”,直接传递给同一设备上的目标应用程序
这种机制的稳定性源于其纯软件的本质,物理网络接口的可用性受制于多种外部因素,例如网线连接是否松动、端口是否损坏或网络设备是否故障,任何一个环节出现问题都可能导致接口失效,而回环接口独立于所有这些物理依赖,只要操作系统的网络协议栈正常加载并运行,它就始终处于活动状态,这种“永不掉线”的特性使其成为一个极其可靠的端点
正因为其高度的可靠性,回环接口在网络实践中扮演着多个关键角色,在网络应用开发和测试阶段,开发者可以利用回环接口在单台机器上同时部署和调试客户端与服务器端程序,而无需搭建复杂的物理测试环境,在网络故障排查时, ping 127.0.0.1 是一个基础且有效的诊断步骤,成功响应即表明本地的TCP/IP配置是正确的,此外,在复杂的动态路由协议(如OSPF或BGP)中,通常会将路由器的ID设置为其回环接口的IP地址,因为物理接口的地址可能会改变或接口会宕机,而使用稳定的回环地址作为身份标识,可以防止因物理链路的瞬时中断而引发整个网络路由的非必要动荡和重新计算,从而显著提升网络的整体稳定性
为了给R2提供一个稳定可靠的Router ID,我们将为其配置一个Loopback接口
- 创建Loopback 0接口并配置IP地址:
interface loopback 0,ip address [IP地址] [子网掩码] - 启动R2的OSPF进程,并将包括Loopback接口在内的所有接口宣告进Area 0
配置R3的OSPF协议并指定Router ID
与R2不同的是,我们为R3手动指定Router ID,这是ID选择方式中最高权重的一种
- 启动R3的OSPF进程
- 使用
router-id [x.x.x.x]命令手动为R3指定一个Router ID - 将R3的所有接口宣告进Area 0
查看OSPF数据库并分析Router ID
现在,我们来深入OSPF的核心,查看每台路由器构建出的网络“路书”——链路状态数据库(LSDB),并验证我们的Router ID配置,结合之前的配置分析每个Router ID是如何被选举出来的(手动指定、最大Loopback IP或最大物理接口IP)
-
在R1上分别使用
show ip ospf database命令查看它们的LSDB,标出路由器的Router ID,从输出可知:- R1的Router ID为(取自接口的IP)
- 与R1连接的有个路由器,其ID分别是、
- 有条链路,其ID分别是、

-
在R2上分别使用
show ip ospf database命令查看它们的LSDB,标出路由器的Router ID,从输出可知:- R2的Router ID为(取自接口 的IP)
- 与R2连接的有个路由器,其ID分别是、
- 有条链路,其ID分别是、

-
在R3上分别使用
show ip ospf database命令查看它们的LSDB,标出路由器的Router ID,从输出可知:- R3的Router ID为(手动指定)
- 与R3连接的有个路由器,其ID分别是、
- 有条链路,其ID分别是、

显示R1的OSPF接口数据
背景知识:DR与BDR的选举
在以太网这类多路访问网络(Multi-Access Network)中,如果每台路由器都与其他所有路由器建立邻接关系,那么邻接关系的数量将以 n×(n-1)/2 的规模爆炸式增长,这会导致网络中充斥着大量重复的LSA泛洪和确认信息,造成严重的性能问题;为了解决这个“邻居数量爆炸”的挑战,OSPF引入了指定路由器(Designated Router, DR)和备份指定路由器(Backup Designated Router, BDR)的选举机制
这个机制的核心思想是,在该网段中选举出一位“班长”(DR)和一位“副班长”(BDR);网段内所有其他路由器(称为DROther)都只与DR和BDR建立完全的邻接关系,并只将自己的LSA“汇报”给DR;然后,由DR这位“班长”统一负责,将收集到的LSA信息泛洪给网段内的所有其他路由器;BDR则时刻监听,一旦DR发生故障,它会立即接管DR的工作;这种的设计极大地减少了OSPF协议流量,将一个网状的邻接关系优化为了一个星型的邻接关系,显著提高了网络的可扩展性;DR和BDR的选举主要基于接口的OSPF优先级(0-255,默认为1,数值越大越优),若优先级相同,则比较Router ID(越大越优)
-
在R1上使用
show ip ospf interface命令,查看各个接口上详细的OSPF运行参数,标记各接口的cost值,网络类型,邻接关系及其Router ID,广播类型的网络再标出DR(Designed Router)或者BDR(Backup Designed Router)角色 -
对S2/0接口的运行参数分析:连接的网络类型为,Cost=,邻居Router ID=

-
对F0/1接口的运行参数分析:
- F0/1连接的网络类型为,Cost=,邻居Router ID=
- DR的Router ID是,接口IP是
- BDR的Router ID是,接口IP是

-
对F0/0接口的运行参数分析:
- F0/0连接的网络类型为,Cost=
- DR的Router ID是,接口IP是

查看OSPF路由表并与RIP比较
背景知识:管理距离
当一台路由器通过多种不同的路由协议(例如,同时运行RIP和OSPF)学习到去往同一个目标网络的多条路径时,它必须做出选择,决定将哪一条路径放入最终的路由表中;这个决策的依据就是管理距离(Administrative Distance, AD)
AD是一个0到255之间的整数,它并不衡量路径的优劣(如带宽或跳数),而是代表路由来源的可信度;数值越小,表示来源越可靠,路由器就越倾向于相信它;Cisco设备为每种路由来源都分配了一个默认的AD值,这形成了一个内置的信任链:
- 直连网络:0 (最可信,因为是自己的接口)
- 静态路由:1 (由管理员手动配置,高度可信,当然其AD也可以像Lab4那样手动调整)
- OSPF:110
- RIP:120
在这个信任链中,OSPF(110)的可靠性高于RIP(120);因此,当RIP和OSPF同时为同一个目标网络提供路由时,路由器会毫不犹豫地选择OSPF的路径,并将其安装到路由表中
查看R1、R2、R3的路由表,找到由OSPF学习到的路由(以O标记),观察与RIP比较OSPF所选择的路由的差异有何不同、两者的优先级有何差异
- 再次使用
show ip route查看R1的路由表;由输出可知,对PC2所在网络,OSPF选择的下一跳IP地址是,由于OSPF的路由管理距离为110,比RIP的管理距离120优先级更高,所以把之前RIP选择的路由替换了
- 再次使用
show ip route查看R2的路由表;从输出可知,对PC1所在网络,OSPF选择的下一跳IP地址是
- 再次使用
show ip route查看R3的路由表
- 在PC1上再次使用
tracert跟踪到PC2的路径,观察到此时经过的路由器顺序是R1、、
测试链路中断后的路由表变化
链路状态协议的一大核心优势就是能够对网络拓扑变化做出快速响应,即快速收敛;现在我们来模拟一次链路故障,观察OSPF的自愈能力
- 在R1或R3上,进入连接两台路由器的接口的配置模式,使用
shutdown命令关闭该接口 - 稍等片刻,待OSPF检测到链路中断并完成重新计算后,再次使用
show ip route查看R1的路由表 - 观察并标记到达PC2所在子网的路由是否发生了变化,新的下一跳指向了哪里

观察重启后Router ID的变化
为什么在配置OSPF时,我们一般选择Loopback接口作为ID来源呢?接下来我们将观察路由器重启的变化,感受Router ID稳定性的重要性
-
在R1上使用
write命令保存当前配置,然后右键该路由器-reload重启路由器 -
待R1重启完成后,再次使用
show ip ospf database查看其OSPF数据库,可以看到R1的Router ID变成了,取自接口的IP地址
由于在上一步中,我们关闭了R1原先作为Router ID来源的物理接口f0/1,其上的IP地址也暂时不可用,OSPF在重启后会重新选举一个当前可用的、IP地址最大的物理接口作为新的Router ID,而原来的Router ID也未消失,看上去是来自另一台不存在的路由器;而回环接口不会断开,OSPF优先选择后就不会遇到这种情况
观察OSPF邻接关系建立过程
背景知识:OSPF邻居状态机
两台OSPF路由器从相互发现到最终建立完全的邻接关系(Adjacency),需要经历一个严谨而有序的过程,这个过程由邻居状态机(Neighbor State Machine)定义;它确保了只有在双方都满足特定条件,并且完成LSDB同步后,才能成为真正的“战友”;主要状态包括:
- Down: 初始状态,尚未收到来自邻居的任何Hello包
- Init: 收到了邻居的Hello包,但包中没有包含自己的Router ID;这就像你跟邻居打了个招呼,但他还没回应你,表明通信是单向的
- 2-Way: 双向通信已建立;双方都在对方的Hello包中看到了自己的Router ID,确认了彼此的存在;在广播网络中,此状态下会开始选举DR和BDR;对于DROther类型的路由器,邻居关系将停留在此状态
- ExStart: 这是建立完全邻接关系的第一步;双方开始协商主从关系(基于Router ID大小),并确定初始的数据库描述(DBD)序列号,为后续的LSDB同步做准备
- Exchange: 相互交换DBD(Database Description)包;DBD包并不包含完整的LSA,而是LSA的摘要信息(像一个目录),用于高效地告知对方自己拥有哪些“地图”
- Loading: 对比收到的“目录”(DBD)和自己的LSDB,路由器会发现自己缺失或版本过旧的“地图”;它会通过发送LSR(链路状态请求)向邻居请求这些特定的LSA,邻居则用LSU(链路状态更新)来回应,LSU中包含了完整的LSA信息
- Full: LSDB完全同步,两台路由器的“地图”达成一致;至此,完全邻接关系正式建立,它们可以相互计算路由并转发数据了
-
在R1上开启OSPF事件调试:
debug ip ospf events以实时显示OSPF协议的交互过程 -
重新激活之前被关闭的R1-R3链路接口(在R1或R3上重新
no shutdown该接口)提示OSPF协议中,当路由器收到来自邻居的hello数据包时,它必须在自己的hello数据包中列出发送方路由器ID,以向该邻居进行确认
Init状态表示路由器已收到来自其邻居的hello数据包,但接收路由器ID未包含在hello数据包中,因此,要想看到Init状态,需要R3在未收到R1 hello数据包时发送自己的hello数据包(此时不含R1路由器ID),并被R1接收
你可以在R1发送了一个hello数据包时立刻打开R3对应的接口,此时R3发送的首个hello数据包应该就满足这一条件,这需要你卡到合适的Timing,可能需要多次尝试
-
观察R1终端输出的调试信息,记录下R1与R3重新建立邻接关系时经历的、、、、5个状态变化

-
待邻居关系达到
Full状态后关闭调试(命令:no debug ip ospf events) -
在R1上使用
show ip ospf neighbor detail命令,查看邻居关系的最终状态
-
为R4和R6配置IP地址和OSPF(均属于Area 0),并观察它们在广播网络中的邻居关系;你会发现,由于DR/BDR机制,非DR/BDR的路由器之间只会建立到
2-Way的邻居关系,而不会形成完全的Full邻接关系
配置R4和R6的OSPF协议
背景知识:邻居关系和邻接关系
在OSPF协议中,“邻居”(Neighbor)和“邻接”(Adjacency)是两个明确不同的概念,它们描述了路由器之间关系的两个不同阶段和深度
- 邻居关系是基础,当两台在同一网段的OSPF路由器启动后,它们会开始通过
224.0.0.5这个特定的组播地址周期性地发送Hello报文,如果一台路由器收到了来自另一台路由器的Hello报文,并且在自己发出的Hello报文的邻居列表中也看到了对方的Router ID,就意味着双向通信已经建立,此时,这两台路由器就形成了邻居关系,状态达到2-Way,这个阶段仅仅意味着“我们互相看见了对方,并且确认了基本的通信参数是一致的”,但它们并不会交换详细的路由信息,也就是链路状态数据库(LSDB) - 邻接关系是在邻居关系之上建立的更高级、更深入的关系,只有形成了邻接关系的路由器之间,才会进行完整的链路状态数据库的交换和同步,这个过程涉及到交换数据库描述报文(DBD),以及在必要时使用链路状态请求(LSR)、链路状态更新(LSU)和链路状态确认(LSAck)报文来请求和发送缺失的LSA(链路状态通告),最终达到双方LSDB完全一致的Full状态,可以说,邻居只是“认识”,而邻接则是“信任并交换情报的伙伴”
那么,是不是所有的邻居都会发展成邻接关系呢,并非如此,这取决于它们所在的网络类型
- 在点对点(Point-to-Point)或点对多点(Point-to-Multipoint)网络中,由于链路结构简单,任何成功建立邻居关系的路由器都会直接继续发展,形成邻接关系
- 在广播多路访问(Broadcast Multi-Access)网络(如以太网)中,情况就变得复杂,如果一个广播域内有N台路由器,而它们之间两两都建立邻接关系,就会形成
N×(N-1)/2个邻接关系,这意味着任何一台路由器的状态变化都会引发大量的LSA泛滥,每台路由器都需要处理来自其他所有路由器的更新,造成巨大的冗余和资源浪费
为了优化这个过程,OSPF在这种网络类型中引入了指定路由器(DR)和备份指定路由器(BDR)的角色,选举产生DR和BDR后:
- 所有非DR/BDR的路由器(称为DROther)只会与DR和BDR建立邻接关系(达到Full状态)
- DROther之间虽然互为邻居,但关系会停留在2-Way状态,不会形成邻接关系
- 这样,路由信息的交换就有了统一的集散点,所有DROther只将自己的LSA发送给DR(和BDR),再由DR统一向网段内的所有路由器泛洪,这极大地减少了广播网络中邻接关系的数量,从
N×(N-1)/2个减少到2N-3个,显著降低了协议开销
总结来说,邻居关系是建立邻接关系的前提,但只有在需要交换路由信息时,邻居关系才会升级为邻接关系,在广播网络中,通过选举DR/BDR来有选择性地建立邻接关系,是OSPF协议高效运行的关键设计之一
- 为R4、R6的回环接口与f0/0接口配置IP地址并激活
- 启用OSPF进程并将相应接口在Area 0宣告
正在加载功能...
- 查看R4的OSPF邻居关系,由于处在广播网络中,R4与R6虽然是邻居关系(
2-WAY),但不建立邻接关系 - 查看R6的OSPF邻居关系,由于处在广播网络中,R4与R6虽然是邻居关系(
2-WAY),但不建立邻接关系
2.3 配置多域OSPF
随着网络规模的扩大,将所有路由器都放在一个单一的OSPF区域中会带来性能瓶颈;为了解决这个问题,OSPF引入了多区域(Multi-Area)的概念,这使得OSPF能够支持极其庞大的网络
背景知识:多域OSPF与LSA类型
将OSPF网络划分为多个区域,其核心动机是为了提升网络的可扩展性和稳定性;想象一个巨大的网络,任何一条链路的微小抖动都会导致LSA在全网泛洪,迫使每一台路由器都重新运行耗费CPU资源的SPF算法;通过划分区域,可以将这种拓扑变化的影响限制在区域内部;区域内的路由器只需维护本区域详细的拓扑信息,而对于其他区域,它们只需要知道如何到达那里即可,无需关心其内部的复杂细节;这大大减少了LSDB的规模和SPF的计算频率,使得网络更加稳定和高效
区域边界路由器(Area Border Router, ABR)是多域OSPF架构的关键角色;它像一个“边境海关”,同时连接着骨干区域(Area 0)和一个或多个非骨干区域;ABR负责维护其所连接的每个区域的LSDB,并将一个区域的路由信息以摘要(Summary)的形式,生成新的LSA,通告给另一个区域
为了实现这种信息的分级管理,OSPF定义了多种LSA类型,其中最核心的有:
- Type 1 (Router LSA): 由区域内的所有路由器产生,用于描述自身的链路状态和开销;它就像每个路由器的“自我介绍”,只在区域内部泛洪
- Type 2 (Network LSA): 由广播网络或NBMA网络中的DR产生,用于描述该网段上有哪些路由器;它就像DR发布的“网段成员名单”,也只在区域内部泛洪
- Type 3 (Summary LSA): 由ABR产生,用于将一个区域的路由信息(以网络前缀的形式)通告给其他区域;它就像ABR发布的“跨区域路标”,在整个OSPF域中泛洪(除特定类型的末梢区域外),告知其他区域的路由器“要到某个网段,请来找我”
配置Area 1并测试区域间路由
- 为R4和R5的相关接口配置IP地址并激活
- 在R4和R5上启动OSPF进程,并根据拓扑图将R4和R5连接到Area 1的接口宣告进 Area 1(命令:
network [subnet] [wildcard-mask] area 1);此时R4成为了连接Area 0和Area 1的ABR正在加载功能... - 为PC3配置IP地址和相应的默认网关
- 等待OSPF收敛后,使用
show ip route在R2(Area 0内部路由器)上查看路由表,并标记出来自其他区域的区域间路由(Inter-Area Route)条目(O IA);由路由表可知,目标为Area 1中的子网的下一跳IP地址均为,从接口发出
- 等待OSPF收敛后,使用
show ip route在R5(Area 1内部路由器)上查看路由表,并标记出来自其他区域的区域间路由(Inter-Area Route)条目(O IA);由路由表可知,目标为Area 0中的子网的下一跳IP地址均为,从接口发出
- 在PC3上
pingPC1,测试跨区域的连通性
查看多域OSPF数据库信息
通过对比不同位置路由器的LSDB,我们可以清晰地看到区域划分带来的信息隔离和摘要效果
-
在R2(Area 0内部)上使用
show ip ospf database命令查看LSDB;由输出可观察到R2没有Area 1的具体信息,但是该区域的子网地址、、由路由器汇聚后以区域间链路的形式进行通告
-
在R5(Area 1内部)上使用
show ip ospf database命令查看LSDB;由输出可观察到R5没有Area 0的具体信息,但是该区域的子网地址全部由路由器汇聚后以区域间链路的形式进行通告
-
在R4(ABR)上使用
show ip ospf database命令查看LSDB;由输出可观察到R4有Area 1和Area 0的具体信息,由于R4是区域边界路由器(ABR),所以对区域内的链路进行了汇聚,然后以区域间路由的形式向其他区域进行链路状态通告(LSA),其中:- 向Area 0通告的属于Area 1的链路有、、;
- 向Area 1通告的属于Area 0的链路有、、、、、、、

查看区域边界路由器ABR信息
为了查看路由器是如何确定区域边界路由器(ABR)的,我们可以使用 show ip ospf border-routers 命令
- 在R1(Area 0内部)上分别执行该命令,查看它们学习到的关于ABR(R4)的信息;由输出可知,当前已知的区域0内的ABR的IP地址为,下一跳IP地址为
- 在R5(Area 1内部)上分别执行该命令,查看它们学习到的关于ABR(R4)的信息;由输出可知,当前已知的区域1内的ABR的IP地址为,下一跳IP地址为
配置Area 2并测试连通性
- 按照拓扑图为R6的F0/1接口、R8的各接口配置IP地址并激活相应接口
- 为PC4配置IP地址与默认网关
- 在R6和R8上启动OSPF,并将各接口宣告进 Area 2,此时R6成为连接Area 0和Area 2的ABR
正在加载功能...
- 等待网络收敛后,在R8上查看路由表,并标记出到Area 1网络的区域间路由;由输出可知,区域间路由包含了Area 1和Area 0的地址,其中Area 1的子网地址有、、

- 测试PC4与PC1(跨Area 0)的连通性
- 测试PC4与PC3(跨Area 0和Area 1)的连通性
配置Frame Relay数据链路
背景知识:帧中继与NBMA网络
帧中继(Frame Relay)是一种较早期的广域网技术,它在数据链路层通过虚电路(Virtual Circuit)来转发数据,而非像以太网那样进行广播;每个虚电路通过一个数据链路连接标识符(DLCI)来唯一识别;帧中继网络是一种典型的非广播多路访问(Non-Broadcast Multi-Access, NBMA)网络
NBMA网络的特点是,网络中的多台设备虽然在同一个逻辑网段(如IP子网),但它们之间不能像以太网那样通过广播或多播直接通信;任意两台设备间的通信都必须通过中心节点(即帧中继交换机)建立的点对点虚电路进行;这个特性给那些依赖广播/多播来自动发现邻居的路由协议(如OSPF和EIGRP)带来了挑战;默认情况下,OSPF在帧中继链路上会尝试选举DR/BDR,但由于无法发送多播Hello包,选举会失败,邻居关系也无法建立
打开GNS3中的Frame Relay交换机,按下表配置Frame Relay数据链路,定义两条永久虚电路(PVC):一条从R5到R7,另一条从R5到R9,具体方法可参考功能与设备介绍-Frame Relay交换机
| 源接口 | Source Port:DLCI | Destination Port:DLCI | 目标接口 |
|---|---|---|---|
| R5 s2/0,1 | 1:101 | 10:202 | R7 s2/0 |
| R5 s2/0,2 | 1:102 | 11:203 | R9 s2/0 |
配置R5的Frame Relay子接口
为了在单个物理接口上承载多条虚电路,我们需要再次使用子接口(Subinterface)技术
- 进入R5的物理接口s2/0,将其封装类型设置为
encapsulation frame-relay,由于GNS3自带的FR交换机只支持ANSI模式,而路由器默认的是Cisco模式,还需要使用frame-relay lmi-type ANSI命令,随后激活接口 - 创建两个点对多点(multipoint)类型的子接口:
interface s2/0.1 multipoint和interface s2/0.2 multipoint - 为每个子接口配置IP地址,并使用
frame-relay interface-dlci [dlci]命令将其与相应的DLCI绑定,dlci值等于上一步Frame Relay交换机上定义的数据链路相关DLCI值 - 将R5的s2/0接口宣告进Area 1
配置R7的Frame Relay接口及OSPF
- 为R7的各接口配置IP地址并激活,其中回环接口和f0/0接口属于Area 2,s2/0接口属于Area 1
- 配置s2/0接口的封装协议为
encapsulation frame-relay,并指定对应的frame-relay interface-dlci [dlci],DLCI值设为Frame Relay交换机上R5-R7之间数据链路的相关DLCI值 - 在R7上
pingR5的IP地址,测试连通性;由于是点对点连接,应该只有一个子接口地址可以ping通
配置R9的Frame Relay接口及OSPF
- 为R9的各接口配置IP地址并激活,其中回环接口和f0/1接口属于Area 3,s2/0接口属于Area 1
- 配置s2/0接口的封装协议为
encapsulation frame-relay,并指定对应的frame-relay interface-dlci [dlci],DLCI值设为Frame Relay交换机上R5-R9之间数据链路的相关DLCI值 - 在R9上测试与R5的连通性,由于R5-R9采用的是点对点Frame Relay连接,只有R5的1个子接口地址可以通;如果在R5上测试,需要加上参数
source s2/0指定接口 - 测试R9到R7的连通性;你会发现此时无法ping通,这是R5、R7、R9通过帧中继交换机连接的形式是非广播式多路访问,虽然路由器在同一个IP子网,但由于数据链路不是广播式的,所以在没有建立点对点数据链路的情况下,即使在同一IP子网内也无法通信
查看NBMA网络中的OSPF邻居关系
在解决NBMA问题之前,我们先来观察一下默认配置下的失败状态:在R5, R7, R9上分别使用 show ip ospf neighbor 查看OSPF邻居关系;你会发现邻居关系无法建立,这是因为OSPF默认将帧中继接口视为广播网络类型,需要选举DR/BDR,但在非广播的NBMA环境中,路由器之间无法通过多播Hello包相互发现,导致选举失败,无法正常建立三者间的邻居关系
配置点对多点网络类型
为了解决NBMA环境下的邻居发现问题,我们需要手动将OSPF网络类型更改为点对多点模式,该模式下OSPF不再尝试选举DR/BDR,而是通过单播Hello包来发现和维护邻居关系,从而适应NBMA网络的环境
- 分别在R5, R7, R9的帧中继接口(或子接口)下,使用命令
ip ospf network point-to-multipoint - 稍等片刻后,再次使用
show ip ospf neighbor查看邻居关系,此时应该能够成功建立
观察Area间路由信息交换规则
OSPF有一个非常重要的设计规则:所有非骨干区域都必须与Area 0相连,且所有区域间的路由信息都必须通过Area 0进行中转,非骨干区域之间不能直接交换路由信息,我们可以通过对以下路由器OSPF数据库中Summary Net Link部分的观察来验证这一规则
- 在R5上使用
show ip ospf database查看OSPF数据库,观察得知,Area 1所有的的聚合路由都是由区域边界路由器(ABR)宣告的,而R7作为Area 1和Area 2的ABR,却没有向Area 1宣告Area 2的路由信息,是因为所有的Area都只和Area 0进行路由信息交换
- 在R8上使用
show ip ospf database查看OSPF数据库,观察得知,Area 2所有的的聚合路由都是由区域边界路由器(ABR)宣告的,而R7作为Area 1和Area 2的ABR,也没有向Area 2宣告Area 1的路由信息
- 在R7上使用
show ip ospf database查看OSPF数据库,观察得知,Area 1所有的的聚合路由都是由区域边界路由器(ABR)宣告的,Area 2所有的的聚合路由都是由区域边界路由器(ABR)宣告的
查看指定网络的路由信息
在R8上使用 show ip route [目标网络地址] 命令,查看去往PC3所在子网的路由条目,观察得知,前往子网的下一跳IP地址是,是路由器
测试链路中断对路由信息的影响
- 在R6上关闭其连接Area 0的f0/0接口,切断Area 2与骨干区域的直接连接
- 在R8上再次查看路由信息,观察得知,前往子网的路由已经不存在
- 在R7上查看路由信息,观察得知,前往子网的路由是存在的,但是由于Area 2和Area 1不直接交换路由信息,R7没有向Area 2宣告路由的存在
- 重新使用
no shutdown打开R6的f0/0接口,观察R8的路由信息是否能够恢复
配置非骨干网直连区域 Area 3
现在我们将创建一个完全没有物理链路连接到Area 0的区域——Area 3,以此来直观地展示OSPF中“所有区域必须连接骨干区”这一规则的重要性
- 为R10和PC5配置IP地址并激活接口,将R10的接口全部宣告进 Area 3
- 为PC5配置IP地址和默认路由
- 使用
show ip ospf database查看R10的OSPF数据库,观察可知没有其他Area的信息,因为Area 3和Area 1不直接交换信息 - 使用
show ip route查看R10的路由表,观察可知没有其他Area的信息,因为OSPF数据库中缺乏相关数据
你会发现,由于Area 3没有物理上直接连接到Area 0,它无法学习到任何来自其他区域的路由信息,成为了一个路由“孤岛”
建立虚链路连接Area 3和Area 0
背景知识:虚链路(Virtual Link)
为了解决非骨干区域因地理或物理限制而无法直连Area 0的问题,OSPF提供了一种巧妙的逻辑解决方案——虚链路(Virtual Link);虚链路本质上是在两个ABR之间,通过一个非骨干的传输区域(Transit Area),建立一条逻辑上的、点对点的隧道,此时这条隧道对于OSPF协议来说被视为Area 0的一部分
通过这条隧道,远端的非骨干区域(如本实验中的Area 3)就可以在逻辑上与骨干区域相连,从而能够正常地收发区域间的路由信息(Type 3 LSA);这确保了即使在物理连接不满足条件的情况下“所有区域必须连接到Area 0”这一OSPF的基本设计原则仍然能够得以维持
-
在R9(Area 1/3的ABR)和R4(Area 0/1的ABR)之间,通过传输区域Area 1建立虚链路(命令:
area [area-id] virtual-link RID),其中area-id写1,RID写对方的Router ID正在加载功能... -
配置完成后,使用
show ip ospf virtual-links检查虚链路是否成功建立,观察可知:- R4通过区域的接口与R9(RID是)建立了虚链路,使用的Cost值为
- R9通过区域的接口与R4(RID是)建立了虚链路,使用的Cost值为
正在加载功能... -
配置完成后,使用
show ip ospf neighbor命令检查邻居关系是否成功建立,观察可知:- R4通过接口与R9(RID是)建立了邻接关系
- R9通过接口与R4(RID是)建立了邻接关系
正在加载功能...
查看虚链路建立后R10的路由信息
现在虚链路已经打通,我们来验证一下Area 3是否已被成功接入OSPF骨干网络
- 在虚链路成功建立后,再次使用
show ip route查看R10的路由表,标出PC1、PC2、PC3所在子网的相关记录 - 使用
show ip ospf database查看R10的OSPF数据库,观察可知所有其他区域路由信息均由区域边界路由器宣告
配置路由聚合
背景知识:路由聚合/汇总
路由聚合(Route Summarization),又称路由汇总,是将多个连续的子网合并成一个单一的、范围更大的超网(Supernet)的过程;在OSPF中,路由聚合通常在ABR上进行,它是一项优化网络性能和稳定性的关键技术
其核心作用体现在两方面:
- 减小路由表规模:用一条汇总路由(如
10.0.0.0/16)来代替多条明细路由(如10.0.1.0/24,10.0.2.0/24, …),可以显著减小下游区域路由器的路由表大小;更小的路由表意味着更少的内存占用和更快的路由查找速度,从而降低了路由器的CPU负担 - 增强网络稳定性:路由聚合可以有效地将区域内的拓扑变化“隐藏”起来;例如,如果Area 0中的一个子网链路发生抖动(频繁地up/down),如果没有聚合,ABR会不断地向其他区域泛洪更新的LSA;而进行了聚合后,只要汇总地址范围内的网络整体仍然可达,ABR就不会向其他区域发送LSA更新,从而避免了网络震荡的传播,提高了整个OSPF域的稳定性
-
在R9的OSPF配置模式下,使用
area [area-id] range [ip_net] [mask]命令,将来自Area 0的多个10.0.x.x子网汇总成一条10.0.0.0 255.255.0.0的路由,并通告给Area 3 -
配置完成后,查看R9和R10的路由表,标出合并的那条路由
- R9上,合并的路由采用了特殊的接口作为下一跳;这是一个防环机制,如果R9收到一个去往未知
10.0.x.x子网的数据包,它会将其丢弃,而不是错误地发回Area 1 - R10上,下一跳的IP地址是,是路由器的接口
正在加载功能... - R9上,合并的路由采用了特殊的接口作为下一跳;这是一个防环机制,如果R9收到一个去往未知
保存路由器配置文件
整理各路由器的当前运行配置,选择与本实验相关的内容记录在文本文件中,每个设备一个文件,分别命名为R1.txt、R2.txt等,随实验报告一起打包上传
3 实验结果与分析
根据你观察到的实验数据和对实验原理的理解,分别解答以下问题:
- 在一个网络中各路由器的OSPF进程号是否一定要相同?一个路由器上可以配置多个进程号吗?
- 未手工指定Router ID时,如果没有给回环接口配置IP地址,会从哪一个接口选取地址作为Router ID?如果给回环接口配置了IP地址,又会从哪一个接口选取地址作为Router ID?
- 如果Router ID对应的接口down了,路由器会自动重新选择另一个接口地址作为新的Router ID吗?
- 宣告网络属于哪个area的命令中,网络地址后面的参数是子网掩码吗?为什么要写成0.0.255.255,而不是255.255.0.0?
- 是不是所有其他Area上的路由器都只和Area 0上的路由器进行路由信息交换?虚链路的作用是什么?
- 为什么要在区域边界路由器上进行路由合并?