OSPF协议的邻居关系是通过交换Hello报文建立的,所以我们先对OSPF的报文的种类,及Hello报文的结构做一了解。

1 OSPF协议有5种协议报文(很重要,后面会依次介绍)

Hello报文:用于发现和维护邻居关系,在广播型网络和NBMA网络上Hello报文也用来选举DR和BDR。

DD报文:通过携带LSA(链路状态通告)头部信息来描述链路状态摘要信息。

LS Request报文:用于发送下载LSA的请求信息,这些被请求的LSA是通过接收DD报文发现的,但是本路由器上没有的。

LS Update报文:通过发送详细的LSA来同步链路状态数据库。

LS Ack报文:通过泛洪确认信息确保路由信息的交换过程是可靠的。

除了Hello报文以外,其他所有报文只在建立了邻接关系的路由器之间发送。(这点一定要记清楚,对理解邻接关系的建立过程很重要)

 

2 OSPF报文头部

 OSPF协议各种类型报文有相同的头部信息

  

Version #: OSPF协议号,应当被设置成2。

Type: OSPF报文类型,OSPF共有五种报文。

Packet length: OSPF报文总长度,包括报文头部。单位是字节。

Router ID: 生成此报文的路由器的Router ID。

Area ID: 此报文需要被通告到的区域。

AuType: 验证此报文所应当使用的验证方法。

Authentication: 验证此报文时所需要的密码等信息。 

 

3 Hello报文

  邻居和邻接关系是通过交换Hello报文来建立的,所以通过了解Hello报文的头部内容,可以帮助我们理解邻居和邻接关系的建立。

Network Mask:发送Hello报文的接口的网络掩码。

HelloInterval:发送Hello报文的时间间隔。单位为秒。默认10m,在NBMA和点对多点下,为40s

Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能不在本课程的讨论范围之列。

Rtr Pri:发送Hello报文的接口的Router Priority,用于选举DR和BDR。在广播和NBMA网络中DR和BDR是通过优先级确定的,router ID越大优先级越高。

RouterDeadInterval:宣告邻居路由器不继续在该网段上运行OSPF的时间间隔,单位为秒,通常为四倍HelloInterval。

Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。

Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器。

Active Neighbor:邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文。

收到的hello包中包含自已的router-id时,认为邻居关系已经建立。

4 形成邻居关系的过程和相关状态的变换过程。

注意2-way 和 ExStart这两个状态


Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和RouterDeadInterval间隔相同。

Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中。

1-WayReceived:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。           

2-WayReceived:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。

2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。