关于网络拓扑自发现,这项技术已经是个很老的课题,早在08年就有前辈提出了相关算法,我这篇文章就是根据前辈们踩的坑,总结凝炼了利用snmp协议完成网路拓扑自发现的方法,因为snmp都是遵循rfc1213标准建立相应的mib库信息,而使用命令cli的方式采集路由表,Mac,端口转发表的方式会遇到异构产品底层命令适配的问题。关于数据的范式化和数据处理,数据展现都将是挑战。好了,废话不多说,那就简单分析一下拓扑发现的过程。
本功能模块主要是实现网络环境下网络拓扑的自适应和自发现
主要分为三部分:
网络层拓扑发现
链路层拓扑发现
主机层拓扑发现
<强>网络拓扑发现强>
网络拓扑发现的主要目的是获取和维护网络节点的存在信息和它们之间的连接关系信息,并在此基础上绘制出整个网络拓扑图。网络管理人员在拓扑图的基础上对故障节点进行快速定位。
<强>二层网络拓扑强>
二层网络拓扑即OSI参考模型中第二层的网络拓扑,称为链路层网络拓扑。网络拓扑发现是网络管理的基本工作,从底层看是交换机之间的连接关系。只有物理拓扑才能准确地定位网络中的故障,精确地测定某个位置的性能和状态。
<强>三层网络拓扑强>
三层网络拓扑是OSI参考模型中的第三层,它描述的是路由器,子网之间的连接关系。
OID
对象标识(对象identifier-OID)为每一个对象分配一个唯一的表示号。
SNMP
SNMP是用于在IP网络管理网络节点的一种标准协议.SNMP使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过SNMP接收随机消息,网络管理系统获知网络出现问题。
<强>
基于二/三层网络拓扑发现方法(网络层和链路层拓扑发现)强>
第一步:生成3层网络层网络拓扑
本算法采集设备信息,可以通过SNMP采集或者登录设备采集,优先选择SNMP采集(表
列出了用SNMP采集所需信息的OID点)。当设备不支持SNMP采集时,登录设备采集。
路由表中的每个条目都包含ipRouteDest, ipRouteIfIndex, ipRouteNextHop, ipRouteType和ipRouteMask这几项,其中,ipRouteDest表示路由的目的地址,ipRouteMask表示路由目标地址的子网掩码,将ipRouteDest和ipRouteMask按位与可以得到路由目标地址所在的子网;ipRoutelflndex表示路由本地接口的索引值,三层设备将目的地址为ipRouteDest的IP包通过该接口转发;ipRouteType表示了路由的类型,当路由类型值为3(直接)时,说明三层设备直接连接到路由目的地址所在子网,当路由类型值为4(间接)时,说明三层设备不直接连接到路由目的地址所在子网,必须再经过其它三层设备,即为路由表中的ipRouteNextHop,此时三层设备通过本地接口ipRoutelflndex与下一跳三层设备直接连接。
3750以思科(10.95.32.10)核心交换机为例:
ipRouteDest OID
1.3.6.1.2.1.4.22 ARP表
1.3.6.1.2.1.4.20 IP地址表
1.3.6.1.2.1.4.24 IP路由表
路由表中的每个条目都包含ipRouteDest, ipRouteIfIndex, ipRouteNextHop, ipRouteType和ipRouteMask这几项,其中,ipRouteDest表示路由的目的地址,ipRouteMask表示路由目标地址的子网掩码,将ipRouteDest和ipRouteMask按位与可以得到路由目标地址所在的子网;ipRoutelflndex表示路由本地接口的索引值,三层设备将目的地址为ipRouteDest的IP包通过该接口转发;ipRouteType表示了路由的类型,当路由类型值为3(直接)时,说明三层设备直接连接到路由目的地址所在子网,当路由类型值为4(间接)时,说明三层设备不直接连接到路由目的地址所在子网,必须再经过其它三层设备,即为路由表中的ipRouteNextHop,此时三层设备通过本地接口ipRoutelflndex与下一跳三层设备直接连接。