抓包(wireshark)详细分析OSPF状态运行机制

OSPF的5包7状态

数据包

  • Hello:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示
  • DBD:本地的数据库的目录(摘要),LSDB的目录(所有LSA的集合)
  • LSR:基于DBD包中的未知信息进行查询
  • LSU:携带了真正的LSA信息(链路状态通告),用于答复对端的LSR
  • LSack:对传递LSA信息进行确认,链路状态确认

状态机

  • Down:一旦启动后发出hello包,则立即进入下一状态
  • Init(初始化):若收到了携带了自己的RID的hello包,则和对方一起进入下一状态
  • Two-way(双向通信):邻居关系建立(DR/BDR选举),此时进行条件匹配,若成功,RID大的优先进入下一状态;若失败,则保持邻居关系,hello包10s周期保活即可
  • Exstart(预启动):使用类hello的DBD进行主从选举,RID大的优先进入下一状态
  • Exchange(准交换):使用真正的DBD包进行数据库目录交换共享
  • Loading(加载):使用LSR/LSU/LSack来获取未知的LSA信息
  • Full(转发):邻接关系建立的标志

什么是条件匹配?

1.MA网段进行DR/BDR选举,P2P网段中没有DR/BDR

2.点到点网络直接进入下一状态;MA网络将进行DR/BDR选举(40S),非DR/BDR间不得进入下一状态

可参考这篇OSPF详细工作过程

拓扑:

Down:关闭状态

init:初始化

Hello包:12.1.1.1 以 10s为周期向其他链路以组播方式发送hello包,并携带了自己的RID

 

此时,R2收到了R1的hello包,并向R1发送hello(打招呼)

Init完成,双方成为邻居关系Two-way:邻居关系建立(DR/BDR选举)

Exstart预启动

发送了四次的DBD是因为,首先R1想要先进入下一状态,但是R2告诉R1你的RID比我的小(要想进入下一状态RID要是较大方,此时R2将R1的RID与自己进行了比较),R2向R1发送DBD请求,告诉R1 我才是RID大的

 

R1第一次发送DBD将自己的master置成Yes

  • 告诉R2,我应该是Master;
  • 注意此时DD-seq是2765

R2给R1回应

  • 我的RID比你大,我才应该是Master,并且将自己的MS置位为Yes
  • 注意此时的DD-seq是465

 

R1第二次发送DBD

  • 由于R1的RID比R2小,那么R1就将自己的MS置成No
  • 这个DD是为了确认上一步中R2发来的DD的,所以DD-seq是465(与上一步中R2发来的相同)

 

R2再发送一个DD

  • 将M置位0,告诉R1我没有DD要发送了
  • 此时的DD-seq是在上一次发送DD-seq的基础上+1,因为是新发出来的DD,注意这个465发出后,一定会收到一个465用于确认的

R1第三次发送DBD

  • 将M置位为0,表示我也没有DBD要发送了
  • 注意DD-seq就是466,用于确认上一步中R2发来的DD的

总结整个过程

Exchange准交换:双方交换DBD

 

 

Loading::使用LSR/LSU/LSACK获取未知的LSA信息 (共享拓扑图)  

R1向R2以单播方式发送LSR的请求

R2给R1 回复LSU的确认包含了LSA,路由信息或拓扑信息

R1 R2之间互相发送LSR LSU

 

R1 要给R2发送 LSU的确认

 

至此,7个状态机制完成,路由与拓扑完成交换


 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值