
问题描述
某客户业务迁移割接中,我司设备与与对端友商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