1.五种包
1.1.Hello
Hello包建立和维护邻居关系
1.2.DBD
DBD链路状态数据库描述,协商主从关系
1.3.LSR
链路状态请求,对方需要发出的LSU信息进行申请。
1.4.LSU
LSU中有LSA,包含了网络地址、掩码、度量值。
1.5.LSACK
链路状态确认包,确认已经收到对端的包(除了Hello以外)
2.七个状态
2.1.DOWN
下面几种情况会出现down:
- 没有宣告OSPF邻居
- 40S时间都未收到Hello包超时。
- 已经宣告OSPF,收到对端发送的OSPF Hello,进入到INIT
2.2.INIT
作用:确认对端的router-id
2.2.1.为何知道对端的router-id
因为router-id是在OSPF中的标识,且在2way(DR选举)、exstart(主从选举)状态下选举DR的条件之一。
2.2.2跳转条件
已经宣告OSPF,但对端发送的OSPF Hello包中未包含本机的router-id(active neighbor)
已经宣告OSPF,对端发送的OSPF Hello包中包含本机的router-id(active neighbor),进入到2way
2.3.TWO WAY
作用:选举DR和BDR
2.3.1为何要选举DR
DR:指定路由器,作用是收集LSU,统一发送的过程;
BDR:备用指定路由器,作用作为 DR的备份。
没有设计DR的情况下,如果同个广播域下有100个OSPF邻接关系,其中的每一台设备都得接收到其他99台设备的更新包,一共接收到99*100=9900;
有设计DR的情况下,如果有同个广播域下有100个OSPF邻接关系,其中的每一台设备只要接收DR设备一个更新包,一共接收到100。
2.3.2.DR选举过程
- 优先级 越大越优
默认为1,范围是从0~255,0代表不参与选举DR。
- Router-id 越大越优
- 手动指定
- 逻辑端口最大的IP地址 越大越优
- 物理端口最大的IP地址 越大越优
2.3.3.跳转条件
当Hello中DR已经确定选举出来,这时候跳到exstart状态。
2.4.EXSTART
作用:主从选举
2.4.1.主从选举的目的
确定OSPF LSA的序列号
2.4.2.主从选举的过程
发送DBD包,比较Router-id越大越优
I=1 代表发送的第一个DBD包。
I=0 代表发送不是第一个DBD包。
I=1,MS=1 第一个DBD包发送的时候,无法判断主从关系的。
I=0,MS=1发送的设备为主设备的。
2.4.3.跳转条件
I=0,MS=1 此时发送DBD的设备为主设备的时候,跳转到exchange
2.5.EXCHANGE
作用:传输DBD包。
2.5.1.为何传输DBD包
DBD包主要是链路数据库描述,链路状态数据库比较大的时候,通过目录可以选择更新需要的。
2.5.2.跳转条件
当DBD包发送完了之后,M=0,跳转到loading状态
2.6.LOADING
作用:发送LSR、LSU、LSACK
LSU报文中包含LSA1、2、3、4、5、7
LSA:链路状态通告,传输路由信息。
2.6.1跳转条件
当所有的LSR请求更新LSU都完成,跳转到full
2.7.FULL
作用:10S发送一个hello包,邻接。
Hello发送时间:10S
超时时间:40S
此时正常只会发送hello
Full在以下情况会发送其他报文:
- 产生路由更新或者路由震荡。
- 时间计时器,每过1800S发送所有LSA的更新,当超过2次都没收到(3600S),路由自动失效。
3.OSPF七个状态通俗版
OSPF邻接关系主要分为以下七个步骤
那每个步骤是有什么用的?都说OSPF很复杂,好吧,我们用微信加好友,建群的方式通俗解释下详细过程。
3.1.DOWN
刚开始大家都相互不认识,也没有兴趣认识对方。(这时就是Down 状态)
3.2.INIT
这时候你想要加对方的微信号,肯定要备注上你是谁谁谁。(这时OSPF进入Init)
3.3.TWO WAY
对方看你备注的信息,也同意你的好友请求,这时候双方也知道各自的微信号啥啥的(router-id)。(这时就进入Two way状态)
然后接着呢,有20个人想要一起沟通,那就组建一个群吧,那谁当群主(DR/BDR)呢,所有人都想当群主,大家都得亮出你们的能力(优先级越大越优)谁牛逼?如果大家的能力都差不多该如何是好呢?那么就比比微信号(router-id越大越优),通过这样就把群主选出来了。
注意:群主确定后就算后续有更牛逼的人加入,也不会成为群主(DR不抢占)。
3.3.1.那么选群主有什么好处呢?
比如没有群主,现在微信群有20个人,所有人都要知道其他人的手机号该怎么办?20个人都发送一遍自己的手机号信息到微信群里面,每个人也就是20个人,都得记录除了自己以外的19个人的的手机号,那这时所有人的总记录次数是20✖️19=380,对应的公式就是N✖️(N-1),随着人数增多每个人所需要记录的次数就越多。
如果有群主,群里现在20个人,还是一样群里所有人都要知道其他人的的手机号,20个人都发送一遍自己的手机号信息到微信群里面,只有群主(DR/BDR)负责统一收集除自己以外的19个人的手机号,然后把手机号进行收集打包发送给非群主的(DRother)19个人,那么群主一共收集了19次,剩下19人只接收群主整理后的信息1次,那这时所有人的总记录次数是 19+19=38次,人数越多选举群主优势越明显。这就是在多人群(广播型多路访问环境)内交流选出群主的好处。
3.3.2.不选群主的情况
那么肯定人问?如果是两个人交流(点对点)呢?这时候还选群主吗?明显不需要,因为选举群主没那么容易,又要比能力,有得比微信号,所以这个选举的周期就比较长(通常20S左右),所以只有两个人的情况下不需要拉群了(链路类型设置为point-to-point),这时候就可以直接跳过选群主(Two way)的环节。
3.4.EXSTART
该选的群主也已选好,该直接沟通也确定了。(这时OSPF 进入到 Exstart 状态)
这时候群里面的人要相互自我介绍(DBD),那谁来确定先从谁开始呢?这可不是群主 (DR/BDR) 的任务,要选出一个管理员(master)去管理大家自我介绍发言顺序,那这个管理员怎么选?反正都知道大家的微信号(router-id越大越优)那就比微信号吧。
如果就两个人呢?虽然不用拉群,但这时候要确定谁先发。好吧那个人PK下微信号(router-id越大越优),谁牛逼谁就是管理员(master)。
注:这个管理员(master)是可以抢占的,如果后面加入进来的微信号(router-id)更优就会抢占成为管理员。
3.5.EXCHANGE
好吧,这时候群主管理员(master)都完活了。(这时OSPF进入Exchange状态)
群里面大家需要相互了解各自,前面已经确定发言顺序,就从自我介绍(DBD)开始,按照管理员(master)安排的顺序开始发送。
3.6.LOADING
大家的自我介绍(DBD)都发送完成了。(这时OSPF进入Loading)
这时大家都有了群里面人的自我介绍,比如有些土豪自我介绍的时候说有三套房子,多本IE证书。这时候群里就有人就询问三套房子在哪、多大啊(LSR),(PS:IE证书是啥,房子才是关键),土豪知无不言言无不尽将回复内容发送给群主(DR):”上海三套房,每套150平米(LSU)”,这些信息都经过群主(DR)收集,同一样其他人回复的信息也经过群主(DR)收集,群主收集后打包一次性发送给所有人,接收到信息的人回复:”好厉害啊(LSack)”,大家通过询问、回答、回复确认这种方式相互了解各自信息,并把回答的信息(LSU)进行记录在本子上(LSDB)。
3.7.FULL
终于要修正正果….
当群里所有人都知道大家的信息之后。(这时OSPF进入FULL也就是邻接)
群里关系开始稳定,开始冷清,除非这时候又有谁又买了房啊,更新了手机号啊(LSU),这时候又开始发送询问(LSR)、回答(LSU)、回复确认(LSack)。
正常的时候没啥事大家只在群里每天(10秒)都发我还活着的信息(hello),群里还规定如果有人4天(40秒)都不发活着的信息,就把他T出(down)微信群。
比较长的周期之后担心大家遗忘了其他人的信息(LSU),群里规定在30天(30分钟防洪LSA)时间每个人都要重新发一遍自己所有信息(LSDB),然后又开始询问(LSR)、回答(LSU)、回复确定(LAack)。如果群里有人每天都发存活的信息(hello),但就是懒得更新信息(LSU),大家忍耐了60天(60分钟),这时就果断的把他从群T出(down)。