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给R1回应,我才应该是Yes
R1第二次发送DBD将自己的master置成No 并将初始化去除(因为此时R1在Two-way状态)
R2将自己的初始化状态更改(因为此时R2也在Two-way状态)
R1第三次发送DBD将M置为0
Exchange准交换:双方交换DBD
Loading::使用LSR/LSU/LSACK获取未知的LSA信息 (共享拓扑图)
R1向R2以单播方式发送LSR的请求
R2给R1 回复LSU的确认包含了LSA,路由信息或拓扑信息
R1 R2之间互相发送LSR LSU
R1 要给R2发送 LSU的确认
至此,7个状态机制完成,路由与拓扑完成交换