前文我们了解了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. Go语言协程并发---原子操作

    package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...

  2. SQL Server将同一列多条数据合并成一行

    Sql server中,将同一字段多条数据用字符拼接为一个字符串方式. 原数据查询展示: 使用 STUFF 函数,将结果列拼接成一行.结果如下: STUFF: 1.作用 stuff(param1, s ...

  3. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  4. MinkowskiNonlinearities非线性

    MinkowskiNonlinearities非线性 MinkowskiReLU class MinkowskiEngine.MinkowskiReLU(*args, **kwargs) __init ...

  5. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...

  6. 基于ARM Cortex-M的SoC存储体系结构和实战

    基于ARM Cortex-M的SoC存储体系结构和实战 System on Chip Architecture Tutorial Memory Architecture for ARM Cortex- ...

  7. Win10 下python_appium的Android手机自动化环境搭建

    前提: 已经安装好了Java环境,且配置了环境变量 已经安装python3.8.2,已经安装pycham. 一.安装appium_client ,pycham中也需要安装 二.安装node.js(需要 ...

  8. 28.qt quick-ListView高仿微信好友列表和聊天列表

    1.视图模型介绍  在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...

  9. 简单sql字段解析器实现参考

    用例:有一段sql语句,我们需要从中截取出所有字段部分,以便进行后续的类型推断,请给出此解析方法. 想来很简单吧,因为 sql 中的字段列表,使用方式有限,比如 a as b, a, a b... 1 ...

  10. 安装Apache、Nginx和PHP-基于Centos7环境

    使用的软件:putty或Xshell都可. 一.搭建Apache 1.编译安装 (1).安装编译器 yum install -y gcc (2)安装Opensll 查询官网得到OpenSSL下载网址h ...