潘 爽,苏亚维
(中国电子科技集团公司第十五研究所,北京 100083)
随着互联网的快速发展,网络规模迅速扩大,网络结构愈加复杂,准确完整的网络拓扑结构发现方法有助于网络的高效管理,对优化网络配置、定位网络故障、发现网络漏洞、探测网络交流等具有重要意义。网络拓扑发现是一种发现网络实体(例如路由器、交换机、网桥等)并展示实体间关系的技术,一般来说,根据网络拓扑发现设备的不同,通常分为逻辑拓扑发现和物理拓扑发现,分别对应于OSI参考模型中的网络层和链路层。其中,逻辑拓扑发现主要根据网络层IP地址来发现路由器与路由器之间的连接,路由器与子网之间的连接,使用IP地址建立网络实体的连接。物理拓扑发现主要根据链路层的信息发现物理网络实体(例如交换机和终端)之间的连接,使用Mac地址建立网络实体的连接。关于网络层有许多拓扑发现算法,这些算法通常基于SNMP、ICMP、RIP、OSPF和ARP路由表[1-3]。
本文融合多协议对网络结构进行分层构建,并对各层进行关联。首先对现有逻辑拓扑发现算法和物理拓扑发现算法进行完善,提出应用拓扑层的概念及构建方法,并进一步对物理拓扑、逻辑拓扑、应用拓扑三层拓扑进行关联分析[4-5]。
逻辑拓扑重构的目的是发现网络中的路由器和子网,并显示路由器与路由器之间、路由器与子网之间的关系以及子网内的网络设备。RIP(路由信息协议)是一种用于建立设备路由信息的协议,该协议主要基于距离矢量算法(Distance Vector Algorithms)完成,核心思想是通过“跳数”(metric)统计到达目的地址的路由距离,计算路由器间的连接情况。但该算法存在一定的局限性,一方面,要求网络中的路由器使用RIP协议作为路由信息交换协议,另一方面,路由距离限制在15跳之内,不适用于大型网络。而大多数网络均使用了SNMP协议,因此使用基于SNMP协议的发现方法构建网络拓扑时不受此限制。
本文使用基于SNMP协议的发现方法构建拓扑,该方法的主要思想是利用SNMP协议从路由器数据库中获取路由信息,然后分析这些信息,获取网络中路由器和子网之间的连接,进而发现网络。算法流程如下:
(1)根据SNMP协议在网络中进行扫描,添加路由器到路由器的等待队列中。
(2)从队列中选择一个路由器作为开始路由器,通过其MIB获得路由信息表。
(3)将路由信息表中最大的IP地址作为当前路由器的ID,将此路由器添加到已建立的队列中,然后删除与等待队列中当前路由器具有相同IP地址的路由器。遍历当前路由器MIB中的ipAddrTable记录。
(4)如果记录的ipRouteType为3,则表示当前路由器与子网直接连接,根据ipRouteDest和ipRouteMask获取直接连接的子网信息,以及路由器和子网的连接情况。
(5)如果记录的ipRouteType为4,则表示当前路由器与子网间接连接,可以查找与当前路由器直接连接的下一个路由器,然后将其添加到等待队列。
(6)从等待队列中执行下一个路由器,并重复步骤(2)~步骤(6),直到等待队列为空。
拓扑协议或路由协议的主要功能是实现设备的物理连接,并非识别设备版本号和型号。识别设备/软件类型型号主要依赖于设备指纹分析,本文选择协议CDP、HTTP、S7、Modbus、Smb、SNMP、MySQL等识别大部分设备,对其他设备结合SNMP中MIB信息接口组中的sysServices、IP组的ipforword和Bridge-MIB函数确定设备类型。
如图1所示,CDP协议识别思科设备型号和软件版本;HTTP协议识别TP-LINK型号;S7协议识别西门子设备型号;HTTP协议识别火绒杀毒软件版本号信息。
图1 设备识别流程
以CDP协议为例,CDP是一个二层的网络协议,默认每60 s向01-00-0C-CC-CC-CC组播地址发送一次通告,CDP协议中包含设备类型信息,字段为Capabilities,其中Switch标识的是交换机,Route为路由器。CDP数据包还包括设备连接的物理接口信息。通过CDP数据包中的Software Version字段获取软件版本、设备平台等信息。基于网络通信指纹比对识别设备信息,如设备厂商、型号和版本等。
通过融合多协议,实现可支持的部分设备见表1所列。
表1 支持设备列表
结合SNMP中MIB信息接口组中的sysServices值可初步判断其他设备的类型。可根据式(1)计算Li,若值为3,则其属于第3层网络设备,具有数据转发能力,根据表2可知,该设备可以判断为路由器。
表2 网络设备
将IP组的ipforword数据作为辅助值进行验证和进一步判断。若ipforword值为1,则表示设备具有数据转发功能;若ipforword值为0,则表示设备不具有数据转发功能。考虑到很多3层网络交换机也具有数据转发功能,与路由器ipforword值相同,且均属于网络层,因此进一步通过检查设备能否实现Bridge-MIB功能对两者进行区分(路由器无此功能,但交换机具有此功能)。不同设备对应各值的情况见表3所列。
表3 网络设备对应值
物理层拓扑发现要在网络层拓扑发现任务之后进行,用于进一步确定子网的拓扑结构,发现交换机与路由器,交换机与主机之间的物理连接关系。目前,物理层拓扑发现主要有两类算法,一种基于生成树协议(如基于STP协议、CDP协议的方法);另一种基于地址转换表(如基于AFT协议、SNMP协议的方法)。其中,基于AFT协议的方法对地址转发表要求高,表必须完好无损;用SNMP协议读取设备的MIB信息会有一定的延迟,并与网络规模成正相关趋势;CDP协议只能在Cisco设备上使用。考虑到目前大多数链路层设备都支持生成树协议(STP),因此本文选择基于STP协议的方法。
通过STP生成树协议可以发现网络中的所有链路,并避免冗余链路形成环路,用来发现交换机之间的连接关系[6-10]。
子网物理拓扑发现流程如图2所示。
图2 子网物理拓扑发现流程
(1)获取子网中所有交换机的总队列。如果交换机支持生成树协议,则根交换机由生成树协议选择,否则,选择核心交换机或网关交换机作为根交换机。
(2)选择交换机列表中的上行链路端口作为当前根交换机。
(3)从列表中选择一个交换机,然后根据直接连接规则判断所选交换机与当前根交换机之间的连接。
(4)遍历所选交换机的叶端口,在叶端口表中显示路由设备和IP地址的主机,然后将它们连接到所选交换机。重复步骤(3),直到交换机是列表中的最后一个。
(5)从步骤(2)中建立的交换机列表中选择一个交换机,将其作为虚拟根交换机,然后算法将从步骤(2)开始重复,直到交换机总队列为空。
目前的研究中,缺乏对应用拓扑的发现,但实际应用中,发现设备之间的通信情况具有重要的意义,因此,本文提出应用拓扑重构的概念,并以邮件为例进行分析。
应用拓扑发现主要是基于设备(IP地址)之间的网络通信分析,在设备(IP地址)的连接关系上,进一步基于协议识别与解析,如识别设备提供的服务与连接协议,以及服务的详细情况等[11-15]。
将 HTTP、HTTPS、SNMP、FTP、SFTP、Telnet、SSH、NTP、SMTP、POP3、IMAP、SMB等协议通信报文内容与指纹库软件指纹进行比对,可以识别操作系统、安防、应用软件的数据信息。支持识别的应用软件见表4所列。
表4 应用软件
在识别应用服务的基础上,对通信报文进行深度解析,提取业务应用通信行为和关键字段信息,构建详细的应用拓扑关系。可实现对邮件、语音、传真、文件传输、远程控制、数据库访问和数字证书认证等业务的信息识别与构建。以邮件为例,根据SMTP协议字段response字段值可判断是否包含邮件服务,并通过SMTP、POP3、IMAP协议中的from、to、subject字段获取发送者、接收者、主题等信息。
物理拓扑、逻辑拓扑、应用拓扑既相互独立(各表述不同网络层关注的设备及结构)又相互关联(共同构成完整的网络结构)。研究拓扑间的联系,有利于清晰了解网络结构,掌握设备在不同层间的关系。因此,本文对物理拓扑、逻辑拓扑和应用拓扑的关联方式进行研究,提出了一种符合实际应用场景的关联方式。该关联方式的核心为IP,通过IP对三层网络拓扑进行关联,并获取物理拓扑信息、逻辑层信息和应用层信息。本文发现,可以通过ARP协议关联物理拓扑层和逻辑拓扑层,通过路由器IP间的服务和服务信息关联逻辑拓扑层和应用拓扑层。其中,ARP(地址解析协议)是一种计算机联网协议。用于已知IP地址或网络层地址时可以确定网络主机的链路层或硬件地址,维护的ARP表中每条记录都是一个IP地址和一个物理地址的绑定,因此可以使用路由设备或交换设备的ARP表来关联物理层和逻辑层信息,可通过IP查看IP关联的设备和设备之间的应用服务情况[16-19]。
目前的网络拓扑分析主要是发现网络层的拓扑结构,对子网内部的结构关注较少,这显然不能适应规模日益扩大的网络结构,因此本文分层论述了网络拓扑发现方法,一是通过改进的逻辑拓扑重构算法发现路由器、子网及其连接关系;二是通过改进的物理拓扑重构算法发现网络中交换机与交换机、交换机与路由器之间的关系;另外,本文引入的应用拓扑展示了设备间的应用服务,使得网络更加完整。
综上所述,论文中提出的融合多协议的网络拓扑发现技术在发现完整网络结构中具有较大优势,但仍存在一些问题,如部分不支持SNMP协议的设备难以被发现,算法未考虑IPv6网络环境,一定程度上依赖设备指纹库等。通过对网络拓扑构建的研究,本文认为适配IPv6环境 、完善设备指纹库等是未来技术的改进方向[20-22]。