HCNA Routing&Switching之动态路由协议OSPF基础(二)
前文我们主要了解了OSPF的区域、区域分类、路由器类型、OSPF的核心工作流程,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/15025533.html;今天我们来聊一聊OSPF的router-id、OSPF的数据包和OSPF状态机制相关话题;
router-id的作用
router id的主要作用是用来唯一标识一台ospf路由器;这个标识可以手动配置,当然如果没有手动配置,它也会根据路由器上的接口情况,进行选取;一般情况强烈推荐手动配置;
router id自动选取得顺序规则
1、我们在配置ospf时,如果没有手动配置router id,此时ospf首先会探测有没有活动的回环接口,如果有,就把回环接口的ip地址作为路由器的唯一标识;如果回环接口有多个,则在多个回环接口中,把ip地址最大作为路由器的router id;
2、如果没有探测到有活动的回环接口,接下来ospf会探测,有没有活动的物理接口,如果有,就选择对应物理接口的ip地址作为router id,如果有多个活动的物理接口,则在多个活动的物理接口中选取ip地址最大的作为路由器的router id;
3、如果既没有回环接口,也没有活动的物理接口,此时路由器的router id就为0.0.0.0;表示ospf路由器的router id为空;此时ospf进程是无法正常启动的;
验证:在不配置任何接口的情况下,直接运行ospf进程,看看对应选取的router id是什么?

提示:可以看到当路由器上没有任何活动接口是,此时运行ospf进程,它现在的router id就是0.0.0.0;其实此时路由器ospf是没有运行起来的;
验证:当路由器配置了一个回环接口时,router id是否会是这个回环接口的ip地址呢?

提示:可以看到我们在路由器上添加一个回环接口以后,对应ospf的router id就选择了对应回环接口作为router id;
验证:当路由器只有活动的物理接口时,ospf进程会怎么选取router id呢?

验证:当路由器有活动的回环口和物理接口,ospf进程会怎么选取router id呢?

提示:可以看到在有物理课和lo接口时,物理接口生效;这是模拟器的一个小bug;我们重新开一个路由器R2,配置物理接口和lo接口,看看对应router id会这么选择呢?

提示:可以看到新开的一个路由器,配置lo接口和物理接口以后,启动ospf,此时ospf会优先选取lo接口ip地址作为router id;
手动配置ospf 进程的router id

提示:手动配置router id的优先级最高,这里还需要说明一点,router id是非抢占性的;所谓非抢占是指如果一旦router id选择好以后,即便后面我们又手动指定了router id ,此时router id 不会立马变更为我们手动指定的router id,要想新的router id 生效,我们必须重启ospf进程;
验证:更改R2的router id为3.3.3.3

提示:可以看到我们修改router id时,系统提示我们新的router id需要重启ospf进程才会生效;
验证:重启ospf进程,看看对应新的router id是否会生效呢?

提示:可以看到重新启动了ospf进程以后,对应router id 就变更为新的router id;这里还需要注意一点,router id是用来标识路由器,其格式类似ip地址;手动指定router id我们只需要保证对应router id的格式和唯一性即可,它和接口ip没有任何关系;
OSPF数据包结构和类型

如上实验拓扑,在R1和R2上配置好相应的接口和路由器名称,然后抓包看看对应ospf包的结构
配置R1
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sys R1
[R1]int lo 1
[R1-LoopBack1]ip add 1.1.1.1 32
[R1-LoopBack1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24
[R1-GigabitEthernet0/0/0]ospf 1 router-id 1.1.1.1
Jul 18 2021 18:58:06-08:00 R1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state.
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]net 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0]net 12.0.0.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0]q
[R1-ospf-1]dis ip int b
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 3
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 3
The number of interface that is DOWN in Protocol is 2 Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.0.0.1/24 up up
GigabitEthernet0/0/1 unassigned down down
GigabitEthernet0/0/2 unassigned down down
LoopBack1 1.1.1.1/32 up up(s)
NULL0 unassigned up up(s)
[R1-ospf-1]
配置R2
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sys R2
[R2]int lo 2
[R2-LoopBack2]ip add 2.2.2.2 32
[R2-LoopBack2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.0.0.2 24
[R2-GigabitEthernet0/0/0]ospf 1 router-id 2.2.2.2
Jul 18 2021 18:59:03-08:00 R2 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state.
[R2-GigabitEthernet0/0/0]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]net 12.0.0.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]q
[R2-ospf-1]dis ip int b
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 3
The number of interface that is DOWN in Physical is 2
The number of interface that is UP in Protocol is 3
The number of interface that is DOWN in Protocol is 2 Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 12.0.0.2/24 up up
GigabitEthernet0/0/1 unassigned down down
GigabitEthernet0/0/2 unassigned down down
LoopBack2 2.2.2.2/32 up up(s)
NULL0 unassigned up up(s)
[R2-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
Jul 18 2021 18:59:13-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-ospf-1]
验证:R1的邻居是否是R2?

提示:可以看到R1的邻居是R2,并且两者的邻居状态为full状态,说明R1和R2已经建立起邻居关系;
抓包分析

提示:从上面抓到hello包可以看到其结构,ospf的hello包是在ip头部的后面,说明ospf协议是网络层协议;其次ospf包里主要包含ospf包头和包类型数据;
ospf数据包结构

提示:ospf运行在ip协议之上,是网络层协议,协议号为89;
ospf hello包结构

提示:对于ospf的包来讲,其ospf包头结构不会发生变化,头部主要信息有版本信息,默认ipv4是使用ospf v2版本;类型是用来表示ospf包类型,ospf包的类型有五中类型;分别是hello包,dd包(database description),LSR(Link-State Request ),LSU(Link-State Update),LSACK(Link-State Acknowledgment)这五种数据包类型;对于不同类型的ospf数据包,其作用和数据格式各不相同;类型后面是包的长度,路由器的router id,区域id,校验和、身份认证类型和身份认证的相关信息;
ospf数据包类型和作用


提示:LSA它不是一个包类型,它是LSU包中的数据,发送LSU就把对应LSA发送给对方;对LSU来说,每个LSU数据包都要由LSACK确认;
OSPF状态机制

提示:ospf路由器和路由器之间的最终关系有个,一个是邻居关系,另一个是邻接关系,状态为full表示是邻接关系;状态为2way表示两者为邻居关系;只有2way和full状态是最稳定的状态;
各状态说明
down:失效状态,表示没有收到hello包;
init:初始状态,收到hello包,当没有在hello包中看到自己是对方的邻居的信息;
Two-way:双向通讯状态,收到hello包,并且在对应的hello包中看到自己是对方的邻居的信息;
EXstart:交换初始状态,决定信息交换时路由器的主从关系(这里主从是指以那个路由器的序列号为准,默认是router id大者为主);
ExChange:交换状态,向邻居发送dd数据包;
Loading:加载状态,LSR和LSU的交换;
Full:完全邻接状态,LSDB同步,形成邻接关系;
OSPF工作流程(数据包和状态切换过程)
第一阶段是使用Hello包建立双向通信的过程,成为邻居关系。

提示:首先在R1和R2互相不认识之前,两者都是Down的状态(不知道对方的存在),当R1首次向R2发送hello包时,R1会把自己的router id和邻居的router id带上,如果没有邻居,对应邻居字段就为0.0.0.0(空);此时如果R2收到R1发送到hello包以后,它会查看对应的包里面的内容,如果在hello包中邻居的字段中没有看到是自己的router id,此时R2的状态会变为init状态,同时R2也会发送一条hello包给R1,里面的内容就是R2的router id已经邻居为R1的router id;当R1收到R2发送过来的hello包,并在hello包中看到对方的邻居是自己的router id ,此时R1的状态会变为Two-way状态;表示R1认识了R2,并成为邻居关系;此时R1再次发送hello包时就会把对应邻居的字段修改为R2的router id,此时R2收到的R1发送的hello包后,在对应的hello包中看到对应的邻居字段是自己的router id时,此时R2就会从init状态变为Two-way状态;此时R1和R2就互为邻居,默认是每10秒发送一次hello包,以表示自己还存活;
第二阶段是通过交换LSA达到LSDB同步,建立邻接关系


提示:在MA(多路访问)网络中,建立好邻居以后,双方各自会认为自己是master,都会发送自己的router id,当router id较小的路由器收到router id较大的路由器发送的hello以后,它会将自己数据包中的MS选项置为0,表示非master;选举好主从以后,后面就是发送数据库摘要信息,发送LSR和LSU最后当所有的LSU确认完毕以后,两者都会成为full状态,表示两者建立好完全邻接关系;
HCNA Routing&Switching之动态路由协议OSPF基础(二)的更多相关文章
- HCNA Routing&Switching之动态路由协议OSPF基础(一)
前文我们了解了基于路径矢量算法的动态路由协议RIP防环以及度量值的修改相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15012895.html:今天我 ...
- HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件
前文我们了解了OSPF的router id.数据包结构.类型.不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027 ...
- HCNA Routing&Switching之动态路由协议OSPF DR和BDR
前文我们了解了OSPF建立邻居关系的条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15032907.html:今天我们来聊一聊OSPF中的DR和BDR: ...
- HCNP Routing&Switching之动态路由协议IS-IS基础
前文我们了解了OSPF的特殊区域相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15236330.html:今天我们来聊一聊另一动态路由协议IS-IS相 ...
- HCNA Routing&Switching之动态路由协议RIP
前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...
- HCNA Routing&Switching之动态路由基本概念
前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...
- HCNA Routing&Switching之二层交换技术VLAN基础
前文我们主要聊了下交换机的工作原理和以太网接口的速率和双工相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15088183.html:今天我们主要来聊一 ...
- HCNA Routing&Switching之OSPF度量值和基础配置命令总结
前文我们了解了OSPF的网络类型,OSPF中的DR和BDR的选举规则.作用等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15054938.html: ...
- HCNA Routing&Switching之路由基础
在开始聊路由之前,我们首先要明白在网络通讯里,什么是路由?什么是路由表.路由器以及网关的相关术语:路由简单讲就是指网络数据包从源头到目标的路径,主要用来为不同网络间通讯提供数据包转发依据:路由表就是多 ...
随机推荐
- 『动善时』JMeter基础 — 33、JMeter察看结果树的显示模式详解
目录 1.CSS Selector Tester视图 2.HTML查看器 (1)HTML视图 (2)HTML(download resources)视图 (3)HTML Source Formatte ...
- [leetcode] 69. x 的平方根(纯int溢出判断实现)
69. x 的平方根 非常简单的一个题,用二分法逼近求出ans即可,额外注意下溢出问题. 不过我要给自己增加难度,用long或者BigNum实现没意思,只能使用int类型 换句话当出现溢出时我们自己得 ...
- 编译ONNX模型Compile ONNX Models
编译ONNX模型Compile ONNX Models 本文是一篇介绍如何使用Relay部署ONNX模型的说明. 首先,必须安装ONNX包. 一个快速的解决方案是安装protobuf编译器,然后 pi ...
- 学废了系列 - WebGIS vs WebGL图形编程
目前工作中有不少涉及到地图的项目,我参加了几次技术评审,前端伙伴们在 WebGIS 方面的知识储备稍有不足,这次分享的主要目的是科普一些在前端领域比较常用的 WebGIS 知识.另外,我之前的工作中积 ...
- 彻底删除Docker
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-la ...
- 【NX二次开发】Block UI 双精度表
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 【NX二次开发】批量数字签名的方法,解决自己电脑编译的dll在用户正版NX无法使用的问题
在UG5.0开始,所有开发的DLL都要"签名"后才能被客户端上正版的NX调用. 1. 如果是基于c++开发的dll,使用如下方法可以顺利签名成功(这里借用网上现有的文字和图片) 1 ...
- 入门实践丨如何在K3s上部署Web应用程序
在本文中,我们将使用Flask和JavaScript编写的.带有MongoDB数据库的TODO应用程序,并学习如何将其部署到Kubernetes上.这篇文章是针对初学者的,如果你之前没有深度接触过Ku ...
- 示例讲解PostgreSQL表分区的三种方式
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...
- div和img垂直居中的方法
div垂直居中可以使用height和line-height,多个div的话就不适用了. 可以使用下面的方式垂直居中 <div class="parent"> <d ...