zl程序教程

您现在的位置是:首页 >  其他

当前栏目

OSPF协议包类型和状态

状态协议 类型 ospf
2023-09-14 09:06:46 时间

首先是OSPF协议发包的目的地址是两个多播地址,224.0.0.5和224.0.0.6,224.0.0.5是所有的OSPF路由器都能够收到,这就意味着DR路由器使用这个地址对所有的路由器进行路由的通告。

而224.0.0.6是只有DR路由器才能够收到,这就意味着DRother通过这个地址于DR路由器进行交换路由信息的。

OSPF总共有五个大类的数据包:

1、hello:这是路由器之间互相发现,建立关系以及保活的数据包。

2、DD:数据库描述包,这个数据包就像是一份路由条目的清单列表,里面包含着LSA的头部信息,当其他路由器发现有自己缺少的路由条目,就会发送LSR。

3、LSR:用于向OSPF邻居请求LSA,来补充自己的路由条目的空缺。

4、LSU:LSU承载着LSA,而LSA正是包含着路由信息的数据媒介

5、LSAck:当收到对端的LSU,需要回送一个LSAck表示确认,否则路由器会启用重传机制,默认是4秒。关于OSPF相关的timer,可以在发送OSPF相关协议包的接口上进行设置。

OSPF的所有报文都有统一的报文头部,如下图所示:

里面包含着许多通常的信息。其中类型字段总共有五种,代表着上述描述的五类协议包。

然后还需要注意的地方就是验证类型,验证类型表明了这个路由器是否对它的OSPF的进程设置了相关的验证信息,只有验证信息相互符合才能互相接收到对方的路由信息。

1、hello报文

 

hello包除了携带OSPF的包头,也就是一些通常的信息之外,还包含着DR和BRD,自身的hello timer,以及路由优先级,等等信息。

hello包作为发现邻居关系,建立full状态的第一步,它会判断双方的路由器的一些参数是否是相同的,比如hello包的发送间隔,路由器失效的时间,区域ID,版本类型,双方接口的子网掩码总的来说就是参与OSPF的路由器都要有一致的活动规律和身份,确保大家都是属于同一种方式去维护整个网络。

我们还需注意的在发送hello包的时候,设计两个状态的变化,第一个状态是init状态,当路由器互相发现对端的hello包的时候,它们的状态转变为init,需要注意的是,这个时候它们发送的hello包中的邻居字段是全0,也就是没有发现任何的邻居,当接收到对方的hello包后会将route-id填入字段,当对方收到包含自己的route-id的hello包后会知道对端已经发现自己了,于是就建立起two-way状态。

DD报文

 

 

DD报文用于描述数据库的整体概况,以及用于DR于BDR和DRother的选举,一般的DD数据包会携带LSA头部用于描述大致的路由信息,但是当DD数据包用于选举的时候,是不会承载任何的LSA信息。

当他们的选举角色都确立之后,双方就使用DD报文描述各自的LSDB,在这种DD报文中包含着LSDB的LSA的头部。路由器可以使用多个DD报文描述LSDB,同时注意DD数据包的结构,它有一个序号的字段,当主的路由向其他路由送DD报文描述LSDB的时,接收到这个DD报文的路由器,当它要发送自己的DD报文的时候,需要使用之前接收的DD报文的序号,也就是说DR作为DD的发送主导者,其他路由器使用的都是DR发送的DD报文的序号。当DR和DRother互相发送DD报文一段时间之后,就结束了DD报文的互相发送。

在DD包中的可选项表达了它是如何进行DR的选举以及LSDB的描述结束。

同样在DD报文发送的过程中也会涉及状态的改变,当开始发送DD报文去描述自身的LSDB的时候,路由器的状态就转变为exstart,当DD传送结束后就变为loading阶段。

LSR报文

 

该报文表达了请求的LSA的类型,比如它的LSA的类型,链路状态ID,链路状态ID是LSA的信息的标识,而通告路由器是通告该LSA的路由器。

LSU报文

 

当DR在接收到所有路由器的LSA后,就会将完整的LSDB的信息以LSU的信息会议其他路由器的LSR的请求。

LsAck报文

 

LSA包含着对LSA的确认,同时一个LSAck内部可能包含着多个LSA确认。

重要的知识点,ABR只能将自己的区域内部的路由通告给area0,而不能通告自己到达其他区域的路由。