OSPF工作过程

要说明OSPF的工作过程,就要从5种包和7种状态开始说起

5种数据包

Hello包:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示

DBD包:data basic describe 数据库描述包、本地数据库的目录(LSDB的目录(所有LSA集合))

LSR包:Link status Request 链路状态查询(请求)包 目的是基于DBD包中的未知信息进行查询

LSU包:Link status Update 链路状态更新包 携带了真正的LSA信息(链路状态通告),路由信息或拓扑信息 ,单播回复LSR,用于确认LSR请求

LSACK包:Link status Acknowledge 链路状态确认包,对传递LSA信息进行确认,保障可靠性

OSPF数据包跨层封装于3层报头

7种状态机

Down : 未启动协议,一旦启动OSPF协议后,进行hello的收发,进入下一状态

Init(初始化):,若收到了携带了自己的RID的hello包,则和对方一起进入下一状态

two-way(双向通信):邻居关系建立的标志;此时进行条件匹配,若成功,RID大的优先进入下一状态;若失败,则保持邻居关系,hello包10s周期保活即可

条件匹配:点到点网络直接进入下一状态;MA网络将进行DR/BDR选举
选举DR:
1.比较接口的优先级(0-255),越大越优
2. 比较router-id ,越大越优。
注意:
DR是接口概念
DR不能抢占
若优先级为0,视为放弃选举

Exstart(预启动):使用类似hello 的DBD进行主从关系选举,route-id数值大为主;优先进入下一状态;若MTU不一样的话,就停留在这个状态,MTU在OSI中是2层或3层 2层的大于3层

类Hello的DBD包:这里的DBD包中并没有真正的数据库信息,只是为了选出一个在下一个状态优先共享自己LSDB的主路由器

主从选举的目的: 在下一状态时,被选举为主路由器的优先将自己的LSDB发送出去

如下图,Exstart时,RID大者在下一状态优先将自己的LSDB共享出去

Exchange(准交换):使用真正的DBD包进行数据库目录的共享,共享的是LSDB;(交换完成后需要用LSAck包进行确认)

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

Full(转发):邻接(毗邻)关系建立的标志

另外,由于OSPF网络类型的不同则还有一种特殊的状态
Attempt(尝试) :在NBMA等网络类型中,路由器之间不能自动建立邻居关系,必须使用单播邻居建立,若邻居指定发生错误,则进入该状态.

将以上的5包7状态串联起来就组成了OSPF的工作过程,整个过程是围绕三个表来运作的,下面就根据三个表来详细说明OSPF的工作过程

  1. 邻居表
  2. 数据库表
  3. 路由表

启动完协议后(down后),本地使用组播地址224.0.0.5收发OSPF的hello包,若收到的hello包中携带了本地的RID之后,邻居关系建立,生成邻居表

此时进行条件匹配,匹配失败将维持邻居关系,仅hello包10s周期保活即可;匹配成功者间可以建立邻接关系,邻居间使用DBD进行数据库目录的比对;之后使用LSR查询目录中未知的LSA信息,对端使用LSU来携带传递LSA,最终需要LSack进行接收确认;当本地收集到区域内所有设备的LSA后,生成LSDB—链路状态数据库表

本地基于LSDB启用SPF算法,计算到达所有未知网段的最短路径,然后将其加载到路由表内;

两种关系的建立标志
邻居关系:two-way双向通信
邻接关系:Full状态