OSPF 邻居关系 附实验

news2025/1/16 8:50:58

实验目的

通过对 OSPF 邻居关系建立进行相关的实验,从中学习到如何调整 OSPF Hello 包间隔,Dead 间隔,以及影响 OSPF 邻居建立的因素,例如 RID,MTU,OSPF 认证。并且将总结 OSPF在不同网络类型上的不同行为
在这里插入图片描述
上述拓扑由三台路由器组成,其中 R1 和 R2 之间由以一组太网接口和一组串行口连接,以太网接口为 12.0/24 网段,串行口为 21.0/24 网段。同时 R2 和 R3 之间由帧中继交换机相连接,分配的 DLCI 号为 102 和 201。

实验步骤

  1. 首先配置好各个路由器相应接口,并且保持直连接口的连通性。同时在每台路由器
    上配置一个环回口,其地址为 X.X.X.X/24。

2. 在 R1 和 R2 之间,开启串行接口,并且配置 OSPF 进程,使得在串行接口上能够正

常形成邻居,并且相互学习到环回口路由。
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1 //指定 OSPF 的 router ID
R1(config-router)#exit
R1(config)#int s1/0
R1(config-if)#ip ospf 1 area 0 //在 s1/0 接口开启 OSPF 1 进程,接口在区域 0
R1(config-if)#exit
R1(config)#int lo0
R1(config-if)#ip ospf network point-to-point //更改环回口网络类型
R1(config-if)#ip ospf 1 area 0 //将环回口加入进程,并在区域 0
R1(config-if)#exit
R1(config)#
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#exit
R2(config)#int lo0
R2(config-if)#ip ospf network point-to-point
R2(config-if)#ip ospf 1 area 0
R2(config-if)#exit
R2(config)#int s1/1
R2(config-if)#ip ospf 1 area 0
R2(config-if)#exit
从上面的配置我们可以发现,这和我们之前使用 network 命令将接口加入 OSPF 进
程的方式有所不同。上述配置方法是在需要加入 OSPF 进程的接口下使用命令 ip
ospf process-id area area-id 来明确指定该接口处于哪个 OSPF 进程和该进程的什么
区域中。这种配置方式从意义上而言更加明确,因此推荐采用这种配置。
而在 OSPF 进程下,我们只是指定了 OSPF 的 RID,没有其他额外的配置。
在上述配置完成后,便能够同系统实时日志发现 R1 和 R2 在串行口上建立了 OSPF
邻居关系。
*Mar 1 00:04:36.083: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from
LOADING to FULL, Loading Done
当然,如果你需要防止 OSPF 在不必要的接口形成邻居关系,你同样可以使用我们
学过的 passive-interface 命令。以下是实例命令:
R1(config)#router ospf 1
R1(config-router)#passive-interface s1/0
如果加入上述命令,那么 R1 将停止在 s1/0 接口上发送 Hello 包。

3. 更改 R1 和 R2 串行链路上 OSPF 的 hello 和 dead 时间。

首先查看目前 R1 串行链路上的 Hello 时间。
在这里插入图片描述
在这里插入图片描述
可以发现,现在的 Hello 时间为 10s,Dead 间隔为 4 倍关系,即 40s。
然后对该链路上的 Hello 和 Dead 时间进行更改。
R1(config)#int s1/0
R1(config-if)#ip ospf hello-interval 5 //更改 Hello 时间为 5s 一次
R1(config-if)#ip ospf dead-interval 20 //更改 Dead 间隔为 20s,如果不显式更改,
那么 Dead 间隔将会根据 Hello 间隔的四倍关系自动更改。
更改计时器后不久,会发现 R1 和 R2 之间的 OSPF 邻居关系 down 掉。
*Mar 1 00:16:35.823: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from
FULL to DOWN, Neighbor Down: Dead timer expired
分析得知,是因为 R1 和 R2 的 OSPF hello 间隔不一致所造成的。因此使得 OSPF 对
于邻居之间的 Dead 间隔的认识不同,从而造成邻居 down。
因此我们在 R2 的相应接口更改 Hello 间隔和 Dead 间隔,使得两台路由器计时器保
持一致。
R2(config)#int s1/1
R2(config-if)#ip ospf hello-interval 5
R2(config-if)#ip ospf dead-interval 20
R2(config-if)#
一旦更改完成,很快,R1 和 R2 之间的 OSPF 邻居关系便能够恢复。
*Mar 1 00:20:50.567: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on Serial1/1 from
LOADING to FULL, Loading Done

4. 由于之前我们手工指定了R1的RID为1.1.1.1,因此现在我们更改R1的RID为2.2.2.2。

使之与 R2 的 RID 刻意一致。
R1(config)#router ospf 1
R1(config-router)#router-id 2.2.2.2
Reload or use “clear ip ospf process” command, for this to take effect
R1(config-router)#end
R1#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
R1#
*Mar 1 00:23:57.367: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from
FULL to DOWN, Neighbor Down: Interface down or detached
R1#
*Mar 1 00:23:59.871: %OSPF-4-DUP_RTRID_NBR: OSPF detected duplicate router-id
2.2.2.2 from 10.10.21.2 on interface Serial1/0
R1#
在更改 R1 的 RID 以后,还无法立即生效,需要对 OSPF 进程进行重启。
重启 OSPF 进程以后,我们可以发现,上述着重标号日志显示,OSPF 进程检测到对
端路由器和本地路由器使用了重复了 RID,因此此时无法建立 OSPF 邻居。
我们将 R1 的 RID 更改回来,便能够使得 R1 和 R2 之间的 OSPF 关系正常。
R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1

R1(config-router)#exit
R1(config)#
*Mar 1 00:27:06.055: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from
LOADING to FULL, Loading Done
R1(config)#

5. 查看目前 R1 的串行口 MTU。

在这里插入图片描述
从上面的输出可以发现,目前接口 MTU 为 1500 字节。
更改 R1 的 s1/0 接口的 MTU。
R1(config)#int s1/0
R1(config-if)#ip mtu 1492
R1(config-if)#end
R1#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
R1#
*Mar 1 00:30:13.799: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from FULL
to DOWN, Neighbor Down: Interface down or detached
R1#
在更改了 R1 的 s1/0 接口的 MTU 以后,然后重启 OSPF 进程,并没有发现 OSPF 进程
能够再次正常重启。
查看此时 OSPF 邻居情况。
在这里插入图片描述
可以发现,此时 R1 和 R2 的 OSPF 进程卡在了 Exstart 状态。无法进行到 Full。因此
如果 MTU 不一致,也将阻止 OSPF 形成正常的邻居关系。
再将 R1 的 s1/0 接口的 MTU 值更改回原值。
R1(config)#int s1/0
R1(config-if)#ip mtu 1500
R1(config-if)#exit
R1(config)#end
*Mar 1 00:34:16.015: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/0 from

6. 对 OSPF 进行认证配置。

首先对 OSPF 的认证进行一个总结。
OSPF 支持 2 种认证形式,分别是明文认证和 MD5 密文认证。
两种认证形式都可以采用基于接口或者基于区域的两种配置方法。
认证通过是指认证形式,以及认证密钥都一致。
首先我们对 R1 和 R2 进行明文认证。
R1(config)#int s1/0
R1(config-if)#ip ospf authentication-key cisco //指定明文认证密钥
R1(config-if)#ip ospf authentication //基于接口开启明文认证
R1(config-if)#exit
//R1(config)#router ospf 1
R1(config-router)#area 0 authentication //基于区域 0 开启明文认证,这条命令和上
一条的功能是一致的。可以根据实际情况选择基于接口开启还是基于区域开启。如
果是基于区域开启,那么所有属于该区域的接口都等同于开启了认证。
删去上述配置。然后在 R1 上进行 MD5 密文认证的配置。
R1(config)#int s1/0
R1(config-if)#ip ospf message-digest-key 1 md5 cisco //指定 MD5 认证密钥,KEY ID
为 1,密钥为 cisco
R1(config-if)#ip ospf authentication message-digest //基于接口开启 MD5 认证
R1(config-if)#exit
//R1(config)#router ospf 1
R1(config-router)#area 0 authentication message-digest
R1(config-router)# //基于区域 0 开启 OSPF 认证,这条命令和上一条的功能是一致
的。可以根据实际情况选择基于接口开启还是基于区域开启。如果是基于区域开启,
那么所有属于该区域的接口都等同于开启了认证。
如果需要认证成功,需要在 R2 同时配置上相同认证形式,以及相同密钥的认证。
R2(config)#int s1/1
R2(config-if)#ip ospf message-digest-key 1 md5 cisco //指定 MD5 认证密钥,KEY ID
为 1,密钥为 cisco
R2(config-if)#ip ospf authentication message-digest //基于接口开启 MD5 认证
R2(config-if)#exit
R2(config)#
*Mar 1 00:46:43.791: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on Serial1/1 from
LOADING to FULL, Loading Done //认证形式一致,密钥一致,邻居关系重新建立

7. OSPF 在思科路由器上拥有多种网络类型,并且在不同的网络类型上拥有不同的行为特点。

为了便于理解和记忆,我们将这些不同的特点从三个方面开总结。第一, 在该网络类型上,OSPF 是否能够自动发现邻居。第二, 在该网络类型上,OSPF 是否需要选举 DR。第三, 在该网络类型上,OSPF 的 Hello 间隔为多少。首先我们查看目前 R1 和 R2 的网络类型。
在这里插入图片描述
在这里插入图片描述
从上面的输出,我们可以发现,在串行链路上,OSPF 的默认网络类型为点到点。
点到点的网络类型:可以自动发现邻居,不需要选举 DR 和 BDR,Hello 间隔默认为
10s。
然后我们开启 R1 和 R2 之间的以太网接口,并且在该接口上启用 OSPF,也放置于
区域 0 中。
R1(config)#int e0/0
R1(config-if)#ip ospf 1 area 0
R1(config-if)#
R2(config)#int e0/1
R2(config-if)#ip ospf 1 area 0
R2(config-if)#exit
R2(config)#
这样 R1 和 R2 在以太网接口上将会建立一对邻居关系。
查看 R1 和 R2 在以太网上的网络类型和邻居情况。
在这里插入图片描述在这里插入图片描述

通过上述输出,我们可以发现,在以太网接口上,OSPF 默认的网络类型为广播。
广播网络类型:可以自动发现邻居,需要选举 DR 和 BDR,默认 hello 时间为 10s。
然后开启 R2 和 R3 的帧中继接口,并且将帧中继接口加入 OSPF 进程中。
R2(config)#int s1/0
R2(config-if)#encapsulation frame-relay //接口封装帧中继
R2(config-if)#no frame-relay inver
R2(config-if)#no arp frame-relay //关闭帧中继正向和反向地址解析
R2(config-if)#frame-relay map ip 10.10.23.3 102 broadcast //映射帧中继 MAP
R2(config-if)#ip add 10.10.23.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#ip ospf 1 area 0 //加入 OSPF 进程 1,并放置在区域 0
R2(config-if)#exit
R2(config)#
R3(config)#int s1/1
R3(config-if)#encapsulation frame-relay
R3(config-if)#no frame-relay inver
R3(config-if)#no arp frame-relay
R3(config-if)#frame-relay map ip 10.10.23.2 201 broadcast
R3(config-if)#ip add 10.10.23.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#ip ospf 1 area 0
但是经过等待,并没有发现 R2 和 R3 之间建立了 OSPF 邻居关系。
查看 R2 和 R3 之间的网络类型以及邻居状态。
在这里插入图片描述
在这里插入图片描述
从上面的输出,我们可以发现,OSPF 在帧中继接口上的默认网络类型为非广播
(NBMA)。
非广播网络类型:无法自动发现邻居(即使链路支持广播),需要选举 DR 和 BDR,
默认 Hello 时间为 30s。
既然 R2 和 R3 无法自动发现邻居,那么我们可以静态指定邻居。
R2(config)#router ospf 1
R2(config-router)#neighbor 10.10.23.3
R2(config-router)#
*Mar 1 01:17:12.911: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on Serial1/0 from
LOADING to FULL, Loading Done
R3(config)#router ospf 1
R3(config-router)#neighbor 10.10.23.2
*Mar 1 01:17:12.567: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/1 from
LOADING to FULL, Loading Done
从上面的输出可以发现,实际上只需要单边指定邻居即可。另一边如果收到对方的
单播 hello 包,则同样选择单播形式和对方进行邻居建立。
接着,我们将 R2 和 R3 的帧中继接口网络类型更改为点到多点。并且删去之前静
态指定的邻居。
R2(config)#router ospf 1
R2(config-router)#no neighbor 10.10.23.3
R2(config-router)#
*Mar 1 01:20:18.823: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on Serial1/0 from
FULL to DOWN, Neighbor Down: Neighbor deconfigured
R2(config-router)#exit
R2(config)#int s1/0
R2(config-if)#ip ospf network point-to-multipoint
R2(config-if)#
*Mar 1 01:20:43.147: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on Serial1/0 from
LOADING to FULL, Loading Done
R3(config)#router ospf 1
R3(config-router)#no neighbor 10.10.23.2
R3(config-router)#exit
R3(config)#int s1/1
R3(config-if)#ip ospf network point-to-multipoint
*Mar 1 01:21:12.803: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/1 from
LOADING to FULL, Loading Done
再次查看 R2 和 R3 之间 OSPF 网络类型以及邻居状态。
在这里插入图片描述
在这里插入图片描述
从上面的输出,我们可以发现,点到多点类似于一种特殊的点到点,便于理解,我
们可以把它看作“多个点到点”。
点到多点网络类型:自动发现邻居,不需要选举 DR 和 BDR,默认 hello 间隔为 30s。
我们再将 R2 和 R3 之间的网络类型更改为点到多点非广播。
R2(config)#int s1/0
R2(config-if)#ip ospf network point-to-multipoint non-broadcast
R3(config)#int s1/1
R3(config-if)#ip ospf network point-to-multipoint non-broadcast
*Mar 1 01:28:15.759: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/1 from
FULL to DOWN, Neighbor Down: Interface down or detached
在完成更改后,我们发现,R2 和 R3 之间的 OSPF 邻居 down 掉了。
由于 R2 和 R3 之间网络类型为点到多点非广播,因此无法自动发现邻居,需要静
态指定邻居。
R2(config)#router ospf 1
R2(config-router)#neighbor 10.10.23.3
*Mar 1 01:30:23.731: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on Serial1/0 from
LOADING to FULL, Loading Done
R2(config-router)#
R3(config)#router ospf 1
R3(config-router)#neighbor 10.10.23.2
*Mar 1 01:30:23.355: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on Serial1/1 from
LOADING to FULL, Loading Done
R3(config-router)#
查看此时 R2 和 R3 之间的网络类型和邻居状态。在这里插入图片描述
在这里插入图片描述
从上面的输出,我们可以发现,对于点到多点非广播,路由器并没有明确显示出该类型。只是显示为点到多点,因此可以认为点到多点非广播是一种特殊的点到多点
网络类型
点到多点非广播网络类型:不支持邻居自动发现,不需要选举 DR 和 BDR,默认 hello时间为 30s。通过上面的实验我们已经总结出了五种 OSPF 的网络类型,以及各自的特点。在配置时需要保证,两端的网络类型一定要一致。如果不一致的话,有时无法建立邻居关系,但是有时候会发生意想不到的结果。在 R2 和 R3 之间。我们将 R2 帧中继的网络类型更改为广播,而 R3 的帧中继接口网络类型更改为点到点。则此时 R2 的网络类型为广播,而 R3 的网络类型为点到点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA纯verilog实现CameraLink视频接收和发送,附带工程源码和技术支持

目录 1、前言2、CameraLink协议基础3、目前我已有的CameraLink收发工程4、设计方案5、CameraLink解码模块详解6、CameraLink编码模块详解7、vivado工程详解8、上板调试验证9、福利:工程代码的获取 1、前言 FPGA实现CameraLink视频编解码目前有两种方案:…

C++基本介绍

文章目录 🥭1.C基本介绍🧂1.1 C是什么🧂1.2 C发展史 🍒2. C的优势🥔2.1 语言的使用广泛度🥔2.2 C的应用领域 🫒3. C学习计划 🥭1.C基本介绍 🧂1.1 C是什么 C是一种通用…

用streamlit,几行代码就可以拥有漂亮图表!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。&#x1f44…

FastAPI 和 fastapi-amis-admin:强大而可扩展的后台管理解决方案!

大家好,我是安果! 我们都知道 Django 生态丰富,功能强大,适用于中、大型项目,并且自带了后台管理系统;而 FastAPI 更适用于构建高性能的 API,后台管理系统需要另外开发 本篇文章将介绍 FastAPI…

完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?

弄丢了离职证明怎么办? 一位网友哀叹: 完犊子!原单位的离职证明丢了,下周要入职了,现在怎么办?用AI做一个行不行? 有相同经历的网友安慰他,离职证明没了没事,新公司会要求…

打卡智能中国(五):博士都去哪儿了?

《打卡智能中国》系列更新了几期,有读者表示,很爱看这类接地气的真实故事,也有读者反映,不是电工,就是文员、农民、治沙人,人工智能不是高精尖学科吗?那些学历很高的博士都去哪儿了?…

用数据讲故事:十大统计学/机器学习魔法指数

统计学和机器学习为数据分析提供理论基础,入门时我看过很多统计学相关书籍,复杂的公式和推导过程让我一度陷入迷茫。对于数据科学/分析师来说,如何使用统计学知识并应用到我们的分析场景中更为重要。本文主要基于数据分析工作中的实际应用场景…

1000本!计算机经典书籍分享

闲话少说,列表如下。 编程语言类书籍 包含:Java、C、C、Python、Go等语言 Java电子书大全https://www.yingyanshe.cn/5275.htmlC电子书大全https://www.yingyanshe.cn/5284.htmlC语言类电子书https://www.yingyanshe.cn/5293.htmlC#电子书https://www…

chatgpt赋能Python-python_fg

Python FG: 优秀的Python工程师一定要知道的资源 如果你是一名Python工程师,那么你一定会喜欢Python FG资源。Python FG是一个在线平台,提供海量的Python API文档、教程、实例、以及与Python有关的各种工具和资源,让Python工程师轻松学习和使…

盘点!Instruction Tuning 时代的大模型

作者 | Kevin吴嘉文 整理 | NewBeeNLP 公众号 https://zhuanlan.zhihu.com/p/616830127 Alpaca,ChatGLM 等模型的效果可以接受,下文总结部分笔记,为训练自定义小型化(7B)模型提供点知识储备。包括模型论文 LaMDA, Mup…

纯净版Win10系统重装教程(超详细)

本博客详细讲解纯净版Win10系统重装,步骤齐全,小白可实操。 纯净版Win10系统重装教程 系统安装前准备下载安装工具更新重装 制作U盘为启动盘 重装Win10进入Boot模式选择系统版本分区系统安装中新系统配置 系统安装前准备 ➢ 准备8G或8G以上的空U盘。&a…

POSTGRESQL 10个使用POSTGRESQL 需要避免的错误 (译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

EOS网络基金会大战Block.One

微信公众号修改了推送规则,请各位亲爱的读者给刘教链公众号添加星标🌟,以便及时收到每日最新文章推送! 星标🌟添加方法:【1】点击标题下方“刘教链 刘教链”的第二个“刘教链”,打开公众号主页&…

chatgpt赋能Python-python_field

Python在Field上的应用 Python作为一门高级编程语言,在众多领域中扮演着应用广泛、易于学习、使用简便、速度出色的角色。在本文中,我们将重点关注Python在Field上的应用。 Field是什么? Field指的是“领域”,包括科学、工程、…

活动报名|分布式人工智能:可扩展性、效率和泛化性

2023年05月25日(星期四)14:00-15:30,智源社区「智源Live 第42期」线上活动将在线举办,「阅读原文」报名即可参加。 活动主题:分布式人工智能:可扩展性、效率和泛化性 安波 安波是新加坡南洋理工大学校长委员…

chatgpt赋能Python-python_for_end

Python for End: 介绍 Python是一种高级编程语言,由Guido van Rossum创建于1989年,并在1991年正式发布。Python是一种多范式编程语言,可以用于面向对象、函数式和过程式编程。它拥有简单易懂的语法以及扩展性强的库,从而使得开发…

见证ES6革命:深入学习let、const、var的区别、解构赋值、箭头函数等常用知识点,开创全新开发模式。

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…

ThingsBoard教程(五十):规则节点解析 创建关系节点Create Relation Node,删除关系节点 Delete Relation Node

创建关系节点 Create Relation Node Since TB Version 2.2.1 根据类型和方向,从所选实体创建到消息发起方的关系。 以下消息发起方类型被允许:资产、设备、实体视图、客户、租、仪表板。 通过元数据键模式查找目标实体,然后在源实体和目标实体之间创建关系。 如果选择的…

AbstractStringBuilder源码

介绍 AbstractStringBuilder这个抽象类是StringBuilder和StringBuffer的直接父类,而且定义了很多方法,因此在学习这两个类之前建议先学习 AbstractStringBuilder抽象类 该类在源码中注释是以JDK1.5开始作为前两个类的父类存在的 abstract class Abstr…

【已解决】使用selenium启动谷歌Chrome浏览器打开指定网站,页面空白,而使用其它浏览器手动打开该网站则正常

问题描述 1、在使用python实现自动化网络爬虫时,我使用到selenium来驱动谷歌Chrome浏览器来打开某一个网页,然后爬取数据,代码如下: from selenium import webdriver import timedriver webdriver.Chrome() driver.get(https://…