拓扑发现(共8篇)
拓扑发现 篇1
0 引言
当前,网络管理已逐步实现智能化、可视化,网络拓扑自动发现是网络管理实现故障快速发现和准确定位的重要参考。随着网络拓扑结构和组成的日渐复杂,人工维护网络拓扑越发困难,自动发现网络拓扑结构的需求更加强烈。纵观国内外关于自动发现网络拓扑结构的研究,网络层设备发现技术已经较为成熟,而链路层发现因其透明性,仍值得深入探究。
1 国内外研究现状
近年来,互联网变得更加复杂且庞大,对互联网进行网络拓扑发现也变得愈加困难和复杂。因此,关于网络拓扑结构发现的研究是一项具有挑战性的工作,尤其在工程领域和军事工业领域有着巨大应用价值。国内外很多专家和机构对网络拓扑结构发现进行了大量研究。
数据链路层的拓扑发现能方便地使用简单网络管理协议,HwaChim Lin等通过Bridge的信息库管理方式将交换机的连接信息采集出来,这样做会导致拓扑发现结果不准确。著名贝尔实验室的Yuri Breitbart、卡耐基梅隆大学的Brucelowekamp,以及我国相关学者[1,2,3]分别在地址转发表的基础上进行了物理拓扑发现算法的改进。Breitbart算法是在各网桥地址转发表均一致的基础上改进的,因此该算法利用Bridge地址转发表来探测获取拓扑信息;Bruce的算法主要适用于网络中使用了Hub所产生拓扑发现问题的情况。国内学者通过对现有网络增加额外流量来维护转发表,从而改进了网络拓扑发现算法,并且成功实现了链路层网络拓扑发现。
2 链路层拓扑发现
因为网络拓扑结构包括网络层和链路层。一般目标网络内包括主机、集线器、交换机、路由器等设备。链路层中的连接关系主要有网络设备与交换机之间的连接、交换机与交换机之间的连接。
链路层拓扑信息在网络管理中非常重要,但该信息内容很难得到。以太交换机硬件相互之间的透明性,导致链路层拓扑发现异常复杂。子网中交换机只有在执行生成树协议STP时才与相邻设备进行信息交换,并且该协议也并非在所有环境中都可以使用。交换机可以保存转发数据库,交换机主程序将收到的数据包参照该数据库将数据包转发到相应的端口。链路层拓扑发现有这些信息即可,这些信息可以利用SNMP协议的标准MIB来获取。交换机之间的连接关系确定了整个局域网的拓扑结构[4]。
图1为链路层模型图,包含了多个交换机、主机。交换机可以和其它交换机通过各自的端口相连,主机可与交换机相连,也能够连接在集线器上。图1中,交换机设备和集线器等设备组成的局域网能够被分为交换设备集合P与端点集合C。在图中表示为:P= {C,D,A,B},C={Z,X,W,Y}。交换机能够通过各端口使该网络的其它设备连接到一起。集线器是用来将若干台主机设备连接到一台交换机的同一个端口的设备。本文称不支持SNMP的交换机为哑交换机。
在以太局域网中,交换机和交换机以及转发集的连接关系绝不会是环路,即便本来有环路,交换机也能够利用STP算法选择一个不存在环路的路径。若从某节点发出的报文经过交换机的某个端口,则该交换机可以记录该报文的源地址和对应的端口。在以后的数据传输中,如果交换机发现接收到发往该地址的报文,就会自动地转发到对应的端口,这些数据包的源地址和对应端口的关系构成了交换机的FDB。然而在交换机的FDB中,每个端口都是和多个设备的物理地址对应,对于某个交换机的端口,将物理地址所从属的设备集合叫作该端口的转发集。在图1中,FxC能够代表交换机C的x端口转发集,假设x为1,有F1C={A,Z,B,D ,X,W},如果某端口连接的所有设备都被包含在该端口的转发集中,则说明该转发集完整,从图中可知F1C是完整的[5]。
2.1 交换机之间的直接连接定理
假设两个不同的交换机节点互相连接,而且没有任何其它设备在它们之间,则称该连接是直接连接。如果有其它设备在两个节点的中间,则称该连接是间接连接。需要注意的是:直接连接仅仅是间接连接的特殊情况。由图1可知,交换机设备B与A通过端口4和1直接连接,交换机C和交换机A通过1和1端口间接连接。
从链路层拓扑发现的原理可知,若可以得出两个交换机的某些端口之间是否有直接连接关系,就能够容易地得出该网络中的交换机互联关系,则交换机和主机的连接关系也可以很容易被发现。在图1中,假设F1B与F1C全是完整的,也即F1C={A,B,W,X,D,Z},F1B={C,Y}。可以得出结论:F1B∩F1C=ф(空集),F1B∪F1C=N(N是图中主机设备的全集)。此结论的得出并非巧合,原因是:假设两个交换机设备通过端口x和y进行直接连接,并且路径中也没有任何其它网络设备,则以两交换机相连处为中间线,该网络中主机设备可以分成两部分:一部分是端口x所对应一侧,也即FxA,另一部分是端口y所对应一侧,也即FyB。因此,FxA∪FyB=N。
可以这样描述直接连接定理:如果FxA和FyB同时都完整,则A通过x端口和B的y端口进行直连的充要条件为:FxA∩FyB=ф并且FxA∪FyB=N。
通过上述直接连接定理,能够很容易地遍历局域网中所有交换机的FDB,之后再对不同交换机的端口转发集作“并”运算操作,若运算结果为全集并且“交”运算操作的结果是空集,则可以说这两个交换机通过这两个端口直接连接。然而。直接连接方法存在一个很大缺陷,即必须要求交换机的端口转发集全部是完整的。但在实际应用中,当网络规模不断扩大时,几乎不可能获得完整的端口转发集。因此,上述直接连接定理的方法就不适用实际网络环境了。
2.2 交换机之间的间接连接定理
与直接连接定理不同,间接连接定理方法的思想是:通过反证法,依次否决掉没有可能的连接。通过反证法判断连接的例子如图2所示。
首先可以假设交换机A与交换机B间接连接,然后判定此连接是否和交换机A、B中的FDB信息相矛盾。若找不出矛盾,则可以说该连接可能存在;若有一条矛盾,就可以说该连接肯定不存在。由图2可知,交换机A与B的连接可以有6种关系,如图3所示。
假设A、B通过端口1、1 进行间接相连,图2表示了图3列举的第一种情况。在以太局域网中,交换机设备相互连接成树状的结构,不能存在环路。因此,此时该网络应该被分成3个部分。首先是交换机A的2和3端口连接的设备;其次是交换机B的2端口所连接的设备;然后是交换机A、B和两者中间的设备。但是事实是:第一部分为F2A∪F3A,第二部分为F2B,这两部分不可以有交集。因为(F2A∪F3A)∩ F2B ≠ф,所以该事实情况和交换机A通过端口1和交换机B的端口1相连是矛盾的。事实上,除非两个端口之间是间接连接,则不同交换机上的两个端口转发集不能有相同的元素。如果有相同的元素,就相当于某个设备同一时刻存在于网络的不同位置,这显然不正确。图3中列出了5种情况,很显然只有第5种情况正确,其它情况都不对。真实的情况是交换机A和B通过端口1和2相连,该连接不一定是直接相连,也可能是间接连接。
间接连接判定交换机连接关系可以不用完全获取所有交换机的端口转发集,利用已知信息排除所有不可能存在的连接即可。首先依次组合两个交换机的所有端口,分别对交换机剩下端口的转发集做并运算,然后将得到的两个转发集再做交集运算。如果结果为空,则说明两个交换机相连,直接相连是间接相连的一种特殊情况。
2.3 通过间接连接定理判定直接连接关系
假设目标子网内,交换组成的集合是G。由STP协议可知,交换机之间是构成树的组织结构。选择任意交换机Si作为根交换机节点,设Si经过n个端口和其余交换机构成间接连接结构,则可以将G-{Si}构造成一个划分Ti,该划分中可以包括n个元素,并且每一个元素都是与Si的某个p端口进行间接连接的交换机设备集合,可以设为Gp。在Gp内选中交换机Sj,能够推出:Sj与Si之间一定是通过某个端口q、端口p进行间接连接。如果Sj没有经过端口q和Gp中其它交换机(记录Si的p端口转发集)间接连接,则能够判断出Sj与Si通过端口q和p是直接连接。
3 结语
网络拓扑结构自动发现包括网络层拓扑发现和链路层拓扑发现,网络层拓扑发现已发展成熟。本文详细介绍了链路层拓扑发现中用到的“直接连接定理”和“间接连接定理”,通过此两种定理可以快速、有效地勾画出链路层设备拓扑结构,使得完全拓扑结构发现得以实现,对现代网络管理意义重大。
参考文献
[1] 宋翠.网络拓扑发现算法的研究[J].企业导报,2014(16):137-146.
[2] 焦彦平,李唱,陈东宁.基于协议的网络拓扑发现算法研究[J].科技创新导报,2014(20):46-50.
[3] 牛新征,梁帆,周明天.基于无线传感器的物联网网络拓扑发现算法研究[J].计算机科学,2012(4):118-122.
[4] 吴远,李润知,刘亚珂.网络拓扑发现算法的分析[J].电子技术应用,2006,32(8):28-31.
[5] 刘海华,王萍萍.基于生成树算法的链路层拓扑发现研究[J].计算机技术与发展,2008,32(5):101-104.
拓扑发现 篇2
关键词:网络拓扑自动发现SNMP简单网络管理协议
在信息化建设飞速发展的今天,网络已经深入到各行业及人们的日常生活学习中,随之而来的就是网络规模日益扩大,网络拓扑结构趋于复杂,如何对网络进行优质的维护及正确的管理已经成为当前网络构建的重点问题。一个良好的网络管理系统可以实时、准确的反映出网络中所有设备的布局结构,方便管理员第一时间了解网络运行状况。网络拓扑自动发现是网络管理系统重要组成部分,是衡量一个网络管理系统好坏的首要标准。
一、网络管理的主要功能
网络管理系统是现代化网络发展的衍生品,是改变网络管理者工作模式的重要工具,通过网络管理系统,从而确保网络持久化的正常运行,同时,一旦网络出现故障能够第一时间做出及时响应,使得管理员能够立刻做出应对,达到其管理目的。根据国际标准化组织ISO(InternationalOrganization for Standardization)定义,网络管理的主要功能划分为5个方面:配置管理CM(config Management)、故障管理FM(Fault Management)、性能管理PM(Performance Management)、计费管理AM(Account Management)、安全管理SM(Security Management),他们各有其特点。
网络拓扑自动发现作为网络管理的一个主要技术环节,他不仅是网络管理的基础,也是网络管理的重要组成。网络拓扑自动发现是根据一种算法通过收集网络元素之间的各种必要信息,确定网络元素之间的互连关系,并在此基础上构造网络拓扑图,当前最常用的网络拓扑自动发现方法主要包括基于SNMP协议的拓扑发现方法。
二、SNMP简单网络管理协议
1.SNMP协议基本概念
SNMP(Simple Network Management Protocol)即简单网络管理协议,是由Internet工程任务组织(IETF)研究小组为解决Internet上的路由器管理问题而提出,目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行信息修改。SNMP是目前TCP/IP网络中应用最为广泛的网络管理协议,1990年5月定义了第一个版本SNMPv1,后得到迅猛发展,但同时也暴露出明显不足,因此1993年发布了SNMPv2版本,SNMPv2不仅包容了以前对SNMP所做的各项改进工作,同时还保持了SNMP的各项功能特点,目前市场上常见的均为SNMPv2版本。1998年1月随着互联网的深入,正式形成SNMPv3体系结构,其主要特点就是可以实现基本的管理功能。
2.SNMP管理信息库MIB
网络管理信息库(MIB)是一个信息存储库,如图一所示这里包括许多数据对象,网络管理员可以通过直接控制这些数据对象去控制、配置或监控网络设备。他指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。
网络管理系统可以通过agent来控制MIB数据对象,管理节点一般是面向工程应用的服务器,拥有很强的处理能力,在它的上面运行SNMP管理软件。在网络中可以存在多个网络管理节点,每个网络管理节点可以同时和多个SNMP代理节点通讯,SNMP管理软件一般采用图形用户界面来显示网络的状况,并接受管理员的操作指示不断地调整网络的运行。代理节点可以是网络上任何类型的节点,如主机、服务器、路由器、交换机等,这些设备上运行SNMP服务进程,用于接受和发送SNMP数据包,代理节点只需与管理节点通讯,它们占用很少的处理器和内存资源。管理信息库是网络被管设备的各种状态信息的集合,这些信息被称为SNMP的被管对象,管理信息库就是保存所有网络管理对象的数据结构。
三、SNMP协议在网络拓扑自动发现中的应用
1.SNMP服务器
SNMP服务器是由唯一的SNMP进程组成,始终不断接受请求报文,分析后执行相应的请求,执行后返回一个响应。当今,几乎全部操作系统中均提供SNMP代理服务,其进程名称为snmpd,这个进程就是实现SNMP服务器的主要算法。工作流程为:snmpd进程首先打开一个的UDP端口,不停循环调用,等待下一个read报文,当其中一个SNMP报文送达时,调用snparse分析该报文,转换为内部格式,同时提取字段,调用sna2b,snmpd从报文中提取对象标识符序列,并把它们转换到一个链表中,链表中的每个结点对应于一个绑定,这些结点被定义为文件snmp.h中的snbentry结构。在转换时,sna2b把每个ASN.1对象标识符转换成内部表示形式,当报文和变量名序列都已经成功转换为内部格式,snmpd调用snrslv解决报文提出的请求,包括为链表中每个对象标识符执行指定的get,snmpd调用mksnmp生成响应报文,用write向客户机发送回答报文,服务器发送一个响应报文后,调用snfreeb1释放变量名链表,并返问到主循环的头部,继续等待下一个输入报文。如果因出现差错而无法完成上述工作,则服务器生成一个差错回答报文,含有差错类型码(Error Type Code)和差错索引(Error Index)。差错类型码给出差错发生的原因,差错索引指出导致差错的变量名,这涉及到的SNMP报文分析、链表中ASN.1名字的转换、请求的解析、SNMP操作的解释和执行以及表格的间接寻址等。
2.SNMP客户机端
SNMP客户机生成报文后会主动向服务器发送,并等待服务器的响应,同时验证响应是否与请求相对应。执行客户机功能的过程snclient,以请求描述块的地址为入口参数,块中包含了报文的内容,包括需要完成的操作和一张操作执行对象的绑定表。流程如下:首先snclient调用mksnmp生成以ASN.1格式表示的报文,调用open打开一个用于发送数据包的描述块,并调用write 發送上面所生成的报文,在定时模式下,进行read操作,接收响应,如果snclient接收到响应,它调用snparse将响应转换为内部格式,然后将响应中的标识字段与请求中的标识符字段相比较,验证该报文是对客户机刚才发送的请求的响应,正常时snclient调用sna2b将每个对象标识符从ASN.1表示形式转换为内部格式。由于UDP是不可靠的,因而SNMP客户机必须实现自己的超时和重传策略。
在网络层,拓扑发现主要目的在于发现同在网络层的网络元素之间的相互联系。在大多数情况下,仅仅发现网络层的拓扑结构是不够的,还需要发现链路层的拓扑结构,即子网内的设备及其连接关系。子网内的设备包括服务器、交换机、存储、无线设备等等。相互关联关系不但包括设备之间的联系,还包括其他设备和交换机端口之间的连接关系以及交换机端口之间的连接关系。网络管理的基础就是拓扑发现,可是目前还没有统一的行业标准,这样就使得拓扑发现操作变得困难,当前国内外出现了一些新兴实用的网络拓扑发现算法,这些算法在功能上都各有特点。当今网络时刻在变化,算法应不仅能发现网络的拓扑结构,而且要及时发现其变化,为网络运营过程中的配置管理提供支持,才能满足网络管理员的根本需要。
四、应用效果
在网络管理系统中网络拓扑结构的地位是非常重要的,拓扑结构的展示也是评判网络管理系统是否优质的一个基本因素,本文上述所
描述的一些基本理论已经在一个比较成熟的网络管理系统中进行应用,并取得了良好的效果,目前在各高校、政府、医疗行业均有广泛的应用,并得到了一致的认可。一套完整的网络拓扑图,不仅可以清晰的展示出利用拓扑自动发现后的全网设备的相互关联关系,还包括各个设备之间,各个设备接口之间的关联关系,很好的为管理员展示出一套直观、实时的网络拓扑图,大大的提升了网络管理员的工作效率,最大的改变了IT工作者的工作模式,从原先的被动工作,到利用网络管理系统变为主动的工作模式,这也是网络管理系统的本质理念。
参考文献:
[1] 孙克辉.网络层与链路层综合拓扑发现算法及其实现[J].计算机工程与应用,2012.4.
[2] 潘楠.一种基于SNMP的链路层拓扑发现算法[J].计算机工程,2013.3.
[3] 杨家海.网络管理原理与实现技术.清华大学出版社,2002.
[4] 张勇.网络拓扑发现的主动探测技术的研究和实现.小型微型计算机系统,2000,21.
[5] 宋庆峰.分布式网络管理系统中SNMP代理的开发与实现 [J].计算机与信息技术.
IPv6拓扑发现的研究 篇3
在IPv4中,主要基于简单网络管理协议(Simple Network Mangement Protocol,SNMP)来进行拓扑发现。IPv6地址分为站点本地地址、链路本地地址和全球地址。在IPv4网络中,主要使用MIB信息库中的ip Route Next Hop对象来对路由器直连的子网信息进行发现,在IPv6网络中,MIB中的ipv6Router Next Hop对象使用的是链路本地地址而不是全球单播地址。另外,IPv6下,SNMP协议的标准化工作还没有完成[2]。因此,在目前情况下,基于SNMP的拓扑发现机制不能应用于IPv6。本文使用Traceroute6对拓扑进行发现,针对路由多址问题,提出了自己的解决办法。
1 技术要求
1.1 Traceroute6
Traceroute是常用的网络管理工具,可以被用来探测报文经过的路由器。报文在每经过一个路由器时,其TTL值将被减1,如果TTL值为0,则该路由器向源地址发送目的地址不可达消息。Traceroute就是利用该特性实现对路由器的探测。向目标地址发送TTL依次增大的探测包,该路径上所经历的路由器便会向源地址发送消息,从而发现路径上的路由器[3]。IPv6中的Traceroute6与Traceroute相似,也可以用来管理网络。与Traceroute不同的是,Traceroute6使用IPV6_HO-PLIMIT来代替TTL。
1.2 路由多址
路由器位于网络层,用于接收和转发数据报文。它需要互相连接不同的网络,因此,也就需要配置多个IP地址来解决连接网络的问题。由于路由器的多IP地址,在网络拓扑发现中造成了很大的麻烦。使用Traceroute6进行拓扑发现,每次发现的都是一个孤立IP地址,怎么样将属于一个路由器的IP地址进行合并,关系到拓扑发现的准确性。由于同一个路由器共同维护一个路由表,因此可以根据使用的路由协议与路由器交换路由表,达到获取路由表的目的,通过比较路由表,就可以判断属于同一个路由器的不同接口。
1.3 交叉链路
分布式拓扑发现方法存在以下不足之处:部署困难,成本高,最主要的是产生大量的网络冗余,因此本文采用集中式拓扑发现。集中式拓扑发现由单个探测点出发,利用Traceroute6工具进行探测,但是,Traceroute6工具只能发现树状路径,无法发现交叉链路。根据源路由机制,可以指定探测包到达目的节点之前需要经过的节点[4],而且在IPv6中,源路由被所有设备支持,因此可以通过源路由对交叉链路进行发现。
1.4 隧道技术
由于IPv6网络处于发展初期,规模还比较小,在IPv4/IPv6网络的边缘,需要使用双栈技术来进行通信。双栈路由器运行时,提供IPv6和IPv4两种协议的服务,双栈路由器与IPv6网络通信时使用IPv6协议,与IPv4网络通信时使用IPv4协议。当IPv6数据报需要穿透ipv4网络时,就需要使用隧道技术。使用IPv6隧道技术时,使用IPv4数据报头将IPv6数据报作为数据进行封装,在IPv4网络中进行传输。通过建立IPv6隧道,实现IPv6数据报的发送和接收。在隧道的入口和出口的路由器需要为双栈路由器。目前主要使用6over4隧道[5]和6to4[6]隧道。IPv6数据报在经过隧道传输时,使用IPv4报文进行传输,这时,IPv6数据报被封装在IPv4报文中,IPv4使用隧道的入口和出口作源地址和目的地址,协议字段值是41。在隧道的出口处,判断协议字段值是否为41,如果是,则将IPv6报文取出发送给目的地址。
2 目前研究现状
IPv6网络中,由法国ORIA-INRIA实验室I.Astic等人提出的拓扑发现结构具有代表性[7],如图1所示。该结构中,每条本地链路上存在一个本地代理(Local Agent,LA),负责对节点的相关信息和节点之间相互连接进行搜集。系统设置一个管理中心(Central Manager,CM),对代理发送的相关信息进行处理。代理负责发现本地链路上的拓扑结构,向管理中心发送,然后由管理中心对收到的信息进行处理。管理中心负责对骨干网络的拓扑结构进行发现。这种结构将骨干网和本地链路的拓扑分开发现。使用这样的拓扑发现结构,可以使拓扑发现的结果更全面、详细。
3 IPv6拓扑发现
本系统分为三个部分实现对IPv6拓扑的发现:本地发现,骨干网发现,隧道发现。本地发现的作用是发现本地链路内存在的节点和相应的配置信息,骨干网发现主要用于进行IPv6骨干网拓扑发现,隧道发现用于发现存在于双栈节点之间的隧道。
3.1 本地发现
在这一部分中,主要实现对本地链路的路由器和主机的发现,将链路本地地址转化为全球地址,使用固定的格式将结果存储起来,然后发送到处理节点。
IPv6中预定义了多播地址,见表1:
本地链路内所有的路由器和主机节点都会响应目标地址为FF02::2的报文;本地链路内的路由器会对目标地址为FF02::2的报文做出响应,而主机不会做出响应。使用这两个多播地址便可以区分哪些事主机,哪些是路由器。
具体算法如下:
(1)ping6 FF02::1,将应答包中的源地址取出,该地址即为本地链路内所有的节点(路由器和主机);
(2)ping6 FF02::2,将应答包中的源地址取出,该地址即为本地链路内的路由器节点;
(3)从本地链路所有节点中排除路由器节点,即为主机节点。
使用以上算法获得的IPv6地址一般情况下是本地链路地址,而我们需要获得IPv6全球地址,因此必须将IPv6本地链路地址转化为全球地址。IPv6使用两种方式对全局地址进行配置:无状态地址自动配置、有状态地址自动配置。有状态地址自动配置类似于IPv4下的动态主机配置协议(Dynamic Host Configuration Protocol,DHCP),由DHCP服务器对地址进行分配。在无状态地址自动配置下,需要配置地址的接口监听路由器公告,得到全局地址前缀,与接口标识相接合,便可以得到一个全局地址。目前IPv6网络的地址配置主要使用无状态自动配置方式,本文根据无状态自动配置的工作原理将本地链路地址转化为全局地址。首先模拟路由器请求报文,向路由器的多播地址发送,路由器收到请求报文后,会发出路由器宣告,节点收到路由器宣告后,取出子网前缀,与接口标识结合,就可以获得节点的全局地址。
3.2 骨干网发现
Traceroute6是一种网络管理工具,它可以发现探测路径上经过的路由器。骨干网拓扑发现算法为[8]:
(1)获取目标网络内的IPv6地址列表;
(2)向地址列表中的每一个地址进行traceroute6操作,将获取到的节点信息保存。分析获得整体拓扑。
3.2.1 获取IPv6地址列表
获取的地址列表中的地址一定要分布均匀、广泛,Traceroute6探测的结构才能更准确。
BGP路由表中含有与该自治域的地址前缀信息。除了使用BGP路由表中的地址前缀,还可以选择在6bone上注册的IPv6的站点地址列表。
3.2.2 数据分析和路由器多址问题
依次记录Traceroute6探测过程中所经过的路由器的地址和域名。在探测的过程中,Traceroute6在对不同的地址进行探测时,经过不同的IP地址,但是这些IP地址可能属于同一个路由器,这就使探测数据之间产生了联系。在对数据进行分析的时候,就是要将属于一个路由器的不同接口进行合并。本文以网络采用RIPng协议为例分析路由器多址的解决办法。对探测到的IP地址依次模拟直连网络的路由器,以多播形式发出请求报文,来请求全部的路由表,将获得的路由表保存。对保存的路由表进行比较,相同的即为同一个路由器的不同接口。比如traceroute6探测获得的结果中反应几条连接:R1→R2→R3,R4→R5→R3,解析的结果如图2,R2、R5解析出的路由表内容相同,将其合并为R2.5,合并后如图3。
3.2.3 交叉链路
交叉链路发现是在之前拓扑发现的基础上进行的。探测时,以探测点为出发点,依次将一条路径上发现的路由器作为中间节点,将另一条路径上的路由器作为目的地址,这样就可以发现路径之间的交叉链路了。
3.3 隧道发现
隧道发现以骨干网拓扑发现为基础。现阶段,IPv6网络被IPv4网络分隔成一个一个的“孤岛”,IPv6网络之间相互连接时,不在同一个网络之内的节点必定要通过IPv4网络,这时就要使用隧道来进行通信。因此,对于骨干网络的每一跳路径,首先判断有无双栈节点,如果存在双栈节点,则判断有无隧道存在。
RFC2553中定义了一些函数识别双栈节点。如:getaddrinfo()函数实现节点名称到地址的映射;getnameinfo()函数可以将节点地址转化为节点名称。
在对一个节点是否为双栈节点进行判断时,首先对已经探测到的路由器地址信息调用getnameinfo()函数,得到该节点的名称,再调用getaddrinfo()函数,getaddrinfo()函数会返回一个addrinfo结构体,通过对addrinfo结构体中的ai_family值来确定其地址类型,如果ai_family的值为AF_INET,则该地址为IPv4地址,如果值为AF_INET6,则为IPv6地址,两种地址都存在得情况下,则可以判断该节点为双栈路由器。
在IPv6通过的路径中,如果连续通过两个双栈路由器,则该双栈路由器之间有可能存在隧道。在两个双栈路由器之间的路径上发送比较大的IPv6报文,如果没有产生分片,则说明不存在隧道,如果产生了分片,则对获取到的路径MTU值进行判断,就可以判断是否存在隧道。如果存在隧道,IPv6报文在经过隧道时作为IPv4数据封装在IPv4报文中进行传输,因此,对于有隧道存在的路径,其MTU值为IPv4的MTU值除去IPv4包头剩下的值。在目前的网络中IPv4的MTU值一般为1500B,常见的IPv6隧道附加20B的IPv4报头,GRE隧道附加24B或28B的报头,而且IPv6的MTU最小值为1280。因此,经过隧道的路径上MTU的值属于{1480,1476,1472,1280}其中一个时,便可以判断存在隧道。
4 结语
目前,IPv6由于它的特性,正在慢慢取代IPv4,针对IPv6协议的一系列研究也在慢慢开展。本文研究了IPv6下网络拓扑发现的一些关键问题,对这些问题提出了初步的解决方案。但限于目前的实验条件,还有很大的不足。随着IPv6的发展,IPv6的网络拓扑发现会越来越完善!
参考文献
[1]Hinden R,Deering S.IP Version 6 Addressing Architecture[S].RFC3513,2003-04.
[2]GELNNK.SNMP in IPv6 context[C]//Proceedings of Symposium onApplications and the Internet Workshops.Orlando:IEEE Press,2003:254-257.
[3]Lu Nengpin,Lin Shuchun.An analysis of internet topology via traceroutesampling[J].Journal of the Chinese Institute of Engineers,2009,32(l):123-128.
[4]杨柳,李震宇,张大方,等.冗余最小化的IPv6拓扑发现方法[J].计算机研究与发展,2007,44(6):939-946.
[5]Gilligan R,Nordmark E.Transition Mechanisms for IPv6 Hosts andRouters[S].RFC 2893,2000-08.
[6]Carpenter B,Moore K.Connection of IPv6 Domains via IPv4 Clouds[S].RFC 3056,2001-02.
[7]ASTICI,FESTORO.A hierarchical topology discovery service for IPv6networks[C]//Proceedings of IEEE/IFIP Network Operations andManagement Symposium.[S..l]:IEEE Press,2002:497-510
以太网物理拓扑发现方法研究 篇4
关键词:以太网,物理拓扑,自动发现,SNMP,MIB
1 概述
随着计算机网络技术和应用的迅猛发展,网络变得庞大而复杂。单纯依靠人工来绘制拓扑图将变得越来越难。因此,为了能科学有效的管理网络,网络拓扑自动发现变得尤为重要并具有现实意义。网络拓扑又分为逻辑拓扑和物理拓扑,逻辑拓扑主要是对网络层设备的发现以及其逻辑关系的确定;物理拓扑主要是对链路层和物理层的设备的发现,设备间的连接关系,如交换机之间的连接以及主机和交换机的连接。对于网络管理,逻辑拓扑是不够的,要通过物理拓扑来查看网内的设备连接关系。目前获得物理拓扑的技术还不很成熟,本文重点讨论用于获取物理拓扑的方法。
2 研究现状
目前实现的物理拓扑发现方法大致有以下几种方法:基于SNMP协议来采集拓扑数据;基于Bridge-MIB中的地址转发表来确定设备间的连接关系、;基于STP协议来确定;基于Cisco的CDP协议来发现邻居设备(针对Cisco设备)。以上方法,在一定程度上能够完成物理拓扑的发现,但是存在以下缺点:对于地址转发表的要求较高,地址转发表应保持完整;并不是所有的交换机都提供STP MIB;只有Cisco的设备才能使用CDP协议,不适合网络中交换机的多样化的需求;并且SNMP协议对设备的MIB信息进行读取操作时有一定延时,对于一定规模的网络,总延时会比较大。
3 改进的物理拓扑发现方法
本文提出了一种改进的物理拓扑发现方法,这种方法是基于SNMP、MIB来实现的。物理拓扑发现经过以下步骤:节点发现、连接关系计算。现在详细叙述各个模块的实现
3.1 节点发现模块的实现
该模块用于发现局域网内所有活动的节点。通常有两种方法:一是通过路由器的MIB中的ip Net To Media Phys Address信息获得活动的节点的IP地址;另一个是使用Ping工具,通过将管理机的IP地址与子网掩码与运算得出该网段内所有可用的IP地址,逐个进行Ping操作,能够Ping通的则是活动的主机。这两种方法都存在各自的优点和缺点。
下面主要介绍第一种方法的过程:
1)开始发现;
2)获取网管主机IP以及子网掩码;
3)获取网管主机网关地址;
4)访问网关路由器ip Net To Media Phys Addre;
5)将活动的IP加入到Active Node队列;
6)Active Node是否为空(如果为空直接结束,否则转7));
7)取出一个队头节点,访问该节点的MIB库(sys Services);
8)sys Services==2(如果为真,到9),为假跳到10);
9)将节点加入到Switch集合中(List);
10)将节点加入到Terminal Node队列;
11)跳转到6)。
3.2 连接关系的计算
为了说明方便,这里定义几个概念、表示符号、相关的数据库:
叶节点:不具有转发功能的节点称为叶节点,如终端主机、服务器、管理终端等。
交换机端口:一个交换机具有多个物理接口,用Sij交换机Si的j端口
转发模式集合:交换机具有多个端口,有的端口可以转发多个不同的MAC,有的仅能转发单一的MAC,用Ui(端口,转发的MAC)来表示i交换机能转发单一MAC的集合。用Mi来表示i交换机能转发非单一MAC的集合
用{R}表示与交换机直接相连的路由器的接口的MAC
终端主机的MAC:用{T}表示终端主机的MAC
以下就是使用SNMP获取地址转发表的具体步骤:
1)设定SNMP请求PDU,绑定dot1d Tp Fd Address(其OID为1.3.6.1.2.1.17.4.3.1.1)这样,收到的应答中能够解析出交换机能够转发的MAC,格式形如:1.3.6.1.2.1.17.4.3.1.1.0.0.12.7.172.8=Hex:00 00 0C 07 AC 08
2)根据交换机能够转发的MAC得到转发该MAC的桥端口:设定SNMP请求PDU并绑定dot1d Tp Fdb Port(其OID为1.3.6.1.2.1.17.4.3.1.2),收到的应答中能够解析出以转发的MAC相对应的桥端口。格式形如:1.3.6.1.2.1.17.4.3.1.2.0.0.12.7.172.8=13
3)根据得到的桥端口号能够得到与该桥端口相对应的交换机端口号:设定SNMP请求PDU并绑定dot1d Base Port If Index(其OID为1.3.6.1.2.1.17.1.4.1.2),收到的应答中能够解析出与桥端口相对应的交换机的端口号。格式形如:1.3.6.1.2.1.17.1.4.1.2.13=2
4)根据以上步骤完成了地址转发表的读取并格式化,最终的格式为[交换机端口,转发的MAC]。
下面针对几种典型的拓扑来说明如何确定连接关系
交换机和路由器相连,并连着终端主机。此时交换机的单一转发集合U中,转发的MAC应包含{R}、{T},这种情况下很容易确定连接关系以及相应的连接端口。
如图1,交换机S1的单一转发集合U1中应包含{R}、{T1},由此即可推断交换机S1与路由器相连且有终端主机(叶节点)与之相连,非单一转发集合M1中应包含{T2}、{T3},由此可以推断交换机S1还连着具有转发功能的设备(如交换机);交换机S2的单一转发集合U2中应包含{T2}、{T3},由此可以推断交换机S2有两个终端主机(叶节点)相连,非单一转发集合M2中应包含{R}、{T1},由此可以判断交换机S2连着一个具有转发功能的设备,综上可知交换机S1和交换机S2的连接关系。
如图2,交换机S1的单一转发集合U1中应包含{R}、{T1},由此可知交换机S1与路由器直接相连,并且有以终端T1与之相连,非单一转发集合M1中应包含{T2}、{T3}、{T4}、{T5},由此可知交换机S1还连着两个具有转发功能的设备(M1中含有不同的转发端口);交换机S2的单一转发集合U2中应包含{T2}、{T3},由此可知交换机S2连接着两个终端T2和T3,非单一转发集合M2中应包含{R}、{T1}、{T4}、{T5},由此交换机S2还与一个具有转发功能的设备相连,又由于M1中能转发的MAC与U2中能转发的MAC具有交集,这可判断交换机S1与交换机S2相互连接;交换机S3的单一转发集合U3中应包含{T4}、{T5},可知交换机S3连接着两个终端T4、T5,非单一转发集合M3中应包含{R}、{T1}、{T2}、{T3},由此交换机S3还与一个具有转发功能的设备相连,有由于M1中能转发的MAC与图2拓扑二U3中能转发的MAC具有交集,故可判断交换机S1还与交换机S3相互连接。
如图3,交换机S1的单一转发集合U1中应包含{R}、{T1},由此可知交换机S1与路由器直接相连并且有一终端T1与交换机S1相连,非单一转发集合M1中应包含{T2}、{T3}、{T4},由此可知交换机S1还与另一具有转发功能的设备相连;交换机S2的单一转发集合U2中应包含{T2},说明有一终端T2与交换机S2相连,非单一转发集合M2中应包含{R}、{T1}、{T3}、{T4},由此可判断交换机S2连着两个具有转发功能的设备((M2中含有不同的转发端口);交换机S3的单一转发集合U3中应包含{T3}、{T4},可知交换机S3连接着两个终端T3、T4,非单一转发集合M3中应包含{R}、{T1}、{T2},由此可知道交换机S3还与一个具有转发功能的设备相连,又由于M2与U3有交集,故交换机S2还与交换机S3相互连接。
以上三种拓扑比较简单,但很具有代表性和现实意义,因为现实中的局域网都可以基于以上三种进行扩展。下面将对以上所述的内容进行总结并提出物理拓扑发现的一般过程,定义Active Node队列用于存放活动的IP地址以表示活动的节点,定义Switch集合用于存放交换机的IP地址表示交换机节点。
3.3 确定连接关系的过程
用流程图详细描述确定连接关系的过程如图4所示。
4 综述
以上所描述的物理拓扑发现过程都是基于现实意义的,当然现实的拓扑可能要复杂的多,但无非是通过各种各样的组合来实现的。本文中所讨论的方法在一定程度上可以降低对地址转发表的要求,改进了现存的方法,当然有些缺点是不可避免的,像是SNMP读取消息的延迟,还有就是由于网络设备IOS版本的不同,读取出来的MIB信息的格式也是不同的,这就要求对信息进行格式化处理,处理成所需要的格式。
总而言之,物理拓扑的发现意义重大,当前需要解决的最重要的问题是:如何使物理拓扑发现的方法规范化、标准化,使之能够适用与不同的拓扑、来自不同厂家的设备。
参考文献
[1]李明江.SNMP简单网络管理协议[M].北京:电子工业出版社,2007:1-40.
[2]李琳,李杰.基于SNMP的网络拓扑发现算法[J].计算机工程与设计,2008,29(6):1346-1347.
拓扑发现 篇5
关键词:拓扑发现,XML
0 引言
在实际应用中, 针对网络管理软件的体系结构特点, 我们通过拓扑发现, 利用当前最流行的Spring+Hibernate框架, 大量采用XML技术和JAVA反射机制, 可以大大提升网络管理系统的通用性, 能够适应网络设备不断更新带来的拓扑无法发现或者发现不完全的弊端, 很好地提高了整个网络管理系统的通用性。本文设计并实现了一套基于XML技术和JAVA反射机制的网络拓扑发现系统, 让用户直观、及时地了解整个网络的拓扑结构和运行状况, 能够帮助网络管理员更好地了解整个网络的规模和运行瓶颈, 为以后的网络扩展和升级提供有力的参考。
1 整体模块设计
作为一个独立的拓扑发现子系统, 应该是一个具有可重用性的子系统, 是能够随着网络设备、网络环境的变化只作简单修改或增删的系统。拓扑发现系统的整体设计, 是在框架系统的基础上进行设计的。
整个拓扑发现系统的模块如图1所示, 系统在客户端框架增加一个拓扑发现业务功能模块, 在服务器框架中添加拓扑资源管理模块、拓扑采集器控制模块、拓扑核心处理模块、拓扑配置文件访问控制模块、拓扑数据库控制模块, 通过这5个模块完成对拓扑数据的核心处理。在采集器框架的基础上增加拓扑采集过滤模块、ICMP采集池、SNMP采集池, 同时预留下扩充采集池模块, 为采集端以后的扩展做好了准备。
根据网络管理系统的一般性要求, 拓扑发现系统的功能基本上包括:
(1) 根据用户要求准确发现网络拓扑, 并将发现的拓扑数据持久化, 在界面上准确地反映实际网络的拓扑连接状态。
(2) 能够实时反映网络的连接状态, 在现有的网络拓扑上能够准确地反映网络设备的各个端口的当前状态, 包括端口是否在位、端口是否到达性能极限、端口是否掉线等。
(3) 可以手动修改拓扑, 可以添加、修改、编辑、删除拓扑图形, 可以修改显示的图标等。
(4) 拓扑图形必须至少能够反映网络的逻辑连接状态, 因此需要分层次显示网络的拓扑, 一级网络显示在最外层, 能够准确反映一级网络设备连接状态, 双击一级网络设备, 可以查看二级网络的连接状况。
(5) 能够提供一些辅助的功能, 包括:拓扑放大缩小、拓扑打印、更换拓扑背景等。
2 拓扑客户端设计
整个拓扑客户端采用MVC模式构建, MVC模式如图2所示。
设计控制器类TopoControl、视图类TopoView、模型类TopoModel, TopoControl类负责捕获TopoView中的从界面出发的动作, 并做出相应的运行。TopoView显示界面, 负责与用户交互, TopoModel负责组织与显示有关的数据结构。
综合使用XML和JAVA反射技术构建易于修改的客户端界面。系统负责从界面配置文件读出并完成界面的各个部件的安装, 当用户在客户端启动拓扑发现时, 界面弹出发现配置的界面, 提供用户输入发现参数, 这些发现参数应该能够方便地增加、修改、删除。当用户完成输入时, 启动发现, 将发现参数递交给服务端。整个客户端的流程如图3所示。
3 拓扑服务器端设计
拓扑服务器端主要包括:拓扑核心处理器模块、拓扑采集器控制模块、资源管理模块、拓扑配置文件访问模块、拓扑数据库访问控制模块。拓扑核心处理器模块是整个拓扑服务器的核心, 它负责管理和调度整个拓扑服务器, 拓扑核心处理器模块控制着拓扑的其他功能模块。包括:拓扑采集器控制模块、资源管理模块、拓扑配置文件访问模块、拓扑数据库访问控制模块。
对于拓扑核心处理模块, 从拓扑客户端获得封装之后的拓扑发现数据之后, 对拓扑数据进行检验和分析, 抛弃不合法的参数设置, 同时通过拓扑配置文件访问模块加载拓扑配置信息, 如果有需要的话, 还可以通过资源管理模块访问系统资源等, 根据发现参数决定启动什么类型和多少采集器, 将数据重新封装成为拓扑消息bean:MessageBean, 将封装之后的参数分别传递给采集器, 开始采集工作。当完成了采集工作, 即设备的数据也就获得了, 拓扑核心处理模块需要将数据组装, 通过拓扑数据库访问控制模块, 将发现的拓扑数据持久化, 同时将拓扑数据通过MRI通信接口上报给客户端加以显示。拓扑服务器的工作流程如图4所示:
4 结束语
本系统采用当前流行的Spring+Hibernate中间件, 综合利用了XML和JAVA反射机制, 大大降低了由于网络设备变化带来的网络拓扑发现系统的风险。经实际应用检验, 该系统确实在一定程度上适应了网络设备的变化, 满足业务不断增长的趋势, 实现对网络管理的动态扩展。
参考文献
[1]张华平, 玄光哲, 于贵平, 等.基于JNI技术应用框架的分析和实现[J].吉林大学学报 (信息科学版) , 2003 (5) .
[2]孙卫琴.精通struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社, 2004.
拓扑发现 篇6
拓扑发现首先要得到整个网络中的各个设备的路由信息, 然后利用这些信息来自动生成网络拓扑图, 在此过程中要充分利用各种路由的搜索算法和有关协议。网络拓扑发现算法主要包括发现路由器与路由器、路由器与子网之间的连接关系以及局域网内部交换机与交换机、交换机与主机之间的连接关系。其中自动发现路由器与路由器、路由器与子网之间的连接关系比较简单, 由于现在绝大多数设备都支持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协议来自动发现网络拓扑结构的方法, 介绍了该算法的主要流程, 同时还分析了此过程中需要实现的一些关键技术。由于在此过程中不需要发送大量探测数据包, 所以不会对网络造成过重的负担。由该方法所构造的网络拓扑能够较真实地反映网络拓扑情况, 为流量测量中测试站点的布置、采样处理和结果分析提供了良好的依据, 收到了理想的效果。
摘要:该文通过对简单网络管理协议的MIB库中的各种表进行分析, 描述了一种基于SNMP的网络拓扑发现方法, 该方法能自动准确的发现指定深度内的所有网络设备的连接情况。该方法不向网络中发送过多的探测数据包, 对网络的流量不产生太大影响。
关键词:MIB,网络拓扑发现,SNMP
参考文献
[1]David Zeltserman.SNMPv3与网络管理[M].潇湘工作实, 译.北京:人民邮电出版社, 2000.
[2]黄锦亮, 杜旭.基于SNMP的以太网拓扑发现[J].计算机应用, 2006, 26 (1) :37-39.
[3]李晓鸿, 张大方.一种以太网拓扑发现算法[J].同济大学学报, 2002, 30 (10) :1173-1177.
拓扑发现 篇7
获得网络拓扑的最简单的方法是让管理员根据实际网络手工绘制拓扑,但是现在网络越来越复杂,网络节点随时都在改变,跟踪一个网络要花费很多时间和精力,网络拓扑发现就是基于这个原因而发展起来的。本文结合了多线程技术的优势,在单线程的网络拓扑算法基础上,提出了多线程网络拓扑发现算法,解决了线程之间互相竞争资源所产生的一系列问题,实现了高效率的网络拓扑模块。
1 模块组成
网络拓扑发现程序的工作线程主要由3个部分组成:Ping模块、ARP模块、主机工作组模块。通过这3个模块可以得到网络拓扑的主要信息。
1.1 总体框架
网络拓扑发现模块是网络测试仪的子模块,拥有较高的模块独立性,通过它能够发现网络中正在工作的网络节点,并获取相应信息。该模块主要由界面层、工作层组成。它们之间的关系如图1所示。
界面层主要负责显示拓扑信息、输入测试信息,例如输入起始和结束IP网段;工作层主要负责管理工作线程,并且把搜集到的网络拓扑信息返回给界面层。
1.2 子模块功能
1.2.1 Ping模块
Ping是利用Internet控制报文协议(Internet Control Message Protocol, ICMP)回显请求和回显应答请求来判断某IP地址是否为活动IP。Ping程序的原理是远程计算机在收到1个回显请求报文的时候,都会返回1个回显应答报文。通过交换回显请求报文中的源地址和目的地址,将类型从回显报文换成回显请求报文,用收到的数据作为发送数据,然后重新计算出新的IP值以及校验和,可以得到正确的回显应答报文[2]。
如图2,Ping模块首先加载Socket接口,设置发送数据和超时响应时间,一般超时响应时间限定在1 000 ms以内,超时时间太长容易影响程序的运行时间。接着通过Socket接口发送ICMP回显请求报文。响应时间未到达时,收到ICMP报文则接受,然后对其进行解析,如果为应答报文则说明该IP地址为活动IP,否则丢弃该报文。若超过超时响应时间则函数返回,并且表明该IP地址不是活动IP[3]。
1.2.2 ARP模块
主机通过以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口[4]。地址解析协议 (Address Resolution Protocol, ARP)为IP地址到对应硬件地址之间提供了一种动态映射。通过Socket接口SendARP,可以得到主机的MAC地址(硬件地址)。
1.2.3 主机工作组模块
远程主机的主机名可以通过Socket接口Gethostbyaddr得到,而工作组名需要对137端口发送UDP请求报文。计算机之间依照互联网传输层TCP/IP协议不同的协定通信,都有不同的对应端口。137端口主要用于“NetBIOS Name Service”(NetBIOS名称服务),它的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。该模块通过对目的主机的137端口发送UDP请求报文获取计算机的工作组信息。工作流程如图3所示。
2 网络拓扑算法
2.1 多线程程序
多线程的执行是并发的,在逻辑上 “同时”执行,如果系统只有1个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,各个模块的运行可以认为是同时的[5]。相对于传统的网络拓扑发现模块,多线程模块可以同时查找多个IP地址,运行效率得到了提高。
2.2 总体流程
1) 在执行网络拓扑发现模块之前,选择全网段还是指定IP网段,还需要选择执行端口。然后,根据可扩展标记语言 (Extensible Markup Language,XML)的配置信息、端口对应IP地址和子网掩码被更新到注册表中。最后再执行网络拓扑发现模块。
2) 在执行网络拓扑发现时,如果发现活动IP立即添加到界面显示,如果立即结束程序则通知网络拓扑模块,关闭所有工作线程,否则正常执行完毕,所有工作线程正常退出。
3) 工作线程退出之后,退出网络拓扑发现模块,发消息通知界面测试结束,接着退出界面工作线程。
总体流程图如图4所示。
2.3 详细流程与实现
1) 添加待测IP地址到数组。
IP地址分为全网段和指定IP段两种情况。
在全网段情况下:
(1) 首先得到本机的IP地址和子网掩码。由于网络测试仪有2个电口,2个光口,在选择不同的方案时,它们对应的IP地址和子网掩码不尽相同。所以,所有的端口信息都保存在XML文件中,用户在选择不同的端口时,需
要从XML读取相应端口配置信息。
(2) 根据IP地址和子网掩码再得到网络地址。网络地址计算方法如下:
设网络地址为IPnet,指定端口地址为IPport,指定端口MAC地址为IPmac,则计算公式为
IPnet = IPport & IPmac (1)
如果IP地址为192.168.1.1,MAC地址为255.255.255.0,则根据以上公式得到网络地址为192.168.1.0。
(3) 根据子网掩码计算出该局域网中可用IP地址的个数。
首先,把子网掩码换算为二进制数,得到其中0的个数,设子网掩码为IPmask,0个数计数器为n,1个数计数器为m且初始化为0,则伪代码为
while(IPmask != 0)
{
IPmask = IPmask << 1;
m++;
}
n = 32 – m;
设可用IP地址数位NUM,则计算公式为
NUM = 2n-2 (2)
减2是因为其中有2个IP地址不能使用,即主机号全0和主机号全1,前者代表该网络的网络地址,后者一般作为广播地址。
例如255.255.255.0按照二进制表达为11111111.11111111.11111111.00000000。0的个数是8,则根据公式28-2总共有254个有效IP地址。
(4) 把可用IP地址添加到数组中。一般人们习惯利用点分十进制表达IP地址,但是为了存储方便,计算机中利用DWORD双字节表示1个IP地址。所以,可以把IP地址分为4个部分,每个部分占用1 byte,下一个IP地址为当前IP地址加1。设网络地址为IPnet,有效IP地址个数为NUM,IP地址数组为IpArray,则添加待测IP地址伪代码为
for(i = IPnet + 1; i <= IPnet + NUM; i++)
{
IpArray.Add(i); //加入IP地址数组
}
指定IP段的情况下,(1) 由于起始IP小于结束IP且待测IP是连续的,可以直接加入待测IP地址数组中。起始IP地址和结束IP地址转换为32 bit的整形值,假设起始IP地址为IPstart,结束IP地址为IPend,IP地址数组为IpArray。则伪代码
for(i = IPstart; i <= IPend; i++)
{
IpArray.Add(i); //加入IP地址数组
}
2) 并行执行工作线程。
在进入工作线程之前设定工作线程数量,然后启动所有工作线程并对待测IP地址数组中的IP地址同时进行测试,为了防止在测试过程中对同个IP地址多次重复测试,或者测试跳过某些IP地址,所以程序必须实现线程之间的互斥。互斥方法为:在工作线程进入Ping模块时,首先得到待测IP数组中首部存放的IP地址。通过Ping模块针对该IP地址进行测试。如果数组为空,则直接退出线程函数;否则需要把IP地址值传递给Ping模块,还需要删除IP数组首部。由于多个线程在同时进行操作,有可能产生这样的现象,即某个线程在未删除待测IP数组首部时,另一个线程同时读取IP地址数组首部的值,造成同一个IP的多次重复测试,而被删除的IP没有进行测试。所以在读取待测IP地址数组首部值和删除IP首部值的操作期间需要利用关键段保证所有工作线程中只有其中一个能够对其进行操作,如此便保证了IP地址数组的正常工作。工作线程流程见图5。
3) 获取网络拓扑相关信息。
工作线程函数封装了Ping模块、ARP模块、主机工作组模块。在这3个模块的共同作用下分别得到活动IP地址、MAC地址、主机名和工作组名。
4) 退出工作线程。
工作线程的退出分为两种情况。
正常结束:线程函数在测试完成以后会循环测试下一个待测IP地址数组首部的IP地址,判断IP地址数组是否为空,如果为空则正常退出。
中途断开:在测试进行过程中,每个工作线程都拥有相同的布尔变量,该布尔变量初始值为FALSE,当该布尔变量的值为TRUE时,线程函数不进行模块测试,直接返回,退出工作线程。
5) 在测试完所有的IP值以后,需要按照IP值的大小对其进行排序。
由于数据结构存储在链表的数据结构之中,可以用插入排序提高排序效率,对存储网络拓扑信息的数据结构按照活动IP值进行排序,然后显示到界面。
3 测试结果与分析
将网络测试仪接入到某网络,网络地址为192.168.3.0。按照全网段方式进行测试,得到测试结果如图6所示。经过手动Ping的验证,发现测试结果真实有效,测试程序能够有效地缩短测试时间,并且在测试过程中断开网络拓扑发现模块所有线程均能正常退出,释放系统资源,保证了程序的正确性、可靠性、有效性。
4 小结
本文实现了一种基于多线程的网络拓扑发现模块。详细阐述了各个模块的功能和它们的实现原理。并结合多线程的优势设计了一种新的网络拓扑算法,多线程保证了程序的高效性,各个线程在执行过程中实现了线程互斥,并能够在程序结束或者中断的情况下顺利地释放资源,保证了程序的可靠性和完整性。
摘要:针对当前网络测试设备中网络拓扑发现运行时间长、效率低等问题,设计了一种在WinCE嵌入式操作系统环境下的网络拓扑发现方案,提出了多线程的实现方法,介绍了软件的设计思想、设计流程、多线程网络拓扑算法。经过测试表明,该方案显著提高了运行效率,具有更好的性能和应用价值。
关键词:多线程,网络拓扑发现,网络拓扑算法
参考文献
[1]谢希仁.计算机网络[M].北京:电子工业出版社,2003.
[2]STEVENS W R.TCP/IP详解:卷一[M].北京:机械工业出版社,2007.
[3]刘杰,王清贤,罗军勇.一种基于ICMP的逻辑层网络拓扑发现与分析方法[J].计算机应用,2008(6):1498-1500.
[4]殷肖用.网络编程与开发技术[M].西安:西安交通大学出版社,2009.
拓扑发现 篇8
关键词:网络拓扑,拓扑发现,路由信息,设备识别
1 引言
网络拓扑为展示网络设备之间的连接关系提供了一种直观、有效的途径,通过网络拓扑图可以判断当前网络设备部署是否合理,同时也为网络故障排除提供了重要的依据。因此,快速、准确地自动发现网络拓扑一直是网络管理研究的重要内容之一。
网络层拓扑发现(即路由拓扑发现)是网络拓扑发现的重要内容,常用算法是根据每个路由设备中路由信息表的下一跳地址获得所有路由设备,并计算出各个路由设备之间的连接关系,但在路由信息残缺或路由信息无法包含完整链路信息时,可能会导致路由拓扑发现不完整,所以需要研究一种网络层拓扑发现的新算法来解决这一问题。
2 路由拓扑发现算法
2.1 基于路由信息表的算法
在MIB库中ip Route Table(.1.3.6.1.2.1.4.21)定义了设备路由信息[1],我们可以通过SNMP协议读取获得,其具体内容有13项,与路由拓扑发现相关的有ip Route Dest、ip Route If Index、ip Route Next Hop、ip Route Type和ip Route Mask等5项(见表1)。
基于路由信息表的算法是典型的深度优先算法,其步骤如下:
(1)读取路由设备ip Route Table信息,初始设备可以手工指定,也可以通过程序所在主机的缺省网关自动设定。
(2)在获得的路由信息中,ip Route Type为4(间接路由标志)的所有路由记录的ip Route Next Hop值即下一跳地址,是与该设备直接连接的其他路由设备地址,将其写入队列A。
(3)依次读取队列A中地址,检查是否已经读取过该地址对应路由设备的路由信息,如果读取过,则从队列A中读取下一个地址,再次检查;如果没有读取过,重复步骤(1)~(2),直至队列A中所有路由设备全部读取完毕。
2.2 存在的问题
在我校校园网中采用上述算法进行拓扑自动发现校园网路由拓扑,如图1所示,除链路1外其余链路均完整发现。
我校为校园网用户提供了2种方式访问中国公众网:一是代理服务器方式(PROXY),即用户通过学校统一部署的代理服务器访问,代理服务器网段为61.134.11.224/28,链路1用于此网段内的计算机访问中国公众网;二是地址转换方式(NAT),即在电信出口防火墙上部署NAT策略,未使用代理服务器的用户其访问公众网的请求经出口路由器和电信防火墙出校。之所以未发现链路1是由于在核心交换机1和电信防火墙上部署了策略路由。所谓策略路由是综合考虑多种因素,如源地址、目标地址、服务等条件之后再决定如何转发数据包的路由。在普通路由信息中并不包含策略路由信息,针对上述原因将电信防火墙上的策略路由改为普通静态路由即目标地址为61.134.11.224/28的下一跳地址为链路1与核心交换机1的接口地址,重新发现后恢复正常,
如果不更改电信防火墙上的策略路由或者是在某些情况下无法更改时,需要搭建测试环境对上述算法进行改进才能发现完整的拓扑,具体如图2所示。
在路由器A和路由器B上只配置策略路由实现各自网段间的访问,在10.10.1.0/24的1台计算机上运行上述算法,无法发现路由器B及其与路由器A之间的链路。分别查看路由器A、B的路由表,每个路由器上有3条路由信息,全部为直连路由(见表2),由于路由器A的路由表中没有间接路由,所以无法通过下一跳地址获得路由器B的地址。
文献[2]中提出在原有算法的基础上通过路由设备探测,在已获得网段内查找有无新的路由设备,再重新扫描路由信息表构建出完整的拓扑。采用文献[2]的算法,虽然可以发现路由B,但仍然无法发现路由器A和路由器B之间的链路。其根本原因是单纯依靠间接路由信息无法确定路由设备之间的链接关系。
3 算法改进
经过上述实际情况分析,之所以无法建立完整的网络拓扑主要有2个原因:一是通过下一跳地址不能发现所有路由设备或链路;二是路由表信息不能完全体现实际连接情况。因此,可结合文献[2]中路由设备探测对原始算法进行修改和完善。
3.1 网络设备类型的探测
网络中所有可能的设备,除安全设备之外,可以分为路由设备、交换设备和计算机(服务器)3类,根据大量的实验分析,可以按照下列参数(见表3)进行判断。
(1)hr System Uptime[3]参数来源于RFC 2790(Host Resource),表示主机距最后一次启动已运行的时间。路由和交换设备通常不支持RFC 2790标准,而个人计算机或服务器在提供SNMP服务时通常会支持。
(2)ip Forwarding[1]参数来源于RFC 1213,表示设备是否提供数据包转发功能(1表示使用,2表示不使用),路由器、多层交换机或启用数据包转发的主机该参数值为1(部分多层交换机在使用2层交换功能时,该参数值仍为1,应将这类设备作为交换设备,而不是路由设备),普通交换机和个人主机该值为2。
(3)ip Addr Table[1]参数来源于RFC 1213,表示设备设置的IP地址信息,路由设备通常除127.0.0.1/8外,至少配置2个以上的地址信息,否则在该位置只需要部署交换机,计算机也可能存在多个地址信息。
(4)sys Services[1]参数来源于RFC 1213,表示该设备工作与OSI第几层,该参数值为十进制,其二进制格式中第几位为1表示该设备提供OSI第几层功能。
if Number[1]参数来源于RFC 1213,表示该设备端口数量,主要用于设备类型区分之后的辅助判断和验证。根据上述分析,组合形成各类设备的判断标准(见表4)。
除设备类型判断标准外,路由设备探测时还需要知道设备的管理地址,这一参数可以在算法步骤1读取设备ipRouteTable时,一并读取ipAddrTable,上述算法完成后,根据ip AddrTable中ipAdEntAddr和ipAdEntNetMask计算出该段地址中所有可以使用的地址,将这些地址作为设备可能配置的地址。
在获得新的路由设备之后,仍需要读取新发现路由设备的ipRouteTable和ipAddrTable,并根据ipAddrTable和判断标准再次进行路由设备探测,直至探测发现的路由设备已全部获得ipRouteTable和ipAddrTable。
3.2 路由拓扑重建
从上述分析可以看出,在某些情况下通过路由信息表中的下一跳地址不能建立完整的路由拓扑,需要另一个判断标准。2个相互连接的路由设备还可以通过具有相同的网络号进行判断,即如果路由器A、B,存在IPA&&Mask A=IPB&&Mask B,则说明路由器A与路由器B之间存在一条链路,其中IPA、Mask A和IPB、Mask B分别为路由器A、B中ip Addr Table中的某个活跃的地址信息即正在使用的地址配置信息。结合路由设备探测,将路由信息表和IP地址信息表综合运用对原始算法进行改进,能够建立完整的拓扑,具体过程如下:
(1)读取网络设备RFC 1213中规定的system、interface、ipforwarding、ip Addr Table以及ip Route Table等5个节点信息,初始设备可以手工指定,也可以通过程序所在主机的缺省网关自动设定。
(2)按照原算法步骤2构建队列A。
(3)按照原算法步骤3直至队列A中所有路由设备的5类信息全部读取完毕。
(4)根据获得的所有ip Addr Table信息,构建设备探测队列B。
(5)依次读取队列B中的地址,按照上述网络设备类型区分标准对IP地址对应的设备进行分类,剔除已读取过5类信息的路由设备,建立路由设备队列R和交换设备队列S(交换设备队列用于交换拓扑发现)。
(6)依次读取路由设备队列R,重复步骤(1)~(3),直至队列R中地址对应设备的5类信息全部读取完毕。
(7)依据步骤6新获得的ip Addr Table信息,再次构建设备探测队列B,重复步骤(5)~(6),直至获得的所有网段全部检查完毕。
(8)根据路由信息表和地址表分别构建路由连接关系图,连接关系用Link
运用上述算法对搭建的实验环境进行测试,能够发现路由器A和路由器B之间的链路,对我校在使用策略路由前后进行测试,也能够发现链路1,构建出完整的拓扑信息,但总体运行时间较原始算法慢,其原因是增加了路由设备探测和SNMP读取的信息量。
4 结语
本研究根据我校综合业务管理系统研发工作,就网络部署实际情况,对原有算法进行改进完善,在实现过程中采用多线程方式,结合广度优先,较快地发现了我校所有路由设备构成的完整拓扑,其中含一条应用策略路由的专用链路。
参考文献
[1]McCloghrie K.Management Information Base for Network Manage-ment of TCP/IP-Based Internets:MIB-II[S].RFC 1213,1991.
[2]何鹏,陆建新,陈肇红,等.针对路由信息残缺的网络拓扑发现与研究[J].计算机工程,2009,35(3):130.