前文我们了解了OSPF的router id、数据包结构、类型、不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027272.html;今天我们来了解下OSPF建立邻居的条件;

  我们知道OSPF动态路由协议能够正常学习到别的路由器的路由,最重要的是相邻的路由器必须建立起邻居关系,然后才能学习到对方的路由;那么两个相邻的路由器,怎么样才能建立起邻居呢?

  1、router id必须唯一;

  实验:如下实验拓扑,把两个路由器的router id都设置成5.5.5.5,两者是否建立起邻居?

  配置R1

  配置R2

  提示:此时把R2的router id和R1都配置成5.5.5.5,ospf进程给我们提示了一条router id冲突的日志;此时两者邻居关系并没有建立起来;说明router id不唯一,是建立不起邻居关系的;

  验证:把R2的router id修改成2.2.2.2 ,然后重启ospf进程,看看对应邻居是否能够建立起来呢?

<R2>sys
Enter system view, return user view with Ctrl+Z.
[R2]ospf 1 router-id 2.2.2.2
Jul 19 2021 22:01:28-08:00 R2 %%01OSPF/4/CONFLICT_ROUTERID_INTF(l)[0]:OSPF Router id conflict is detected on interface. (ProcessId=256, RouterId=5.5.5.5, AreaId=5.0.0.0, InterfaceName=GigabitEthernet0/0/0, IpAddr=2.0.0.12, PacketSrcIp=1.0.0.12)
[R2]ospf 1 router-id 2.2.2.2
Info: The configuration succeeded. You need to restart the OSPF process to validate the new router ID.
[R2-ospf-1]q
[R2]q
<R2>reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
<R2>sys
Enter system view, return user view with Ctrl+Z.
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[1]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init)
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[2]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way)
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[3]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart)
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[4]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Exchange)
[R2]
Jul 19 2021 22:01:47-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[5]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading)
[R2]
Jul 19 2021 22:01:47-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[6]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full)
[R2]dis ospf peer brief OSPF Process 1 with Router ID 2.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.5 GigabitEthernet0/0/0 5.5.5.5 Full
----------------------------------------------------------------------------
[R2]

  提示:可以看到我们修改了R2的router id 重置了ospf以后,对应就和R1建立起邻居;

  2、区域id必须相同

  验证:还是上述实验拓扑,我们把R2的区域id修改为2,看看对应邻居关系是否还会一直建立呢?

  提示:可以看到把R2的区域id 修改为2,对应R2并没有和R1建立起邻居关系,其原因是R1的hello包只会在area5这个区域泛洪,而R2的hello包只会在area2这个区域泛洪,所以R1只会和area5区域中的路由器建立邻居,不会和area2区域中的路由器建立邻居;

  3、Hello/Dead时间间隔一致

  验证:我们把上述实验中R2的hello包发送时间间隔修改为5秒一次,看看对应R1和R2是否会建立起邻居呢?

  提示:默认情况hello包是每隔10秒发一次,死亡时间是发送间隔时间的4倍;修改hello包的发送间隔时间,需要进入到对应的接口进行修改;其次修改了hello包发送间隔时间以后,它不会立马断开,而是要等,等40s,等到hello包死亡,此时ospf进程会给我们日志说接口参数不匹配,导致邻居从full状态转变为down状态;如下图

  验证:我们把R1ospf接口时间和R2修改成一样,看看对应邻居是否会重新建立起来呢?

  提示:我们修改了R1对应接口上ospf发送hello包的间隔时间和R2接口发送hello包间隔时间一样以后,对应R1就和R2迅速建立起邻居;

  4、如果配置了认证,对应认证必须一致

  验证:在上述实验中我们把R2上运行的ospf配置上认证,看看是否还能和R1建立起邻居?

  提示:可以看到我们在R2的ospf区域中配置了认证以后,对应邻居关系就从full状态转变为down状态,说明如果ospf配置了认证,对应都应该配置认知,否则不予建立邻居关系;

  验证:在R1的相关接口配置和R2相同模式的相同密码认证,看看对应邻居关系是否会恢复呢?

  提示:可以看到当R1的相关接口配置了和R2相同认证模式,相同认证密码以后,对应邻居关系又迅速建立起来了;这里提一下,ospf的认证的配置可以在接口上配置,也可以在ospf进程区域中配置,不管是在接口上配置还是在区域中配置认证,只要模式,对应模式相关参数和密码相同,都能通过认证;上述截图中md5 后面的数字是key的值,两边配置认证,这个key也必须相同,否则认证会失败;

  5、子网掩码和网络地址一致(以太网环境)

  验证:把上述实验中的R2的g0/0/0接口的ip地址掩码修改为8,看看对应邻居关系是否还会存在呢?

  提示:我们修改了R2 上的g0/0/0接口地址的掩码以后,立刻R1和R2的邻居关系就down了,这里只是告诉我们接口发生了变化;

  抓包看看,对应R1和R2发送到hello包有什么不同?

  提示:可以看到修改R2接口的掩码以后,对应R2发送到hello包,对应掩码就变成了255.0.0.0,而R1的接口掩码没有发生变化,还是255.255.255.0;所以当两个路由器发送到hello包中掩码不一致也会导致邻居关系建立不起来;其实掩码的主要作用就是用来计算网络地址,网络地址的作用就是确定两个ip地址是否是同一网络,如果不在同一网络,则无法建立邻居;

  如何判断两个ip地址是否是同一网络呢?

首先我们需要把a地址同自身掩码计算出网络地址x,然后把a地址的掩码和b地址做与运算,算出网络地址为y,如果x=y我们就说a和b在同一网络;反之a和b不在同一网络;这里一定要记住判断a和b是否在同一网络中,需要把a地址同a的掩码进行计算得出网络地址,同时b地址也需要同a的掩码进行计算;同样的道理,我们如果要判断b和a是否在同一网络中,就需要把b的地址同b的掩码进行计算得出网络地址,a地址同b的掩码进行计算得出网络地址,如果两者计算出来的网络地址一样,则表示两者在同一网络中,反之亦然;这样一来就存在a和b在同一网络,但b和a就不一定在同一网络;

  示例:a主机的地址是192.168.0.129/24 b主机地址是192.168.0.3/27

a和b在同一网络,因为a的网络地址是192.168.0.0 b的网络地址是192.168.0.0(b的网络地址此时需要同a的掩码进行与运算)

b和a不再同一网络,因为b的网络地址是192.168.0.0 a的网络地址是192.168.0.128(此时a网络地址就需要同b的掩码进行与运算)

  通过上述的解释我们在以太网环境中跑ospf,两个接口的ip地址的掩码和网络地址必须一致才能建立起邻居;

  6、末梢区域设置一致

  末梢区域设置表现在ospf的数据包中的字段就是外部路由选项,如下图

  提示:默认情况两个路由器红框中的字段是一样的;

  验证:设置R2的ospf区域为nssa区域,看看对应邻居是否会down?

  提示:可以看到我们一旦把R2中ospf的区域设置为nssa区域以后,对应邻居关系就down了;这里要提示一下,骨干区域是不允许设置为nssa区域;

  抓包分析

  R2发送的hello包

  R1发送的hello包

  从上面的抓包来看,在R2的外部路由选项中,对应nssa区域字段被置为1,和R1中的字段不同,所以两者信息不匹配,所以两者之前建立好的邻居关系会down掉;

  验证:把R1的区域也设置成nssa区域,看看对应邻居是否会恢复呢?

  提示:可以看到把R1ospf区域也修改为nssa区域,对应邻居又恢复正常;这是因为R1和R2都是nssa区域,所以对应外部选项对应字段的值都是一样,所以邻居建立了;

HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件的更多相关文章

  1. HCNA Routing&Switching之动态路由协议OSPF基础(一)

    前文我们了解了基于路径矢量算法的动态路由协议RIP防环以及度量值的修改相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15012895.html:今天我 ...

  2. HCNA Routing&Switching之动态路由协议OSPF DR和BDR

    前文我们了解了OSPF建立邻居关系的条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15032907.html:今天我们来聊一聊OSPF中的DR和BDR: ...

  3. HCNA Routing&Switching之动态路由协议OSPF基础(二)

    前文我们主要了解了OSPF的区域.区域分类.路由器类型.OSPF的核心工作流程,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/15025533.html:今天 ...

  4. HCNA Routing&Switching之动态路由协议RIP

    前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...

  5. HCNP Routing&Switching之动态路由协议IS-IS基础

    前文我们了解了OSPF的特殊区域相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15236330.html:今天我们来聊一聊另一动态路由协议IS-IS相 ...

  6. HCNA Routing&Switching之动态路由基本概念

    前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...

  7. HCNA Routing&Switching之OSPF缺省路由发布

    前文我们了解了OSPF的度量值,以及基础配置命令的总结,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15069632.html:今天我们来聊一聊在ospf里动 ...

  8. HCNA Routing&Switching之OSPF度量值和基础配置命令总结

    前文我们了解了OSPF的网络类型,OSPF中的DR和BDR的选举规则.作用等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15054938.html: ...

  9. 1.4-动态路由协议OSPF⑥

    OSPF Network Type/网络类型     (Run Mode/运行模式) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 物理 ...

随机推荐

  1. Docker学习(7) 构建镜像

    构建docker镜像 1 构建镜像的两种方式 1 通过容器构建镜像 2 通过Dockerfile构建镜像

  2. the rust book 的简单入门笔记

    rust learning day 1 (2021/05/27) 学了常量,变量,数据类型,控制流,所有权 char 的宽度是4字节,一个 unicode 的宽度 控制流条件都不要括号 rust 中的 ...

  3. 0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想

    dfs前置知识: 递归链接:0基础算法基础学算法 第六弹 递归 - 球君 - 博客园 (cnblogs.com) dfs深度优先搜索:0基础学算法 搜索篇第一讲 深度优先搜索 - 球君 - 博客园 ( ...

  4. Java Spring boot 多商户入驻 外卖|跑腿|代驾 Uniapp版本

    技术说明: 源码下载:https://www.yuanmahy.com/8357.html 开发环境:jdk1.8,mysql5.7,node 9.4,redis6.2,npm6.9 开发工具:前端使 ...

  5. 【NX二次开发】Block UI 反向

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  6. 【NX二次开发】Block UI 通过浏览选择文件夹

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  7. 【UG二次开发】 UF_OBJ_ask_name 获取对象名字

    代码 char name[256]; UF_OBJ_ask_name(objTag, name);

  8. Mac下安装及配置Appium环境

    candiceli   Mac下安装及配置Appium环境 我是小白,自己研究appium好几周了. 一开始按照同事这篇文章设置Mac下的环境,http://www.cnblogs.com/tangd ...

  9. YoyoGo v1.7.2 发布, 支持 Nacos & Apollo 配置中心

    YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . https ...

  10. Netty 框架学习 —— EventLoop 和线程模型

    EventLoop 接口 Netty 是基于 Java NIO 的,因此 Channel 也有其生命周期,处理一个连接在其生命周期内发生的事件是所有网络框架的基本功能.通常来说,我们使用一个线程来处理 ...