动态路由协议 OSPF 工作过程 之 状态机维度

状态机  

             #   什么是状态机呢 ?

                  状态机  : 就是 OSPF 路由间的邻居关系所在的不同阶段

                  不同的关系 就是 不同的状态机

OSPF 的状态机  :

                   #   我们用 思科 的PPT 来介绍 OSPF 的状态机 

                    

                      里面所有黄颜色方框里 标定的就是 状态机 

                         有 :  Down State,     Init  State        Two-Way  State  

                     #  有两台路由器 A,B 。

                         最一开始,就谁还不认识谁,互相不认识( 此时的状态就是 Down State

                       

                         A 先发了消息( 可以看到,是以组播的形式--- 224.0.0.5 ) 发了一个 Hello 包

                         包里的内容是  我是 172.16.5.1 ( RID )并且 我谁都不认识 !!

                         目的就是,当别人收到自己的 Hello 包,能和自己联系下,交个朋友 !!

                       

                          A,一发完 Hello 包后,它的状态就不一样了,就发生变化了 :

                         从 Down State变为了 Init State   

                         接着, B 给 A 回了个 Hello 包,包里是 : 我是 172.16.5.2 并且我见过 172.16.5.1

                         这几说明,B 之前认识我( A ),

                         那 A 收到了 B 的 Hello 包,A 就知道了 B 是谁了 ( 是 172.16.5.2 ) 

                         那意味着什么呢 ??

                               ===>>>

                                      意味着  A 认识了 B ,  B 也认识了 A ( 即 相互认识了 )

                         这时,互相认识了,状态就又变化了,从陌生人变为了 相互认识

                         互相认识的状态就为 Two-Way State (  双向通讯 )

                         双向通讯就 标志着 邻居关系的建立 

                        

                          :   我们当时在学习 RIP 协议时,也提过 邻居关系,是说 只要是相邻的两个路

                                    由器,并且能够正常通讯就能被称为 邻居关系 !

                                    而在 OSPF 里,所谓的邻居关系是不太一样的不是仅仅相邻正常通讯就可

                                    以的,是需要建立的,两个都需要相互收到对方的 Hello 包达到 Two-Way

                                   状态才可以被称为 邻居关系的建立!!

                                    所以,这也是前面在介绍 数据包类型的时候 说 HELLO 包的作用 : 发现和

                                    建立邻居关系!!! 

                                    整个建立 邻居关系的过程就是 使用 HELLO 包,建立方法也很简单就是 发

                                    送自己的  RID , 对方收到后,也会发送给你它自己的RID ,只要你发现

                                    对方发的 HELLO 包里有自己的 RID 这不就说明它收到过你的RID ,这不就

                                    相互认识达到 Two-Way State 状态!!

        #    那现在邻居关系已经建立了,那关系(状态机)想要更进一步的发展,肯定也是不容易的

              是需要经过筛选的,是需要经过 条件匹配的!! 

              那条件匹配肯定也就意味着  要么成功要么失败,

              若成功就进入下一个状态!

              要失败,就维持邻居关系( 依靠 HELLO 包 进行 10 S 一次的周期保活!! )

              具体的 条件匹配是怎样的条件 现在先不透漏,后面会讲!!

      

              假设,现在条件匹配成功,那就进入下一个状态 :

              

                 当条件匹配成功后便来到了 Exstart State 状态机 ( 预启动 状态

                 这个时候 A 给 B 发了 DBD 包 ,包里说 : 他(A) 要进入下一个状态,因为它的RID

                 是172.16.5.1 , 而 B 收到 A 发的 DBD 包后,再给 A 回了 DBD 包,说 : 不行,我得

                 先进入下一个状态,因为我的 RID 更大 ( B 的 RID 是 172.16.5.2 )

                 

                 这时的 预启动 状态 好像是 :

                                A  和  B  在争抢谁能先进入下一个状态 

                                A 和 B 在比谁的 RID 大,谁的 RID 大就能进入到下一个状态 !!              

                               

                               那我们就很好奇,那就不能携手一起进入下一个状态嘛?? 非得争??

                  那我们就一起先看看下一个状态是要干嘛 ?

                  ===>>>

                          Exstart State  预启动 的下一个状态是 Exchange State   

                          B 给 A 发了一个 DBD 包 ,包里说 :这是我的 LSDB 

                          LSDB  :  链路状态数据库    ( 是存放链路信息的)     

                         B 给 A 发 DBD 包,传输了 B 自己的 链路信息摘要 !!  

                        而后, A 给 B 发了 DBD 包 传输的也是 A 自己的 链路信息摘要 !!   

                 那现在,我们了解了 Exchange State准交换 这个状态是干嘛的,那现在就能解释

                上面的问题了

                问题 :  为什么 在上一个状态 ( Exstart State )   A   和 B 是争着 进入下一个状态

                                     为什么 A 和 B 不能一起进入下一个状态,而是错开进入的 ??

                        ====>>>

                                      其实,也很简单,它们错开进入下一个状态,也是为了避免同一时间里,

                                      数据占用资源量过大  ----   这也是 为了减少更新量过大的措施 !!

                                      因为, OSPF 里最大的问题不也就是 占用资源量过大嘛~!!

                                      和我们 前面讲的 同步周期 还是异步周期 是一个道理,为什么选择异步周

                                       期呢? 就是为了 避免同一时间 占用资源量过大从而导致 网络瘫痪嘛!!

                   也就是说  Exstart State  预启动 )这个状态就是做一件事儿,就是看谁先进入下一

                   个状态; 方法也很直接就是看 谁的 RID 更大!!!  

                    我们就把  Exstart State  预启动 )这个状态干的活叫做 --- 主从关系选举

                   通过 RID 来判断,谁大谁为主,谁就能先进入 下一个状态 --- Exchange State

                   

                   那此时就有一个小问题了 :

                   那既然我们 Exstart  State 就只是为了通过 RID 来看 谁能够进入下一个状态,而上面

                   展示的时候是使用的 DBD 包来进行的主从关系选举 ( 本质上就是 RID 比大小),

                   那既然只是为了 RID 比大小,那 HELLO 包 不也可以嘛,HELLO 包也可以携带 RID

                   那为啥要用 DBD 包, 而不用 HELLO 包呢 ??

                   ===>>>

                                    其实,只是为了 和 邻居关系进行一个区分, 没错,你 HELLO 包是可以携

                                    带 RID , 也能起到  Exstart  State 状态的作用,但是,此时我们的关系已经

                                    更进一步了,我们已经不是 邻居关系了,形象的讲,关系更近一步了,我

                                    们就不用 HELLO 包了,HELLO 包显得关系没有那么亲切!!

                                    我们用 DBD 包就可以和上一阶段的关系进行区分~!!!

                      Exchange State准交换)状态,

                                发送了携带数据的 DBD 包,携带的是链路状态信息摘要

                                

                    

                      刚才   Exchange State 准交换状态 )  发送了 DBD 包后,收到的那一方则 给回

                      个  LSACK 包,来以示确认 ~!!

                       然后,就进入到了  Loading State ( 加载状态 ) , 此状态,  A 向 B 发了 LSR

                       包,包里说 : 我需要 172.16.6.0 / 24 这个网段的信息 !!

                        B 收到 A 发的 LSR 包后( 知道这是 A 的请求),B 就知道了,这是 A 向自己要

                        6.0 网段的信息;  那么, B 就会给  A 回一个 LSU包,包里即是 6.0 网段 的信息

                        A 收到 B 发的 LSU 包后,就会给 B 再回个 LSACK包 来确认 ~!!  

                        也就是说 :  Loading State加载状态 主要就是进行  具体的链路信息 交换 

                        当 具体的链路信息 交换完成后,就来到了  Full State Full 状态 )

                       

                        Full 状态 就标志着 邻接关系 的建立  !!

                        邻接关系 ( 真正意义上的能够 进行 数据传输的关系 )

                        

                     #    那什么叫邻接关系?  为什么不继续接着 邻居关系 称呼呢 ?

                            ===>>>

                                       最主要就是恰恰为了 邻居关系 进行区分!!

                                       

                                       之前的 邻居关系 只能通过 HELLO 包进行保活 ,邻居之间是不能进行 具

                                       体数据的交换的,而  只有邻接关系之间才能进行 LSA 的数据交换 !!

                        

                      #   介绍 OSPF 的状态机,一共有 7 个状态机 : 

                                  down 状态,      Init 状态,   Two-Way  状态 ,  exstart 状态,

                                  exchange 状态          loading 状态          Full 状态

                             

                               总结下这 7 个状态机

                                down : 当启动 OSPF ,便开始发送  HELLO 包,发送后即进入下一个状

                                               态,进入 Init 初始化 状态 

                                Init    :     收到的  HELLO 包中 只要包含了 本地的 RID 信息,则进入下一个

                                                状态,进入 Two-way ( 双向通信 ) 状态 !

                                              ( 就是 A 收到了 B 的 HELLO 包, 包里面有 A 的名字 - 即 RID

                         Two - way :    标志着邻居关系的建立; 就是我们互相认识了!

                                                 要想进入下一个状态则需要进行   条件匹配 

                                                 

                                                 若匹配失败,就仅需要 使用 HELLO 进行 10 S 一次周期保活邻居

                                                 关系。

                                                 匹配成功则进入下一个状态 ,进入 Exstart  预启动 状态

                          Exstart  :     使用未携带数据的 DBD 包进行 主从关系选举

                                               RID 大的为主,则优先进入下一个状态  Exchange ( 准交换 ) 状态 

                         

                          Exchange :    使用携带具体数据的 DBD 包进行 目录信息共享,需要ACK确认

                                                  ACK 确认后,进入 Loading 加载状态 

                              Loading  :    通过对比 DBD 包 和 本地数据库中的信息,基于本地未知的LSA

                                                   信息( 就是 本地没有的 信息 ) 发送 LSR 请求,对端收到后,使

                                                   用  LSU 包回复 ( 回复的就是 你本地没有的 那些信息 ),

                                                   收到LSU 包后,回个 ACK 来确认! 

                                                   ACK 确认后,进入 FULL 状态 

                                      Full  :   标志邻接关系的建立  

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值