OSPF状态迁移过程中涵盖了OSPF的5种消息类型。OSPF消息类型见表2.1。
表2.1 OSPF消息类型
OSPF作为域内协议负责拓扑发现和路由建立,需具备自动的网络拓扑探测和邻居发现机制。一般情况下,OSPF采用多播消息进行邻居探测发现,多播地址为224.0.0.5和224.0.0.6。存在一些特殊的网络媒介(例如NBMA网络)不支持多播,这种情况下,就需要手动指定邻居,通过单播实现邻居发现。
OSPF消息直接封装在IP包中,不经过传输层,协议号为89,TTL值为1,即不能跨路由器传送,传输的差错控制由OSPF自己完成。IP采用尽力而为的服务,使得OSPF报文和路由器转发的数据报文在同一个通道内进行传送,但是前者决定了后者的转发路径。如果OSPF报文和路由器转发报文在同一个队列排队,路由器接口队列拥塞时,会导致OSPF报文丢弃,可能影响邻居之间的OSPF会话,进一步影响数据报文的转发。因此,OSPF消息装载于IP报文时,将IP头部信息中的服务类别CoS字段设置为110(二进制)——网络控制级数据包,目的是将OSPF报文和普通数据报文区分开。如果厂商路由器支持优先级队列,则会自动把OSPF报文放置到高优先级队列处理,确保了协议报文的优先处理。
所有OSPF消息采用相同的头部格式,固定24字节,如图2.2所示。
图2.2 OSPF消息公共头部格式
OSPF版本号为2。类型定义参见表2.1。消息长度指包含OSPF消息头部信息在内的整个OSPF消息的长度,以字节计。路由器ID为产生该消息的路由器标识。区域ID为接口所属的OSPF区域号。校验和计算确保消息传输过程中没有损坏或篡改。实例ID由RFC6549拓展定义,用于支持同一个接口运行多个OSPF实例。