在理解OSPF各种报文之前,需先清楚OSPF协议,通过下面图例帮助理解(口诀:5种报文、3个阶段、3张表)
(Notice:OSPF报文头部24字节)
1、3个阶段
邻居发现阶段:
    直连路由器形成邻居关系,在broadcast和NBMA中还要选举DR/BDR
路由发现阶段:
      同一个区域内所有路由器LSDB同步
路由选择阶段:
    LSDB同步后,进行路由计算,最佳路由信息进路由表。
2、3张表
邻居表(neighbor table):
      OSPF用邻居机制来发现和维持路由的存在,邻居表存储了双向通信的OSPF路由器列表。
拓扑表  LSDB:
      OSPF用LSA(link state Advertisement 链路状态通告)来描述网络拓扑信息, LSA存储在LSDB中。
全局路由表
      路由器的全局路由表,用于数据包转发;OSPF把计算出来的路由,安装到全局路由表。
3、5种报文(Notice:每种报文都包括24字节的OSPF报文头部)
(1)Hello:建立和维护OSPF邻居关系。
OSPF报文头部分解介绍:
Version(8bit):OSPF报文的版本,最新版本是版本2
Message Type(8bit):报文的类型;1是Hello,2是DBD,3是LSR,4是LSU,5是LSAck
Packet Length(16bit):整个OSPF报文的长度(24字节头部+各类报文的长度)
Source OSPF Router(32bit):路由器的RID
Area ID(32bit):区域ID
Packet Checksum(16bit):整个报文的校验
Auth Type(16bit):认证类型;0表示没有认证,1表示简单的口令认证,2表示MD5认证
Auth Data(64bit):认证字段
Hello报文分解介绍:
Network Mask(32bit):网络掩码;如果这个掩码与接收该报文接口的掩码不一致,那么该报文将被丢弃,无法建立邻居关系
Hello Interval(16bit):发送Hello报文的间隔时间, 默认为10s,广播或NMBA默认为30s,如果与接收该报文接口的Hello Interval时间不一致,同样无法建立邻居关系
Options(8bit):可选项;DC位表示是否具有支持按需电路上的OSPF能力,1支持,0不支持;NP位表示对NSSA的支持,1为NSSA区域,0为普通区域;MC位表示对IP组播的支持,E位表示对外部路由的支持能力,1支持,0不支持(Stub区域为0)
Router Priority(8bit):路由器优先级;用作DR与BDR的选举, 默认为1,当为0时,说明不具备选举能力
Router Dead Interval(32bit):宣告邻居无效之前需要等待的时间,通常为4倍的Hello Interval, 默认为40s,广播或NMBA默认为120s,如果双方不一致,无法建立邻居关系
Designated Router(32bit):网络中指定路由器的接口的IP地址( Notice:并不是指定路由器的RID,而且并不一定是最后选举出来的DR,如果不存在,则被置为0.0.0.0
Backup Designated Router(32bit):网络中备用指定路由器的接口的IP地址,( Notice:并不是备用指定路由器的RID,而且并不一定是最后选举出来的BDR,如果不存在,则被置为0.0.0.0
Active Neighbor:有效的邻居列表
(2)DBD:链路状态数据库描述信息(描述LSDB中LSA头部列表),OSPF邻居第一次建立时才交换DBD,LSR。
(Notice:选举Master/Slave的报文不包含LSA头部)
DBD报文分解介绍:
MTU(16bit):在不分段的情况下,始发接口可接收的最大IP包大小。当报文在虚链路上传递时,这个字段是0x0000
Options(8bit):可选项。在Hello报文中已做过介绍
DB Description(8bit):前5位总是被置0,I位为1时,表示是第一个报文,为0时,表示不是第一个报文;M位为1时,表示不是最后一个报文,为0时表示是最后一个报文;MS 为1时,表示为主路由器,为0时表示为从路由器。 口诀:初始情况下,器由器发送的是I、M、MS都为1的报文,表示这是第一个报文,不是最后一报文 ,且认为自己是主路由器。
DD Sequence(32bit):DD报文序列号,由主路由器进行确定,后续报文依次增加。
(LSA头部在以后文章中介绍)
(3)LSR:链路状态请求。向OSPF邻居请求特定的LSA。
(Notice:Link-State Advertisement Type、Link-State ID、Advertising Router三个参数唯一确定的是一个LSA,而不是唯一确定一条路由。request报文请求的是LSA,并不是某条特定的路由,比如LSA-1,我们会发现,对于在路由器上network通告的路由,对端路由器只会发送一个request请求报文,来请求对端network所有通告的路由。)
Link-State Advertisement Type(32bit):链路状态类型号,主要有LSA-1(路由链路通告),LSA-2(网络链路通告),LSA-3(ABR汇总链路通告),LSA-4(ASBR汇总链路通告),LSA-5(自治系统扩展路由通告),LSA-7(非完全端区NSSA扩展)
Link-State ID(32bit):链路状态ID,每种类型的LSA定义各不相同
Advertising Router(32bit):始发LSA通行路由器的RID
 
(4)LSU:链路状态更新(包含一条或多条LSA)。
Number Of LSAs:LSA的数量,一个更新报文可以携带多个LSA
(Notice:下面就是具体的LSA,将在以后的文章中介绍)
(5)LSAck:对LSU中的LSA进行确认。