前文我们主要了解了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基础(二)的更多相关文章

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

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

  2. HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件

    前文我们了解了OSPF的router id.数据包结构.类型.不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027 ...

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

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

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

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

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

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

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

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

  7. HCNA Routing&Switching之二层交换技术VLAN基础

    前文我们主要聊了下交换机的工作原理和以太网接口的速率和双工相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15088183.html:今天我们主要来聊一 ...

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

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

  9. HCNA Routing&Switching之路由基础

    在开始聊路由之前,我们首先要明白在网络通讯里,什么是路由?什么是路由表.路由器以及网关的相关术语:路由简单讲就是指网络数据包从源头到目标的路径,主要用来为不同网络间通讯提供数据包转发依据:路由表就是多 ...

随机推荐

  1. 如何屏蔽 iOS 软件自动更新,去除更新通知和标记

    适用于 iOS.iPadOS 和 watchOS,即 iPhone.iPad 和 Apple Watch 通用. 请访问原文链接:https://sysin.org/article/Disable-i ...

  2. JDK8中Stream使用解析

    JDK8中Stream使用解析 现在谈及JDK8的新特新,已经说不上新了.本篇介绍的就是Stream和Lambda,说的Stream可不是JDK中的IO流,这里的Stream指的是处理集合的抽象概念『 ...

  3. Spring Mvc Long类型精度丢失

    背景 在使用Spring Boot Mvc的项目中,使用Long类型作为id的类型,但是当前端使用Number类型接收Long类型数据时,由于前端精度问题,会导致Long类型数据转换为Number类型 ...

  4. Go语言基础包之net/http

    Go语言基础包之net/http Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的 ...

  5. MongoDB学习笔记:文档Crud Shell

    MongoDB学习笔记:文档Crud Shell   文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...

  6. Relay张量集成

    Relay张量集成 Introduction NVIDIA TensorRT是一个用于优化深度学习推理的库.这种集成将尽可能多地减轻从中继到TensorRT的算子,在NVIDIA GPU上提供性能提升 ...

  7. 特斯拉Tesla Model 3整体架构解析(下)

    特斯拉Tesla Model 3整体架构解析(中) Tesla Computer Unit 特斯拉已经开发了一个由自动驾驶仪和信息计算机组成的定制"液冷双计算平台"."他 ...

  8. 利用MONAI加速医学影像学的深度学习研究

    利用MONAI加速医学影像学的深度学习研究 Accelerating Deep Learning Research in Medical Imaging Using MONAI 医学开放式人工智能网络 ...

  9. 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

    Linkerd 是 Kubernetes 的服务网格. 它通过为您提供运行时调试(runtime debugging).可观察性(observability).可靠性(reliability)和安全性 ...

  10. Python_selenium页面元素整合设计经验