OSPF采用Hello消息进行邻居探测与发现及会话参数协商。这是Hello消息的第一个作用。Hello消息格式如图2.3所示,消息字段描述见表2.2。
图2.3 Hello消息格式
表2.2 Hello消息字段描述
OSPF通过4次Hello消息交互实现邻居探测发现。一旦OSPF在一个接口上使能,便立刻向邻居发送Hello消息,接口进入Attempt状态。一开始OSPF并不知道任何邻居信息,因此Hello消息的活动邻居均为空。一旦RTA从RTB收到一个Hello2消息,相关参数核验通过后,将接口状态调整为Init,并从Hello2消息的OSPF头部域提取该邻居的RID。等待Hello定时器超时后发送第二次Hello消息Hello3,此时的活动邻居填写为RTB。RTB也会执行类似过程,并进行相应接口状态跳转。当RTA从RTB收到消息Hello4并在该消息的活动邻居域中发现了自己的RID,则认定自己与邻居之间具备双向连通性,从而完成了邻居探测发现,接口状态跳转到2-way。接口状态究竟是维持在2-way还是进一步跳转到Full状态,与接口网络的类型密切相关。Hello邻居发现过程如图2.4所示。
图2.4 Hello邻居发现过程
Hello邻居发现过程涉及会话参数协商问题,如果双方参数不一致会导致邻居之间不匹配,也就无法完成邻居的发现。检查内容包括OSPF消息中IP头部信息、OSPF的头部信息等,如果出现信息错误则丢弃该消息。否则,进一步检查双方的Hello时间间隔和Dead时间间隔是否一致,如果不一致也会导致无法完成邻居探测发现。在非广播多点接入/广播网络中还会验证网络掩码的一致性。除了这些参数外,选项字段也是必须检查的内容,关键的选项字段要求双方严格一致。选项字段会被持续携带在其他OSPF消息(例如DD消息和LSA头部)中,对会话的建立和链路状态数据的同步产生影响。