您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 绩效管理 > 基于SNMP的网络拓扑发现
基于SNMP的网络拓扑发现一、SNMP简介SNMP(SimpleNetworkManagementProtocol,简单网络管理协议)是一种基于TCP/IP协议的互连网管理协议。SNMP诞生于1988年,当时只想把它作为一个短期的网络管理框架,临时用于管理连接到Internet上的设备。但随着SNMP的发展和大量应用,其使用范围已大为扩展,超出了Internet的范围。SNMP逐渐作为一种标准的协议在网络管理领域得到了普遍的接受和支持,成为了事实上的国际标准。SNMP采用“管理进程/代理进程”模型来监视和控制各种可管理网络设备。其核心思想是在每个网络节点上设置一个管理信息库MIB(ManageInformationBase),由节点上的代理负责维护,管理进程通过应用层协议对这些信息库进行访问。图3.1说明了SNMP网络管理框架的一般体系结构,它由四个主要部件构成,分别是:通信网络、网络协议、网络管理进程和被管网络实体。SNMPManagerSNMPAgentUDPIP底层协议UDPIP底层协议SNMP网络管理应用网络物理资源SNMP管理对象通信网络AABBCCDDEESNMP应用SNMP消息A:GetB:Get-NextC:SetD:Get-ResponseE:Event网络管理进程被管网络实体图3.1简单网络管理协议(SNMP)体系结构二、基于SNMP协议的网络层拓扑发现SNMP已经成为网络管理的标准,为网络拓扑自动发现带来了巨大的方便,同时也大大提高了网络拓扑发现的速度。以太网以太网以太网以太网以太网以太网路由器子网图3.2网络拓扑结构模型网络层拓扑发现算法的任务就是发现被管网络中的子网、路由器以及它们之间的连接关系。图3.2是网络拓扑结构的一个模型。其中,各子网通过各自的路由器与其他子网通信,它们都连接到路由器的一个端口上。路由器的一个端口可以连接一个子网,也可以同其他路由器相连。当子网内的某一机器向别的子网发送数据时,数据包首先到达本子网的缺省路由器,缺省路由器检测数据包中的目的地址,根据其路由表确定该目的地址是否在与自己相连的子网中。如果是,则把数据包直接发往目的地,否则转发给路由表中规定的下一个路由器,下一个路由器再进行类似处理,依次类推,数据包将最终到达目的地。可见,通过分析路由器上的路由表,就可以知道网络层的拓扑结构。2.1网络层拓扑发现用到的MIB组MIB-II(RFC-1213)是标准的SNMPMIB,所有的路由器都必须实现它。拓扑发现程序为了具有通用性的特点,必然选择MIB-II作为拓扑发现工具。MIB-II由很多不同的组组成,本节的拓扑发现算法用到的组包括:system,interfaces,和ip。下面详细介绍这三个组中包含的对象。1)System组该组内包含七个对象,分别为:sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation和sysServices。其中sysDescr描述了设备的相关信息,一般包括厂商,型号等。SysObjectID唯一标识特定厂商的特定类型设备,比如sysObjectID为1.3.6.1.4.9.5.45,则可以判断该设备为思科公司生产的型号为cisco6506的交换机。SysUptime表示设备从最近一次启动开始正常运行的时间。SysContact由网络管理员设定,一般设为网络管理员的联系方式。SysName为设备的名字,算法中会用这个对象来判断不同的IP地址是否属于同一个设备。SysLocation由网络管理员设定,一般设为设备所在地点。SysServices表示了该设备所能提供的服务。2)Interfaces组该组包含两个对象ifNumber和ifTable。其中,ifNumber对象表示该设备所具有的接口数量。该组的另一个元素ifTable是一张表,表内的每一个字段都是某一个接口的一个属性,包括接口索引(ifindex),接口类型(ifType),接口速度(ifSpeed)和接口物理地址(ifPhysAddress)等。3)IP组该组的元素较多,其中有三个表对拓扑发现来说比较重要,分别是ipAddrTable,ipRouteTable和ipNetToMediaTable。通过表ipAddrTable,可以找到被管设备所有的IP地址,同时结合interfaces组的ifTable表,可以把接口和其IP地址一一对应起来。网络层的拓扑发现算法主要就是利用表ipRouteTable来判断网络层的拓扑结构的。子网与路由器以及路由器和路由器的关系都能从路由表中得出来。该表中对应拓扑发现的对象列举如下:IpRouteDest:路由的目的地址。如为0.0.0.0,说明该路由为缺省路由。通往同一个目的地的路由可能有多个,路由的选择依赖于所使用的路由协议。IpRouteNextHop:路由的下一跳路由器地址。ipRouteMask:路由目的地的子网掩码。提取IP数据包中的目的地地址,与ipRouteMask进行按位“与”运算,得到的结果与ipRouteDest比较,如相同则应选择该路由。如果ipRouteDest为0.0.0.0,则规定ipRouteMask也为0.0.0.0。ipRouteType:路由的类型,为整型类型。其意义如表3.1所示:表3.1ipRouteType值及其意义ipRouteType值意义Other(1)其他Invalid(2)非法Direct(3)该路由目的地址为路由器直接连接的子网Indirect(4)远程路由,目的地址为远程的主机、网络或子网2.2基于SNMP的网络层对象发现在详细讨论拓扑发现算法之前,首先对算法中涉及到的一些问题进行说明。1)默认网关的发现首先,访问拓扑发现程序所在计算机的SNMPMIBII中的ipRouteTable,如果发现有ipRouteDest值为0.0.0.0的记录,则说明程序所在的计算机设置了默认网关,该记录的ipRouteNextHop值即为默认网关的地址。检查默认网关的ipForwarding值。如果为1,则表明该默认网关确实是路由设备,否则不是。2)子网的发现遍历路由器MIBII的IP管理组中管理对象ipRouteDest下的所有对象,以每个路由目的网络号为索引,查询ipRouteType字段的值。若该值为3(direct),则表明这条路由为直接路由,若该值为4(indirect),则为间接路由。间接路由表明在通往目的网络或目的主机的路径上还要经过其它路由器,而直接路由表明目的网络或目的主机与该路由设备直接相连,这样就得到了与路由器直接相连的网络号。再以这组网络号中的每个为索引,查询其路由掩码(ipRouteMask)。根据路由掩码,就可以确定这组网络中每一个的IP地址范围。例如,已知路由器的IP地址为192.168.4.1,且路由器支持SNMP协议。利用SNMP协议可以得到以下与路由器直接相连的子网,如图3.3所示。网络号网络掩码地址范围159.226.204.128255.255.255.192159.226.204.129~192192.168.0.0255.255.255.0192.168.0.1~255192.168.4.0255.255.254.0192.168.4.1~192.168.5.255192.168.6.0255.255.255.0192.168.6.1~255192.168.7.0255.255.255.0192.168.7.1~255图3.3与网关直连的子网3)其他路由设备的发现对于除了默认网关之外的路由设备,查询默认网关MIBII的IP管理组路由表中类型为间接路由的路由表项,得到路由的下一跳地址(ipRouteNextHop)。下一跳地址给出了与该网关相连的路由设备,仍可以利用上面的方法搜索这个设备的路由表。这样,该方法可以搜索出多个路由设备,并要求将它们所存储的路由表信息进行整合,得到更大的网络拓扑。4)网络层的连接对象网络层拓扑主要反映子网和路由器之间的连接关系。子网和路由器的连接关系可以在发现与路由器直接相连的子网时得到,路由器和路由器的连接关系可以通过路由表中的ipRouteNextHop得到。2.3基于SNMP的网络层拓扑发现算法描述网络层拓扑发现算法用伪代码描述如下:CGatewaygw=GetDefaultGateway();//得到默认网关If(gw确实是路由设备)把该设备添加到RouteList链表的末尾;for(RouteList中的每一个路由器CurrentRouter)//遍历该路由器的路由表,提取路由器和子网信息{for(CurrentRouter的路由表的每一项){if(ipRouteType为direct){if(ipRouteMask为255.255.255.255)(1){把IpRouteNextHop所代表的路由器添加到RouteList尾部,同时保证链表中的路由器不重复;(2)把当前路由器CurrentRouter和IpRouteNextHop代表的路由器之间的链接添加到链表LinkList中;}else{把ipRouteDest和ipRouteMask所代表的子网添加到SubnetList中去;把该子网与当前路由器CurrentRouter之间的连接添加到LinkList中;}}if(ipRouteType为indirect){把IpRouteNextHop所代表的路由器添加到RouteList尾部,同时保证链表中的路由器不重复;把当前路由器CurrentRouter和IpRouteNextHop代表的路由器之间的链接添加到链表LinkList中;}}}在(1)处,如果ipRouteMask为255.255.255.255,那么该路由为到主机的路由。也就是说,以该路由的ipRouteNextHop为地址的路由器和当前路由器通过一根电缆直接连接。在(2)处判断不同的IP地址是否属于同一台路由器时,可以首先查询ip管理组的ipAddrTable的所有IP地址,然后看当前的IP地址是否也在列表当中,如果在就是同一台路由设备,否则不是。三、基于SNMP协议的链路层拓扑发现算法在大多数情况下,仅仅发现网络层的拓扑结构是不够的,还需要发现链路层的拓扑结构,即子网内的设备及其连接关系。子网内的设备包括主机、交换机、打印机、集线器等等。连接关系不但包括设备之间的连接,还包括其他设备和交换机端口之间的连接关系以及交换机端口之间的连接关系。虽然局域网的拓扑信息对于网络管理非常重要,但是该信息却很难得到。大部分网络管理工具仅仅依赖网络层的拓扑发现和网络管理员手工添加二层的网络设备,比如交换机等,没有提供链路层的拓扑发现。Cisco,Intel以及其它硬件提供商虽然设计了它们自己的拓扑发现协议,但是这些对于大型,异构的网络没有任何用处。局域网拓扑发现的复杂性在于以太交换机硬件的内在透明性:网络用户感觉不到网络中交换设备的存在。这些交换机设备仅仅在执行生成树协议(Spanningtreeprotocol)时才和邻居设备交换信息,况且这种协议也不是在所有环境下都使用。交换机能保留的唯一状态是它的转发数据库,它的作用是把收到的数据包转发到适当的端口上去。这些信息对于局域网的拓扑发现来说是足够的,并且可以通过SNMP的标准MIB来访问。局域网中,交换机的连接关系确定了整个局域网拓扑结构的布局,所以,发现局域网络拓扑首先要发现交换机之间的连接关系。3.1交换机互联关系的发现图3.4为链路层的网络模型图,其中的节点包括交换机和主机。交换机通过它们的端口相连,主机通过局域网或者集线器和交换机的端口相连。由网桥(交换)设备组成的局域网中的设备可以被划分为网桥集合B和端点集合E。如图3.4所示,B={A,B,C,D}。E={W,X,Y,Z}。当今的以太网通常是交换式的,交换机通过不同的端口把网络中的其它各种设备连接起来。以太局域网中还包括:集线器(图3.4中与A相连),该设备用来把几台主机连接在交换机的同一个端
本文标题:基于SNMP的网络拓扑发现
链接地址:https://www.777doc.com/doc-6461579 .html