OSPF邻居能建立,路由互相学习失败

发布时间:  2014-03-05 浏览次数:  438 下载次数:  0
问题描述
某客户业务迁移割接中,我司设备与与对端友商H设备可正常互联对接,OSPF邻居建立正常,但致互相学习不到业务路由。
告警信息
无。
处理过程
在我司设备上删除互联VLANIF的P2P网络类型配置,使互联双方OSPF网络类型一致,路由互相发布学习正常。 
根因
1. 在两端对接设备,检查OSPF邻居状态(display ospf peer),State: Full。

2. 在两端对接设备,查看全局路由表、OSPF路由表(display ip routing-table、display ospf routing),无对端业务路由。

3. 我司设备上互联VLANIF OSPF网络类型设置为P2P,友商H设备上互联VLANIF OSPF网络类型仍为默认值Broadcast。

4. 互联VLANIF OSPF网络类型不一致,但可建立邻居分析:
Hello报文重要字段解释:
Network Mask:发送Hello报文的接口的网络掩码。
HelloInterval:发送Hello报文的间隔。单位为秒。
Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能不在本课程的讨论范围之列。
Rtr Pri:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
RouterDeadInterval:宣告邻居路由器不再继续在该网段上运行OSPF的间隔,单位为秒,通常为四倍HelloInterval。
Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
Neighbor:邻居的Router ID列表。表示本路由器已经从该邻居收到合法Hello报文。

验证一个接收到的Hello报文是否合法包括:
如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
所接收的Hello报文中HelloInterval字段必须和接收端口的配置一致;
所接收的Hello报文中RouterDeadInterval字段必须和接收端口的配置一致;
所接收的Hello报文中Options字段中E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致;
如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。

可见,Hello报文没有网络类型的字段,因此不需检查网络类型是否匹配,只要双方都能收到对方Hello报文,关键字段匹配,就可建邻居。P2P、Broadcast网络类型都会发送组播Hello报文,所以互联VLANIF OSPF网络类型不一致,但可建立邻居关系。

5. 互联VLANIF OSPF网络类型不一致,双方OSPF邻居可建立但路由无法学习分析:
OSPF要根据链路状态信息LSA报文,计算最短生成树,收敛生成LSDB数据库,学习路由信息。
P2P网络中,只有1类Router-LSA,即可实现区域内收敛;Broadcast网络中,需要1类Router-LSA和2类Network-LSA,才能描述本区域网络拓扑结构;而且两种OSPF网络类型的1类Router-LSA报文结构也不相同。
所以,虽然两种网络类型可以建邻居,但因LSA结构不同,LSDB数据库无法收敛,从而不能互相发布学习路由。
建议与总结
在配置OSPF时一定要注意相关细节:
1.  接口网络类型,要与对端设备一致;
2.  接口网络类型,要与本端指定运行OSPF协议接口的反掩码对应。
           P2P: network 本端地址 0.0.0.0
Broadcast: network 网段地址 网段反掩码

END