全网最详解答OSPF基础

发布于:2025-03-12 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

此图片为思科的(有些地方不对)

总结状态机:

OSPF的工作过程:

结构突变

1 突然新增一个网段--触发更新

2 突然断开一个网段--触发更新

3 无法通信---dead time

OSPF的配置

​编辑条件匹配:

​编辑1,指定路由器---DR

2,备份指定路由器---BDR

3,DR/BDR的选举规则

4,总结

 OSPF协议号---89

OSPF的头部:

Hello包 :


此图片为思科的(有些地方不对)

注意:在华为中 一般是组播,去发送hello包,不会unicast(单播)去发送

Two--Way状态---表示邻居关系的建立---就是在B给A发消息的过程之中,A看到了B的数据包中有A的数据包(就是Hello包里面有A的router-id),所以就进入了Two--way状态

然后,进入邻居关系后,这之间会有一个条件匹配的过程,如果能够完全匹配则进入到下一个状态,如果匹配不上,则一直保持着邻居状态,仅仅使用Hello包周期保活即可

匹配成功后:

 这里可以看到他们进入了exstart状态,并且在争着进入到下一个状态---他们在比较routerid的大小,那为什么他们会争着进入下一个状态呢?哦,原来是下一个阶段他们要进入到exchange的状态,一个交换信息的过程,要开始真正的发送数据了,那为什么不他们一起进入下一个阶段?

---数据资源占用的问题,会占用大量的LSA资源---错峰发送--减少LSA信息,减少资源占用--、

Estart状态--这里会有一个主从关系选举的过程

1,通过RID进行主从关系的选举,RID大的为主,为主可以优先获得LSA的信息---华为设备

像我的图中可以看到B的RID更大,但是是他先向A发送LSDB,这里和华为是反着的--思科

2,DBD包是通过隐性确认---不是用ACK确认的,为主的可以主导隐性确认 

什么叫隐性确认呢?

----他和显性的区别就是显性是通过ACK来发确认包的,隐性就是如果A(主)给B(从)发送数据包时,会携带seq(序列号),发送给B,然后B会回一个相同的seq给A(B不能主动给A发消息,就是如果B有什么变化了,B也不能主动给A发,只有等A发过来,B将信息带进去)

思考一下:为什么这里要用DBD而不用HELLO(因为都是带的RID)----主要就是标识了我们现在已经是邻居关系了,而不是之前什么都不认识的阶段----这里使用未携带数据的DBD包主要就是为了区分和之前的邻居关系

Exchage状态:交换摘要信息

Loading---注意这里没有ACK对于华为来说这是错误的,不会去进行显性应该是隐性

FULL状态---标志着邻接关系的建立--邻接关系的设定,是为了和之前的邻居关系区分,邻居是单纯用Hello保活,只有邻接才发LSA信息

总结状态机:

DOWN--启动OSPF,发送Hello包进入下一个状态

init状态(初始化):收到的Hello包中有本地的RID,则进入下一个状态

Two-way--双向通信状态---标志着邻居关系的建立

(条件匹配?)匹配成功则进入下一个阶段,匹配失败,则保留在邻居关系,仅使用Hello包进行周期保活

Exstart(预启动状态):使用未携带数据的DBD包进行主从关系的选举,为主的可以优先获取LSA的信息;

EXCHANGE状态(准交换的状态):使用携带数据的DBD包共享目录信息

LOADING---使用LSR,LSU,LSACK包获取未知的LSA信息

FULL--标志着邻居关系的建立

OSPF的工作过程:

启动配置完成后,0SPF向本地所有运行协议的接口以组播224.0.0.5的形式发送hello包,hello包中包含本地的RID以及自己已知的邻居的RID。之后,将收集到的邻居关系记录在一张表--- 邻居表。邻居表建立完成后,将进行条件匹配;如果失败,则停留在邻居关系,仅使用hello包进行周期保活。如果匹配成功,则开始建立邻接关系。首先使用未携带数据的DBD包进行主从关系选举,之后使用携带数据的DBD包共享目录信息。之后,本地使用LSR/LSU/LSAck包获取未知的LSA信息。完成本地数据库的建立---LSDB ---数据库表。

最后,基于本地的链路状态数据库,生成有向图及最短路径树,之后,计算出到达未知网段的路由信息。将生成的路由信息加载到本地的路由表中。

 收敛完成之后,OSPF依然会每10秒发送一次数据包进行一次周期保活,每30MIN进行一次周期更新。

结构突变

1 突然新增一个网段--触发更新

会立即变更信息,会立即将变更信息通过LSU包传递出去,需要ACK确认

当我以下面的(ospf配置)为例:突然在R1上增加一个L1的换回地址

2 突然断开一个网段--触发更新

立即发了一个LSU包更新,然后发送ACK进行确认

就是将OSPF的宣告直接去掉就行

3 无法通信---dead time

OSPF的配置

1,启动OSPF进程:

[R1]ospf 1 router-id 1.1.1.1

2,创建区域:

[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]

3,宣告:

1,激活接口

2,发布路由

[R1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0--- 反掩码(由连续的0和1构x成,这里0代表不可变,1代表可变)---精准宣告

[R1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255---网段宣告

配置完成后,详细说一下内容:

查看邻居表:[R1]display ospf peer 

 :华为设备默认不开启MTU的检测值

看邻居表的摘要信息:

[R1]display ospf peer brief 

 查看数据库表:

[R1]display ospf lsdb

 展开一条LSA信息

[R1]display ospf lsdb router 2.2.2.2

 华为体系下OSPF的默认优先级为10 

cost=参考带宽 / 真实带宽  ---华为体系下参考带宽默认是100Mbps

当我们的参考带宽为100时,按照上面的计算上面的速率快但是 算出来的结果却是上面为1(计算方式,小于1,取1,大于1,直接取整数部分),那么上面的cost=3 下面为2,但是明明上面的速率会更快,所以我们需要修改带宽

[R1-ospf-1]bandwidth-reference 1000

如果一个改了,所有设备都得改参考带宽,都的修改为一样的,这是一个评判标准

条件匹配:

首先看一下,如果在此图里面R1-R4都是处于一个邻接的状态,R5跟R2是邻接的状态,如果此时在R1的上行链路有一个设备断了,就会引发触发更新,这时,就会将LSU发给自己的邻接,如果都是像上图那样(蓝色线为邻接关系),R1就会告诉R2,R3,R4,R5,但是因为此时R2跟R3--R5也是邻接关系,那么他也将发送LSU,那么将会有大量的LSA信息发给链路上所有的邻接设备,导致资源更新多,而且我OSPF协议本来资源占用也多,这样,就会有更多更大的资源更新。所以我们就需要条件匹配来去掉一部分邻接关系

所以就砍掉R2,R3,R4之间的邻接关系

1,指定路由器---DR

2,备份指定路由器---BDR

3,DR/BDR的选举规则

1,比较优先级--大的为DR,次大的为BDR,所有接口的优先级为1

修改优先级的办法

[R1-GigabitEthernet0/0/0]ospf dr-priority ?
  INTEGER<0-255>  Router priority value

2,如果优先级相同,则比较RID

看一下R1的邻居表

诶?怎么DR是R1的接口?按照优先级相同的话我们应该是12.0.0.2来当DR,怎么回事呢?

原来是因为我最开始配置的时候先配的R1,当环境中没有其他设备的时候,启动ospf的时候,自然环境里面只有我一台设备,当我开启R2的时候,看到了环境中已经有DR了,那我就乖乖去当BDR---这也叫非抢占模式

那为什么要设置为非抢占模式呢?

我觉得主要是为了提高网络的稳定性

首先如果在我的网络中有n台(n>=4)路由器,并且DR,BDR已经选举好了,收敛完成。如果此时有一个优先级更大,或者RID更大的设备加入到网络中,此时我的DR和BDR都要重新选举,又要重新开始发LSA的信息,让一个原本收敛完成的网络,再次变得不稳定--所以选非抢占模式

但是会有一个选举时间----等同于死亡时间(40s)

此时我们只需要重新启动进程,就可以让DR到12.0.0.2上面

命令:<R1>reset ospf 1 process 

可以看到重新开始商量邻接关系:

再次查看peer表:

回归正常

4,总结

条件匹配 --- 在MA网络中,若所有的设备均为邻接关系,将出现大量的重复更新;所以,需要进行DR/BDR的选举,所有非DR/BDR(DROther)之间仅维持邻居关系。DR和BDR需要和其他设备之间建立邻接关系,一个MA网络中,如果DR和BDR都齐全,则至少需要4台设备才能看到邻居关系。DR和BDR其实是接口的概念。

其实DR,BDR其实是一个接口的概念

 OSPF协议号---89