陈秀兰(甘肃广播电视大学,甘肃 兰州 730030)
随着网络的不断变化,使得网络的管理和维护变得越来越困难。一个好的网络管理系统首先要掌握的就是整个管理网络的拓扑结构。网络管理中的拓扑发现主要目的就是获取和维护网络中元素的信息以及它们之间的连接关系信息,最终实现对它们的有效管理。
网络的拓扑结构是指网络中各个节点在物理上或逻辑上的布局,称为网络的物理拓扑或逻辑拓扑,相应地包含了网络节点之间数据链路层及网络层的设备连接关系。
网络的拓扑结构发现算法国内外已有很多研究[1][2],本文根据这些算法进行多次实践,并总结、归纳出两种经典、可行的算法。网络拓扑发现方法主要分为两类:基于SNMP协议的算法、基于ICMP协议的算法[3]。
基于SNMP协议主要通过访问MIB库进行拓扑关系的获取,由于权限的关系,适合于在具有管辖权的网络范围内进行测量,所以难以推广应用。
基于ICMP协议,通过Ping或Tracert实现,可用于Internet上的大规模网络测量,但当网络上安装有防火墙软件时,则无法进行测量。
本文主要介绍在自治域下,使用基于SNMP协议被动[4]的测量方法实现网络拓扑发现算法。
拓扑结构包括网络层的主拓扑结构、数据链路层的逻辑子网拓扑结构和物理拓扑结构。主拓扑结构反映网络中的路由设备和子网之间的关系,包括路由器一路由器、路由器一子网以及接口的关系。
逻辑子网反映各子网内的设备连接情况,即从各子网的网关为起点,每个接口所对应的子网内的设备连接情况。
物理拓扑结构反映路由器与交换机,交换机与交换机,交换机与主机或其他终端设备的连接关系,这个拓扑图的发现在网络故障管理中起到很重要的作用。
主拓扑发现主要算法描述如下:
1)给定一个种子路由器地址,且注意目前网络中的路由器有时是由服务器充当的。
2)检测路由器的ipAddrTable,可以得到给路由器配置的所有IP地址、相应VLAN索引号(这个号不是给VLAN配置的标示号)、子网掩码;这个表说明了与该路由器相连的所有子网,而这些IP地址是子网的网关地址;
3)检测路由器的ipRouteTable:可以得到该实体的IP路由表。在路由表中选择出ipRouteNextHop类型是3 Direct的IP地址,这些是与路由器直接相连的下一跳路由器地址集合,但这些地址包括了子网间通讯的网关地址,因此需要在路由器地址集合中减去。
4)从路由器地址集合取出一个没有经过检测的IP地址,作为下一个要检测的路由器,重复步骤2;直到找到所有路由器并全部遍历完。
以上算法可以使用链表实现,将搜索到结果存放在数据库中,以便显示拓扑结构。
在实现主拓扑算法,获得MIB相关信息是很必要的,以下对相关表做说明:
1)地址表 ipAddrTable (.1.3.6.1.2.1.4.20)
ipAdEntAddr(.1.3.6.1.2.1.4.20.1.1):网络设备实体的IP地址;
ipAdEntlfindex(.1.3.6.1.2.1.4.20.1.2):网络设备实体的IP地址对应的设备物理接口标识;
ipAdEntNetMask(.1.3.6.1.2.1.4.20.1.3):网 络 设备实体的IP地址对应的掩码;
有些实体具有多个IP地址,称为多穴主机,如路由器,服务器。在拓扑发现中,对这种情况要加以识别,这些地址都表示一个实体,否则发现结果就会有误。
2)路由表ipRouteTable (.1.3.6.1.2.1.4.21)
ipRouteDest(.1.3.6.1.2.1.4.21.1.1):路由的目的IP地址,0.0.0.0是默认路由;
ipRoutelfindex(.1.3.6.1.2.1.4.21.1.2):路由对应的路由器物理接口索引;
ipRouteNextHop(.1.3.6.1.2.1.4.21.1.7):路由下一跳的IP地址;
ipRouteType(.1.3.6.1.2.1.4.21.1.8):路由的类型标识,其中Direct(3)表示直连关联;
ipRouteMask(.1.3.6.1.2.1.4.21.1.11):路由对应的IP地址掩码;
利用上述路由表的定义,结合相关路由协议RIP、OSPF等知识可以方便地发现与当前网关路由器相关联的其他网关和子网,从而描绘出某个范围内网络层的互联关系。
1)给定一台路由器地址,读取ipAddrTable表信息,可以得到路由器上设置的个子网配置信息,通过这个信息可以得到路由器与子网连接关系;
2)确定每一个子网的活动主机数,为了实现子网拓扑的搜索则需要引入其他协议,如ARP协议或者ICMP协议。
任何有以太网接口的网络设备都必须支持地址解析协议(ARP)并在本机维护一张ARP表,用于IP地址到物理地址的映射。通过分析MIB库中的对象,发现路由器的IpNetTOMediaTable表中记录了该路由器所连接其他设备的IP地址到物理地址的映射和映射方式。
地址映射表 ipNetToMediaTable(.1.3.6.1.2.1.4.22)
IpNetToMedialfindex(.1.3.6.1.2.1.4.22.1.1): 该地址转换条目对应的设备物理接口标号;
ipNetToMediaPhysAddress(.1.3.6.1.2.1.4.22.1.2):该地址转换条目对应的物理地址,即MAC地址;
ipNetToMediaNetAddres(.1.3.6.1.2.1.4.22.1.3):该地址转换条目对应的网络地址,即IP地址;
由ARP协议可知,该表中所列举的各个MAC地址都是与当前网络设备直接关联的某子网内设备或终端。由此可以发现子网段的拓扑关系。
这个表记录了最近活动主机的IP地址和物理地址,而每一条记录只能保留一段时间。而在ipAddrTable中记录了子网的网络地址和子网掩码。使用子网掩码与相应的路由器表中的IpNetToMediaNetAddress进行“与”操作,就可以得到IP地址属于哪个子网,这样搜索IpNetToMediaNetAddress表中的所有IP地址,便可以得到子网内所有的活动主机。
通过以上两大步骤的查找,可以得到动态的逻辑网络拓扑结构,但并不是网络中的实际的物理连接拓扑。
物理网络拓扑指的是一个通信网内部实体的实际物理连接(对应网络结构第2层)[5]。
在MIB-Ⅱ的扩展部分透明网桥管理组BRIDGEMIB(.1.3.6.1.2.1.17)中反映的交换机端口信息,地址转发表,端口状态,通过交换机所提供的信息就可以识别直接相连的终端或交换机的MAC地址等信息。
与物理拓扑图相关的MIB信息是:
dot1dBaseBridgeAddress (.1.3.6.1.2.1.17.1.1) :唯一标识网桥的MAC地址
dot1dStpDesignateRoot(.1.3.6.1.2.1.17.2.5) :根网桥标识符
dot1dStpRootPort (.1.3.6.1.2.1.17.2.7):设备根端口
dot1dStpPortDesignatadBridge(.1.3.6.1.2.1.17.2.15.1.8):端口指定网桥
dot1dTpFdbAddress (.1.3.6.1.2.1.17.4.3.1.1):桥端口学习到的MAC地址
dot1dTpfdbStatus(.1.3.6.1.2.1.17.4.3.1.3): 桥端口端口状态
dot1dTpFdbPort(.1.3.6.1.2.1.17.4.3.1.2): 桥端口端口号
1)搜索交换机之间的连接关系
首先知道该网段所有交换机的管理IP地址,读取交换机中的dotldTpFdbTahle的转发表条目,获得各交换机之间的级连关系,从而实现二层网络的拓扑发现。实现算法如下:
扫描所有的交换机dot1dStpDesignateRoot信息,将值一样的交换机归类,有生成树协议可以知道,这些交换机处于同一交换域;扫描所有的交换机和路由器的dot1dBaseBridgeAddress信息,得到交换机的MAC地址;同时查看dotldTpFdbTable转发表信息,查找与交换机MAC相符的记录,得到交换机的级连端口信息。例如在汇聚层交换机中的dotldTpFdbTable信息如表1,它标识了连接各交换机的MAC地址和相连的端口信息以及上连路由器的端口信息。
表1 dotldTpFdbTable转发表信息
2)搜索交换机与主机的连接关系
(1)首先查询路由器中的ARP表,IpNetToMediaTable表中保存的所有通过该设备转发数据包的主机的 MAC地址信息和IP地址信息,表2所示。
表2 IpNetToMediaTable表
(2)读取交换机中的dotldTpFdbTable
dotldTpFdbTable表中存放了交换机中相连的实体的MAC及相连的端口信息。
结 合 ipAddrTable,IpNetToMediaTable,dotldTpFdbTable信息,可以得到一个有关交换机的VLAN、响应物理端口、及IP地址分配情况,如表3所示。
表3 子网和主机信息表
通过这个表可以获得与交换机连接的主机信息,例如主机192.168.2.6所属的VLAN索引号78的子网内,MAC地址000d050b84e1,连接在交换机端口的第五端口上。
基于上述算法,安装Adventnet的SNMP开发包,使用Java语言编写的采集程序,并将数据写入后台数据库中,前台则使用php实现实时数据显示与信息查询功能。实现了主拓扑、逻辑拓扑结构的搜索结果,和实际情况完全吻合。
1)输入种子路由器IP地址,读取路由器中的IpAddrtable信息,得到端口索引号、设备IP地址,子网掩码;而这些地址有些是本地VLAN设置交换网关地址,用于本地数据交换用;其中IP也有用于与其他路由器进行互连之用,因此必须将这两种IP地址分别处理。一级网络发现主要指发现3层设备互连拓扑。
2)读取Iproutetable信息,搜索出类型为4(indirect)的路由项,从该类型项可以得出下一跳并直接相连的路由器地址;或读出ipRoutNextHop地址,排除在第一步中出现的IP地址,就可以得出与当前路由器相连的其他三层网络设备。
3)将发现设备进行文本显示。
算法实现效果及清单:
图1 一级路由器搜索界面
在该界面图1上输入4,在下一级界面将出现于种子路由器相连的路由器地址如图2;如果输入3,则出现种子路由器中的网关地址信息;
图2 一级路由器搜索结果
其中202.201.96.126为上联出口位于兰州大学;192.168.2.2,192.168.3.2联至两个分校。
1)输入种子路由器IP地址,读取该设备IpAddrtable、ipNetToMediaTAble信息表。
2)得到ipNetToMediaIfIndex,ipNetToMediaNetAd dress,ipNetToMediaPhyAddress信息。
(1)将两个表信息按照索引号进行归类,即可得到每一个VLAN中网关设置、正在使用的活动主机IP地址及MAC地址,如果继续读取网络设备的SYSTENOID信息,便可得出计算机的名称。
(2)为了得到VLAN中正在通信的网络设备,还可以使用主动测试方法,使用PING 或TRCERT工具,按照网络设备IP地址发送ICMP包,有正常回应的设备为活动主机,但不能发现有防火墙的设备。因此使用第一种方法回更快、更简单且准确。
3)将所有设备按照VLAN索引进行查询并文本显示。
算法实现效果及程序清单:
图3是从路由器的ARP表中,计算出VLAN当前活动主机数量;单击左边菜单“浏览VLAN”,可以得到图5-8,当前活动主机IP地址、子网掩码、所属VLAN,网关地址。
图3 VLAN中活动主机数量
本文介绍了一个利用了SNMP的MIB信息进行网络拓扑结构的搜索方案,主要利用了网络路由表和ARP缓存这两种工具分别进行主拓扑和逻辑拓扑的构造。深入利用SNMP提供的MIB变量,获取到更多的设备信息,实现多种网管功能。
[1]彭建,朱萍,傅明 一种基于SNMP协议的网络拓扑发现改进算法 [J].计算机工程与科学,2009(4),18-20
[2]Stanislav Belenki Sven Tafvelin Analysis of Errors in Network Load Measurements [J] ACM SIGCOMM Computer Communication Review Volume 30,Issue 1 (January 2000)5-14
[3]、William Stallings SNMP 网络管理 [M] 北京 中国电力出版社 2001.9
[4]、张宏莉,方滨兴,胡铭曾,姜誉,詹春艳,张树峰 Internet 测量与分析综述[J].软件学报,2003(14),110-116
[5]、陈馄 王正华.基于SNMP物理网络拓扑发现算法[J].北京:计算机系统应用 2009(3).50-53