摘要:该文通过对简单网络管理协议的MIB库中的各种表进行分析,描述了一种基于SNMP的网络拓扑发现方法,该方法能自动准确的发现指定深度内的所有网络设备的连接情况。该方法不向网络中发送过多的探测数据包,对网络的流量不产生太大影响。
关键词:MIB;网络拓扑发现;SNMP
中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)15-3543-02
当今,随着计算机网络技术的不断成熟和发展,它已经深入到社会的各个领域。人们在日常工作、日常生活中已经非常依赖于计算机网络,以至于网络的崩溃会造成不可挽回的损失。因此维护计算机网络的稳定就成为了目前这个领域中的重中之重。要维护网络的稳定就必然要进行计算机网络的管理,那么,首当其冲就是要获得网络的基本信息。这些基本信息包括了各个设备的连接状况,要知道网络中各设备的连接状况就必须要先进行网络拓扑结构的搜索。对于目前规模越来越大的计算机网络,靠人工进行拓扑搜索已经不可能了,因此需要计算机自动的进行拓扑搜索也就是拓扑发现。网络拓扑发现的目的就是发现网络实体,并获取实体间的连接关系。网络拓扑发现是网络故障定位,网络管理,通信瓶颈和网络性能分析的前提与基础。
拓扑发现首先要得到整个网络中的各个设备的路由信息,然后利用这些信息来自动生成网络拓扑图,在此过程中要充分利用各种路由的搜索算法和有关协议。网络拓扑发现算法主要包括发现路由器与路由器、路由器与子网之间的连接关系以及局域网内部交换机与交换机、交换机与主机之间的连接关系。其中自动发现路由器与路由器、路由器与子网之间的连接关系比较简单,由于现在绝大多数设备都支持SNMP协议,因此相关信息就可以从每个路由器的MIB库的ipRouterTable中获取。
1 简单网络管理协议(SNMP)简介
简单网络管理协议(SNMP)是为基于TCP/IP的多厂商异构互联网的管理而设计。它作为工业标准,已被广泛接受,其应用已扩展到其它协议组。目前几乎所有的网络产品,包括交换机、路由器、UPS、MODEM等硬件以及许多软件均支持SNMP。SNMP的基础是MIB数据库,MIB数据库包含了所有被管对象的信息,MIB是这些对象的有结构的集合。网络中每个系统(工作站、服务器、路由器、网桥等)都拥有一个反映系统中被管对象状态的MIB。网络管理实体可以通过提取MIB中的对象值监测系统中的资源,也可以通过修改这些对象值来控制资源。MIB变量记录了每个相连网络的状态、通信量统计数据、发生差错的次数以及内部数据结构的当前内容等。与ARP欺骗相关的信息就可以通过这些MIB变量获取,并且通过MIB库定义的其它MIB变量可以设置网络设备的运行参数,从而将实施ARP欺骗的终端隔离开来,阻止ARP欺骗对网络正常通信的破坏。
SNMP的管理信息库采用树型结构,它的根在最上面,根没有名字。每个MIB对象都用对象标识符(OID)来唯一的标识,其中每个可用信息是一个带标号的节点,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径,它命名节点并指示它在树中的准确位置。图1是管理信息库的一部分,它又称为对象命名树(objectnamingtree)。
如图1所示,在只讨论Internet中的对象时,只给出Internet以下的子树(图中的波浪线方框),并在Internet结点旁边标注上{1.3.6.1}即可。在Internet结点下面的第二个结点是mgmt,标号为2。再下面是管理信息库,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。
2 网络拓扑发现算法描述
众所周知,路由器的一个端口既可以和子网相连也可以与其他路由器相连,但是一个子网与另一个子网通信必须要通过路由器,因此子网要连接到路由设备的某个端口上。而子网间的相互通信是通过各自的网关完成的,所以网关与路由器端口是一一对应的。
对于指定深度的网络,基于SNMP的拓扑发现算法是使用一个路由器作为种子路由器,其在此网络中所有可以到达的网段,以及到达该网段所经由的下一跳路由器的端口IP地址和相关路由信息均被其路由表记录。获取这些记录并且继续向下搜索,直到指定深度为止。在此过程中还能获取到它所经过的每个路由设备上端口的直连子网及子网掩码,据此而得到这些子网中所有的活动主机以及它们的系统和IP地址等信息。因此,只要有任意一个路由设备端口的IP地址已知,就能将其作为种子路由获取到指定深度内的所有活动主机和路由设备的拓扑结构。
设计拓扑发现算法时,需要用到待检路由设备网关、拓扑信息、子网信息。这些信息都存放在相应链表中。待检设备网关链表中存放待检路由设备网关信息,对这些信息进行处理后就能得到该设备的网关信息及对应的子网信息,并将网关信息放入拓扑信息链表,子网信息放入子网信息链表中。算法会在指定深度停止搜索,在得到的拓扑信息链表中就能获得在此深度内所有路由设备间的连接关系,然后在子网信息链表中又能得到各路由设备的子网及其所有主机的信息。
需要从路由设备返回的应答数据包解析出的每条记录中的路由相关信息如下所示:
ipRouteDest:路由的目的地址。如为0.0.0.0。说明该路由为缺省路由。
ipRouteNextHop:路由的下一跳路由器地址。
ipRouteMask:路由目的地的子网掩码。
ipRoutelflndex:网关的接口号。
ifDescr:接口的描述,指定了vlan号。
ipRouteType:路由的类型,为整型类型。其意义如表1所示。
主要算法如下:
1) 初始化相应各链表。
2) 向种子路由设备发送PDU征询数据包,然后通过返回的应答数据包解析相关信息。在此过程中主要用到ipRouteType这个量。如果当前ipRouteType的值为3,表示目标所在地址直接与该路由器相连,即发现一个子网。此时将ipRouteNextHop值放入拓扑信息链表, ipRouteNextHop、ipRouteDest、ipRouteMask、ipRoutelflndex、ifDescr 值放入子网信息链表;若当前的ipRouteType值为4,表明目标地址所在的子网不是直接与该路由器相连,必须至少再经过一个路由器。因此将ipRouteNextHop和ipAdEntAddr值放入拓扑信息链表;若ipRouteNextHop在待检设备网关链表中无节点的IP地址与之相同,则将其放入待检设备网关链表,并将该节点的跳数值赋为2,表示该路由设备距本地网关所在设备有一跳距离。
3) 若当前节点的深度不超过指定深度,并且待检设备网关链表不为空,那么还需继续进行如下处理:取出当前的ipRouteNextHop,封入PDU征询数据包发给其他路由设备,然后重复第二步操作。最后若子网信息链表中还是无节点的IP地址与此ipRouteNextHop相同,则将ipRouteNextHop 放入待检设备网关链表,将该节点的跳数加一。
4) 从待检设备网关链表中删除当前已被处理过的节点并判断是否继续处理。
当到达指定深度后算法会自动停止,此时检索拓扑信息链表,就能得到此深度内所有路由设备的拓扑结构。
3 结论
本文讨论了一种利用snmp协议来自动发现网络拓扑结构的方法,介绍了该算法的主要流程,同时还分析了此过程中需要实现的一些关键技术。由于在此过程中不需要发送大量探测数据包,所以不会对网络造成过重的负担。由该方法所构造的网络拓扑能够较真实地反映网络拓扑情况,为流量测量中测试站点的布置、采样处理和结果分析提供了良好的依据,收到了理想的效
参考文献:
[1] David Zeltserman.SNMPv3与网络管理[M].潇湘