我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:一品彩票 > 反馈边集合 >

网络拓扑发现的算法研究与实现_图文

归档日期:05-11       文本归类:反馈边集合      文章编辑:爱尚语录

  浙江大学 硕士学位论文 网络拓扑发现的算法研究与实现 姓名:黄晓波 申请学位级别:硕士 专业:计算机及应用 指导教师:潘雪增 20060208

  随着网络技术的迅速发展,对网络需求的不断增强,必须要求一个可信、可靠、 安全、稳定的网络平台。网络管理系统已经成为网络系统运行好坏的关键。如何发现 网络拓扑结构,建立有效的网络拓扑模型,在现代的网络管理中起着十分重要的作用。 本文首先阐述了网络拓扑发现的概念和分类,讨论了网络拓扑发现所需要考虑的 问题,并介绍了SNMP协议在网络拓扑发现中的应用。在分析了已有的拓扑发现算法 的基础上,采用了一种有效的通用的网络拓扑自动发现算法。算法使用SNMP协议采 集网络内各种网络设备中MIB库保存的信息,根据一些设备连接关系判定规则处理所 获取的拓扑信息,确定路由器、交换机和主机之间的连接天系,构造网络层和物理层 拓扑结构图。在关键网络设备支持SNMP代理的前提下,本文所使用的算法具有更好 的稳定性,运算简单,获得的网络拓扑图更加准确,具有很强的叫操作行。 最后,在分析基于SNMP协议的拓扑发现算法的基础上,介缁了一种刚络拓扑图 形的分层次的构造和显示技术,网络设备按照自顶向下的层次化结构显示,使得整个 拓扑图形清晰、明了。文中对该方法的设计思路和关键技术进行了详细的阐述。

  In large and constantly evolving networks,it is difficult

  is actually laid out.Yet Knowledge of the up—to—date topology of crucial to

  number ofcritical network management tasks. the

  of the existing automatic topology discovery techniques,this

  new topology discovery algorithm for heterogeneous TCP/IP networks

  information in routers,switches and hosts under the situation that do not generate traffic in the network in in

  determine the interconnection between directly connected peers

  network,to produce the IP?level and link—level topology map.We have tested

  internal network and we verified the result,it has accurately etermined the different networks using

  configurations. A new visualization method,which applies to the display of the topology based hierarchical structure,was proposed.It visualized the topology based

  devices being separated from the minor devices in the different

  devices were hierarchically displayed

  in implementing the method were presented.

  Key words:Network management,Topology discovery,Routing table,Spanning tree,

  信息社会对计算机网络的依赖,使得计算机网络本身运行的可靠佳变得至关重要, 同时,也对网络管理提出了更高的要求。 从总体上说网络管理就是监视和控制一个复杂的网络,以确保其尽可能长时间地 正常运行,或当网络出现故障时尽可能的发现故障和修复故障。按照OSI的定义,网 络管理主要包括五个功能域【1】:故障管理、配置管理、性能管理、安全管理和计费 管理。五犬功能域之问既相对独立,又存在着联系。在五大功能域中,配置管理是基 础,它的主要功能包括发现网络的拓扑结构、监视和管理网络设备的配罱情况。而监 视和管理网络设备的前提是已知网络的拓扑结构,因此,网络拓扑发现成为网络管理 的基础。 网络拓扑是指网络上实体元素间的相互连接。网络拓扑发现的主要目的是获取和 维护网络节点的存在性信息和它们之间的连接关系信息,并在此基础上绘制出整个网 络拓扑图。网络管理人员通过拓扑结构信息能对网络故障进行定位,发现网络瓶颈, 从而优化整个网络【2】。 网络拓扑从不同的抽象层次上可分为逻辑网络拓扑与物理网络拓扑。逻辑网络拓

  扑指的是网络层(对应于OSI模型的第三层)设备及其之间的连接关系,即路由器到

  路由器、路由器接口到子网的连接关系(如图1.1所示)。物理网络拓扑指的是一个通 讯网内部实体的实际物理连接(对应于OSI模型的第二层设备的连接),即在原有网络 层拓扑的基础上增加交换机到交换机、交换机到路由器、交换机到主机之间的连接关 系(如图1—2所示),其中,发现交换机到交换机之间的连接关系是物理网络拓扑发现 的关键。

  网络拓扑发现,是人们探测和研究网络的一个重要方面。它对于网络管理、不同 流量模式下的网络行为研究、下一代网络协议的设计等有着重要的作用和意义: 首先,网络拓扑发现是网络管理系统的基础。网络拓扑发现能够分层显示运营网 络的拓扑结构,并提供拓扑节点的级联菜单,为网络性能管理、故障管理和配置管理 等提供支持。很多重要的网络管理任务,如网络资源管理、服务器部署、事件关联以 及故障分析等都是以网络的拓扑结构为前提的。网络拓扑发现能够全面、动态地反映 网络的运行状况,为用户监视整个网络提供强有力手段。 其次,网络拓扑发现对于网络流量测量有着重要作用,其本身就是网络测量的一 个重要组成部分。网络拓扑发现对于测量方案的设计,测量站点的布置也起到重要的 作用,它可以帮助分析测量方案是否合理,确定测量站点的数目及其具体位置【3】。 最后,随着局域网交换技术的发展,予网内部设备间的连接变的越来越复杂,选 择和实现局域网加重了把它们嵌入总的网络管理体系结构能力的负担。对物理网络拓 扑发现能力的缺乏直接导致了对子网内设备管理的疏忽和草率,所以,网络管理系统 也急需一种物理网络拓扑发现的工具。

  最初的计算机网络规模比较小,通常在网络建设之初,由网络管理员手工绘制网 络拓扑图。随着计算机网络规模的发展,手工绘制网络拓扑图己经成为一件非常烦琐 甚至是不可能的工作。 于是,人们开始了网络拓扑的自动发现的研究。在网络层,主要是从路由表中提 取拓扑信息。1990年,J.D.Case等人提交了名为“一种简单网络管理协议”(SNMP) 的RFCll5718】,1991年K.MeCloghrie和M.Rose在RFCl21314】中提出了基于TCP/IP 协议的因特网管理信息库MIB.II,这些都充分考虑了网络管理中的拓扑发现需要。1996 年,Glenn Mansfield等人提出了一种基于SNMP的网络层拓扑发现算法【5】,根据这 一算法,有许多相关的拓扑发现软件产品问世,比如HP公司的OpenView和IBM公

  司的Tivoli等。然后,又有很多的学者开始对拓扑发现算法在效率和适用性上作了改

  进。 由于基于SNMp的网络层拓扑发现算法的局限性在于网络内的设备必须支持 SNMP代理,所以人们又开始利用路由协议来发现网络层拓扑。AInitn Shaikh等人提出 了一种通过监听网络中的OSPF数据包来获得网络拓扑的方法【6】,这种方法的优点 是可以绕过设备不支持SNMP带来的麻烦,同时可以避免向网络中注入大量数据包, 从而减轻了网络的负担。 网络层的连接仅包含IP网络中连接的~小部分。随着进~步使用交换机来提高子 网内网段之间的带宽,工作在数据链路层的交换机在网络结构中所占的比例越来越大 了。在这种情况下,如果还不对第二层设备及连接进行发现,网络管理程序对连接和 设备中潜在问题的解决能力将大大下降。在一些关键网络中,这将是致命的弱点。对 局域网内物理拓扑的发现,是完成诸如流量管理、事件关联和故障分析等许多关键网 络管理任务的先决条件。另外,随着局域网内网络设备类型的增多,网络节点间的连 接形式变得越来越复杂,以及VLAN技术在局域网中普及,这些都对传统的网络拓扑 结构产生了巨大的影响,同时也增加了网络拓扑结构发现的难度。 对于物理网络拓扑的发现,主要是利用ARP协议和1CMP协议来发现局域网中的 设备。SNMP的出现也为物理网络拓扑发现算法提供了有力的工具,Hwa.Chun Lin等 人在参考文献【7】中利用Bridge MIB(RFC 1493)的地址转发表来获取交换机的连接 信息,但是该方法的准确性不高。Yuri Breitbart等人在参考文献【9】中也提出了-fo 基于Bridge MIB的拓扑发现算法,并给出了严格的数学证明,但是该方法对网络环境 要求太高,在实际网络中难以实现。之后,BruceLowekamp【10】、郑海【11】等人改 进了Yuri Breflbart的算法,使的算法对网络环境的要求显著降低。 网络拓扑自动发现是一个非常耗时的过程。拓扑发现软件的结构大多都是集中式 的,往往在一台机器上安装之后来探测全网的拓扑。目前,人们开始改变拓扑发现的 软件结构,利用分布式的结构,从多个地点同步探测网络拓扑,从而提高效率。Romit RoyChoudhury等人提出了一种分布式的拓扑发现软件体系结构【121,对于IP网络拓 扑发现也有重大意义。 随着对IPv6网络研究的深入,人们开始关注IPv6网络的拓扑自动发现。由于IPv6 协议中地址结构等方面的变化以及1Pv6网络中庞大地节点数量,适用于IPv4网络的拓 扑发现技术和方法必须做出相应地修改才能应用于IPv6网络环境中。参考文献【13】 详细讨论了IPv6网络给拓扑发现带来了一些新问题。 综上所述,对于基于SNMP协议的网络层的路由拓扑的发现,算法相对比较成熟。 而对于子网内的物理拓扑的发现,由于它是目前网络拓扑发现领域内一个新的研究方 向,而且发现机制也不同于网络层拓扑,发现难度比较大,到目前还没有成熟的技术

  和方法。 在本文中,在对已有算法进行深入的研究和讨论的基础上,提炼了网络层拓扑发 现的核心算法;在分析比较现有基于交换机地址转发表的物理拓扑发现算法的基础}:, 提出了一种基于交换机生成树的算法,利用SNMP获取交换机MIB中的生成树信息, 从而推导出物理网络拓扑结构。同时阐述了网络拓扑图的构造和显示技术,并进行了 实际开发中的实践经验总结。

  本文共分为六个章节,内容安排如下: 第一章绪论,阐述了论文的选题背景,分析了网络拓扑发现在网络管理中的重要 性。在分析了国内外拓扑发现技术的研究现状的基础了,阐述了本文的主要工作。 第二章SNMP协议简介,“工欲善其事,必先利其器”,在讨论详细的算法之前, 先对SNMP协议的体系结构、SNMP协议的数据包格式以及为了减少编程难度而使用 的SNMP的开发工具包进行了概要的说明和实例演示。 第三章逻辑网络拓扑发现的算法,是本文的一个重点内容。首先分析了现在流行 的几种基于DNS、OSPF、ICMP等协议的逻辑网络拓扑算法,并总结了它们各自的优 缺点,在此基础上提出了一种基于SNMP协议的,通过读取路由器路由表MIB对象的 内容,从中分析处逻辑网络拓扑结构的算法,给出了算法的详细流程,并进行了实际 丌发中的经验和技巧的总结。 第四章物理网络拓扑发现的算法,也是本文的--loo重要内容。首先进行了以太网 基础知识的阐述,详细分析了算法产生的理论基础和算法的思想。提出了利用交换机 地址转发表和和生成树端口状态表生成物理网络拓扑结构的算法的详细流程。并给出 了整个网络拓扑结构发现系统模型。基于生成树协议的物理拓扑发现,算法简单,并 具有很强可操作行。 第五章网络拓扑图形的构造和显示,分析了网络拓扑图形的构造技术在网络拓扑 发现系统中的重要地位,提出了一种分层次的网络拓扑图形的构造和显示过程。对于 网络拓扑图中出现的环型拓扑引用了一种基于抽象点的环型拓扑的显示算法。 第六章中,进行了总结,并展望下一步应该进行的研究工作。

  SNMP(简单网络管理协议)是目前最流行的一个网络管理协议。作为应用层上的

  协议,它主要通过一组Interact协议及其所依附的资源提供网络管理服务。利用SNMP 管理工作站可以远程管理所有支持这种SNMP的网络设备,包括监视网络状态、修改 网络设备配置、接收网络事件警告等。SNMP标准随着网络技术的发展和应用需求的 变化不断得到改善,它的发展经历了三个阶段【43】: 1990年1ETF(互联网工程任务组)在RFc 1157中正式公布了SNMP,又称为 SNMPvl。它具有以下的特点;

  简单性:相对于其它网管标准而言,SNMP容易实现且成本较低。 可伸缩性:可管理绝大部分符合Interact标准的设备。

  ?扩展性:通过定义新的“被管理对象”,可以非常方便地扩展管理能力。 ?健壮性:即使在被管理设备发生严重故障时,也不会影响管理者的正常工作。 SNMPvl与TCP/IP协议簇的其它协议一样,没有考虑安全问题。于是,IETF在 1992年开始了SNMPv2的丌发工作。1993年,SNMPv2成为提案标准,即RFCl4xx 系列。此时有多个研究小组开始建造SNMPv2原型系统,但在实施过程中,他们发现 SNMPv2比原先预想的要复杂得多,失去了“简单”的特点。待开发计划结束时,IETF 把几乎所有与安全相关的内容又从SNMPv2中删除,从而形成了现在看到的SNMPv2c 草案标准,即RFCl9xx系列。 1997年4月,IETF成立了SNMPv3工作组。SNMPv3的重点是安全、可管理 的体系结构和远程配置。SNMPv3主要有三个模块:信息处理和控制模块、本地处理 模块及用户安全模块。 信息处理和控制模块(Message

  它负责信息的产生和分析并判断信息在传输过程中是否要经过代理服务器等。本地处 理模块(Local

  访问控制是指通过设置代理的有关信息使不同的管理站的管理进程在访问代理时具有 不同的权限。用户安全模块(User Security Model)提供认证和数据保密服务,与SNMPvl 和SNMPv2相比,SNMPv3用户安全模块增加了三个新的安全机制;认证、加密和访 问控制。 SNMPv3保持了SNMPvl和SNMPv2易于理解和实现的特性,同时还增强了网络 管理的安全性能,提供了保密、认证和访问控制等安全管理特性。SNMPv3『F在逐渐 扩充和发展,新的管理信息库还在不断增加,能够支持更多的网络应用。

  SNMP采用“管理进程(Mallager)——代理进程(Agent)’’模型来监视和控制可管理

  SNMP管理模理由以下四个关键部件组成: (1)SNMP管理站(SNMPManager) 管理工作站是运行有J删络管理进程的主机,负责网络管理的全部监视和控制工作。 它向代理发送管理操作的指令并接收来自代理的响应。

  其实代理就是运行在被管设备上的应用程序。被管设备可以是工作站、路由器、 网桥、中继器、网络打印机或者其他的网络设各。代理负责侦听来自网络管理站的命 令和请求,并褥其转换成本地设备的指令,以完成管理站要求的操作或将请求的数据 信息返回给管理站。此夕卜,代理还可以主动向网络管理工作站报告本地被管设备上发

  MIB(Managemeal InformationBase)是对于通过网络管理协议可以访问的信息。

  这些信息更具体的理解为阿管中的被管资源,而被管资源是以对象来表示,每一个对 象表不被管资源某一方面的属性,这些对象的集合形成MIB。 (4)SNMP管理协议 管理协议描述了管理站和代理之间的数据通信机制。在SNMPvl巾支持以下五种 基本的操作/响应原语,其中,管理站可以发出的报文是: ?GetRequest:提取请求,获取指定MIB对象的值。 ?GetNextRequest:提取F一个请求,获取指定MIB对象的下一个对象值。泼 ?GetNextRequest:提取下一个请求,获取指定MIB对象的下一个对象值。该

  ?Trap:代理发现了预定义的异常事件发生时主动发给管理站的。 在SNMPv2和SNMPv3中增加了三种操作,即GetBulkRequest、InformRequest和 Report。SNMPv3使用和SNMPv2一样的协议数据单元(PDU),但是它们的数据报文 格式是不同的。 SNMP协议的工作原理是管理站和代理之间以SNMP报文形式交换信息,管理信 息的交换可以由管理站以轮询开始,或由代理发送陷阱报文开始。管理站在需要获取 对象值时向代理发送GetRequest或GetNextRequest报文,设置对象值时则发送 SetRequest报文。代理负责将管理站所需信息从MIB库中获取,或按照管理站发出的 命令对代理所在的被管对象值进行相应的设置,并均会以OetResponse报文应答。代理 也可以主动向管理站发送Trap报文。报告M1B值的重大变化或其它重要事件。

  素信息的数据库,这些信息更具体的理解为网管中被管资源。网络管理中的被管资源 是以对象来表示,每一个对象表示被管资源某一方面的属性,这些对象的集合形成管 理信息库。 Inlemet管理机构定义了MIB,它有两个版本,一个是MIB.I,另一个是MIB.II。 MIB.I是为SNMP的最小实现来设计的,所定义的大多数对象是为了实现配置管理和 故障管理,特别是对路由器和网关。MIB.II(RFCl213)对MIB.I进行了修改,从而 拓宽了SNMP的管理范围,它是当前使用最为广泛的通用标准的网络管理信息库。 现实中,管理信息库MIB以文件形式出现,采用ASN.1(Abstract

  One)抽象语法【151来进行描述,对于每个管理对象它都用文本来描述,用户可以用 记事本、写字板等一些编辑器来打开或编写MIB文件。网络管理系统所有高层的管理 功能都是建立在对从管理信息库MIB中所获取数据的统计分析之上的,因此,管理信 息库MIB是实现网络管理的基础。

  MIB是一个树形结构的数据库,树中的每一个节点都是一个对象,MIB就是由一 系列的对象组成,如图2-2所示。

  ROOT为MIB树的根节点,它有下面3个子树: ?ISo(1):由ISO管理。

  ?ISO-joint-CCITT(3):由ISO和CCITT共同管理 在ISOO)节点下有一些其它的子树,其中org(3)是ISO为其他组织定义的子树。 在org(3)子树下,一个值得引起注意的特殊节点是dod(6),该节点被分配给了美国国防

  在RFCI 155【161中指定了dod(6)节点下的一个子树intcmet(1)分配给Internet 体系结构委员会来管理。在internet(1)节点下包括了四棵子树: (1)directory(I)予树 该子树保留给OSI目录服务,以备将来使用。 (2)mgmt(2)子树 该子树用于那些在IAB(Intemet体系结构委员会)所批准认可的管理信息库的定 义,目前已有两个版本:MIB—I和MIB—II。由于在任何配置中都只能有~个MIB存 在,因此两个版本的MIB提供相同的对象标识符。现在M1B-I已被MIB—II所取代。 在mgmt(2)@N{的MIB(2)子树下定义了目前使用最广泛的各种对象,一般称它们

  interfaces组:提供网络实体的物理层接口的信息,包括配置信息和每个接[f 上发生的事件的统计信息。

  ?at组:设备的地址转换信息(如ARP映射),在MIB—II下,该组内容被包括 在岫组中。 ?ip组:提供了一个网络节点中有关IP实现和操作的信息。在网络管理系统中, 该组中的内容是使用最广泛的。

  icmp组:包括了有关ICMP的实现和操作的信息。保存了对各种类型的1CMP 信息的接受和发送的统计结果。

  ?top组:主要用于对流量控制、丢失重传和网络拥挤等问题的解决。由~些 TCP的系统对象和一个记录当前TCP连接的表组成。 ?udp组:提供有关UDP发送和接受的数据包信息。

  ?snmp组:包括有关SNMP实现和操作的信息。 MIB-2子树下还有一个比较特别的子树dotldBridge(17),dotIdBridge子树定义了

  802.1D一1990关于阱太网桥接网络中的信息在MIB.II中的实现,又被称为 MIB”。在物理网络拓扑发现算法中的一些关键数据就是被保存这个子树

  信息库中的,该子树部分的内容在RFCl493中定义。 (3)experimental(3)子树 该子树下包含了在Intemet试验中使用的对象。 (4)private(4)子树

  下的enterprises(1)节点。该节点下的每个子树分配给一个企业,而企业必须先向IAB 登记注册它们自己的厂商代码,然后就可以在该代码下创建他们自己的对象。 M1B-2子树下的部分对象的结构示意图如图2-3所示。

  MIB树中的每一个对象都包括两个内容:对象标识符(object identifier,OlD)和 一个简短的文本描述,并且每一个对象的这两个部分,在整个树中都是唯一的。 对象标识符由句点隔开的一组整数,它指示了对象在MIB树中的准确位置。比如 对象{1.3.6.1),也可以写成{isoO)org(3)dod(6)1),它的文本名称是“intemet”。 树中的对象可以分为两种:非叶节点对象和叶节点对象。 非叶节点对象一般作为被管对象的父节点而存在,它的定义使用关键字OBJECT

  IDENTIFIER,如:myBranch OBJECTIDENTIFIER::={parentBranch 10}。 叶节点对象又称为“被管对象”,它就是网络管理系统中实际要访问的对象。被管 对象也有两种:简单对象和表对象。比如MIB.II中ip组就包含了20个简单对象和3 个表对象。 (1)简单对象的定义 简单对象的定义使用关键字OBJECT—TYPE,通常的,还包含其他4个子句: objec[nalrte

  DESCRIPTION(description) ::={pmentobject number)

  (2)表对象的定义 表对象是个很特殊的对象,表中包含“行”(又叫表目),行又包含“列”。列对象 才是实际的被管对象,它的定义语法和简单对象的定义语法相同,唯一要注意的是列 对象的父对象是表目对象,而不是表对象。

  表和表目都是不可管理的对象——它们的ACCESS子旬的值都是‘‘not-accessible”。

  并且,在表目对象的定义中,必须包含子句INDEX,该子旬指定一个(或多个)列为 索引列。ASN.1对表对象和表目对象的定义有以下规定: ?在表对象的文本名称中必须包含关键字“Table”,如名字为“myTabte”:

  在表目对象的文本名称中必须包含关键子“Emry”,例如“myEntry”; 表对象的定义不允许嵌套,即不允许在一个表对象中定义另一个表对象。

  “这是一个名为myTable的表对象” //定义表对象,它在树中的位置是1.3.6.1.2.1.6.13

  “这是一个名为myEntry的表目对象” //定义表目对象,它在树中的位置是1,3.6.1.2.1.6.13.1

  myColumnl OBJECT-TYPE SYNTAX ACCESS INTERGER read—only mandatory

  NmyColumnl列定义,它的位置是1.3.6.1.211.6.13.1.1

  myColumn2 OBJECT_TYPE OCTET STRING read—only

  mandatory ,『myColumn2列定义,它的位置是1.3.6.1.2.1.6.13.1.2

  SNMP协议的应用涉及到SNMP数据报文的格式和实现SNMP协议操作原语的协

  议数据单元(PDU)的编码格式。SNMP协议发展至今存在着三个版本。它们之间是 不尽相同的。 SNMPvl和v2版本是目前网络设备对SNMP协议支持最多的两个版本,SNMPv2 在数据报文和PDU格式方面,除了Trap格式与vl版本不同以及比vl版本增加了 lnformRequest、GetBulkRequest和Report三种协议操作外,其余部分都相同【1 7】。 SNMPv3和SNMPv2使用了相同的协议数据单元(PDU),但在SNMPv2的基础 之上增加了安全和管理机制,所以SNMPv3定义了一种全新的协议数据报文格式【tsl。 为了保证最广泛的设备能被网络拓扑发现,本文实现的基础是基于SNMPvl版本 的,所以下面只对SNMPvl的报文格式和PDU格式做简单的描述。 SNMPvl的报文格式如图2-4所示,它由三个部分组成:

  Version:标识SNMP消息的版本号,对于SNMPvl来说,版本号为0。 Community:共问体名称。共耐体就是一个字符串,作为管理进程和代理进 程之间的明文口令,每个字符都放置在数据包的一个字节中。常用的是6个 字符“public”。

  ?PDU:协议数掘单元。该部分包含特定信息,用来说明包的PDU类型,女“ GetRequest、SetRequest等。每个SNMP数据包只包含。个PDU区域,陔区 域只包含…种PDU类型。

  SNMPvl具有五种基本的操作,也就是它有五种PDU类型。其中GetRequest、 GetNextRequest、GetResponse和SetRequest都使用相同的PDU格式,如图2-5所示。

  ?PDUType:PDU类型。占用1个字节,该值用来说明数据包使用的PDU类型, 如GetRequest命令的值为0xA0,GetNextRequest的值为0xAl。

  RequestlD:请求标识符,}白管理进程设黄的一个4字节的整数值。代理进程 在发送GetResponse报文时也要返回此请求标识符,使得管理进程能够谚{别

  ErrorStatus:错误状态。由代理进程响应时设置的l字节的整数值,值的范围 在0到5之间。

  ErrorIndex:错误索引。由代理进程响应时设置的1字节的整数值,它指明有 差错的变量在变量列表中的偏移。

  VarBindList:变量绑定列表。指明一个或多个被管对象的名和对应的值,在 GetRequest或GetNextRequest报文中,被管对象的值应忽略。

  当代理检测到预定义的事件发生或出现错误时,会主动发给管理端Tt、ap报文以通 知该信息,’trap报文的格式如图2-6所示。

  Enterprise:企业名称,即填入Trap撤文的网络设备的对象标识符。此对象标

  识符肯定是在MIB库中的enterprise结点{1.3.6.1.4.1)下的一棵子树上。 ?Agent—address..代理的IP地址。 ?generic-trap:SNMP预定义的标准事件的编码,该值的范围在1到6之间。

  specific。code:为企业自定义的事件编码,只有当generic.trap的值为6时, 该项才有意义,否则为0。

  ?timestamp:时问戳。指明白代理进程仞始化到trap报告的事件发生所经历的 时间,单位为10ms。

  SNMP API 网络管理系统的设计实现(包括基于SNMP协议的网络拓扑发现)的基础就是是利

  用SNMP协议向网络设备发送SNMP get请求,因此实现SNMP协议就成为整个系统实现 的关键一步。当然可以自己构造SNMP数据报文,但是这样难度很大,也没有这个必要。 因为许多公司都提供了SNMP的开发工具包(SNMP API),可以利用这些开发工具包来 开发网络管理系统(包括网络拓扑发现)应用程序。

  目前比较流行的SNMP的开发工具包是CMU大学的UCD—Snmp[261,HP公司 的snm口++【27】,Advent公司的JSnmp【28】和Microsoft公司的WinSNMP【29】, 它们各有优缺点。

  UCD—Snmp源自于卡耐基.梅隆大学(Carnegie Mellon University)的Snmp软件包

  CMU Snmp 2.1.2.1,由加州大学Davis分校(UniversityofCalifonia atDavis)IF发与维护,

  所以命名为UCD-Snmp。2000年11月UCD—Snmp项目转到由SourceForge (www.sourceforge.net)管理,并更名为Net-Snmp。UCD—Srmap 4.2是以UCD-Snmp 命名的最后的一个主要版本,而以后大的修改版本将以Net-Snmp命名,并发布为5.x。 UCD—Snmp软件包提供了尽可能广泛的平台支持,与平台的无关性最好,功能最 为强大,但它也更复杂,使用的难度较大。

  snrn口++是HP Hewlet—Packard Company开发的SnmpAPI。它是一个c++类库,基

  于面向对象语言,与SNMP结构融合的较好。s姗p++不是重新开发的Smnp

  是在利用现存的SNMP类库进行封装的,它不仅可以支持Windows操作系统,而且支

  Snmp++的最大的特点是它的使用简便性,它封装好了一些使用简单的函数接口,

  Advent公司开发的JSnrnp软件包与SNMP的结构融合很好,它基于Java语苦, 是在Java环境下最流行的SNMP协议的开发工具包。 (3)W-nSNMP WinSnmp是由Microsoft公司开发的用于Windows操作系统下SNMP协议驱动函 数库。在Wind0WS下实现SNMP协议的编程,可以采用Winsock接口,在161,162 端口通过uap传送信息。在Windows 2000中,Microsoft已经封装了SNMP协议的实 现,提供了一套可供在Windows系统下开发基于SNMP的网络管理程序的接口,这就 是WinSNMPAPI。 WinSNMP API的最大的特点就是使用简单和易扩充性,下面就柬介绍WinSNMP API的编程模式。

  总的来说,WinSNMP以函数的形式封装了SNMP协议的各部分(在.NET2003开 发环境中体现为wsnmp32.dll、wsnmp32.1ib和Winsnmp.h),且针对SNMP协议使用 UDP封装的特点而设置了消息重传、超时机制等。 1、winSNMP发送请求消息 WinSNMP发送请求消息的过程可以分为三个部分,主要有:WinSNMP的初始化、 PDU的创建和信息的发送。 (1)WinSNMP的初始化 ?调用SnmpStartup函数启动WinSNMP。

  调用SmnpCreateSession函数创建一个会话session。 调用SnmpSetRettansmitMode函数设置重传模式。

  其中第3、4、5步都是对本地数据库的操作,完成了对WinSNMP相关参数的设

  (2)协议数据单元PDU的创建 在创建PDU之前,我们必须先创建变量绑定表(Varbindlists)。

  如:HSNMP_VBL m—hvbl=SnmpCreateVbl(session,&Oid,NULL);

  调用SnmpSetVb函数往变量绑定表中添加变量绑定。 如:SnmpSetVb(m_hvbl,0,&Oid,NULL);

  调用SnmpCremePdu函数创建协议数据单元。在这个函数中,必须设定

  m_hpdu=SnmpCreatePdu(session,SNMP—PDU—GET,NULL,NULL,NULL,m—hvb峨

  (3)发送消息 首先调用SmupStrToContext和SnmpStrToEntity函数创建共同体(community)字符 串和代理entity,然后调用SnmpSendMsg函数发送信息。 2、WinSNMP接受响应消息 winSNMP接受响应消息的步骤如下:

  调用SnmpRecvMsg函数接收数据。 调用SnmpGetPduData函数从PDU中析取出数据。 调用SnmpCountVbl获得变量绑定列表中变量绑定的个数。 调用SnmpGetVb函数取得PDU变量绑定表中每个变量绑定的OID及其对应 的值,可以指明该变量绑定在变量绑定表中的位置。

  如:int nCount=SlmapCountVbl(varbindlist); for(int index=l;i<=nCoum;i++)

  SnmpGetVb(varbindlist,index,&Old,value[i]);

  调用SnmpOidToStr函数将Oid转换为字符串,并将接收到的Oid与发送数 据包的各OID做比较,以决定各自值的归属。

  GETNEXT是SNMP中用来读取表格变量的一个操作。在WinSNMP中,我们可 以通过snmpCreatePdu(session,SNMP_PDU_GETNEXT,NULL,NULL,NULL,m_hvbl))柬 创建一个GETNEXT操作的PDU。但关键的问题是如何对这个表格遍历,即如何判断

  比如读取路由表ipRouteTable中ipRouteNextHop列的值,该列在MIB中的 OID是f1.3.6.1.2.1.4.21.1.7),可以把接收到的OID的前20位与 “1.3.6.1.2.1.4.21.1.7”作比较,假如不等,就潞明这--N已经结束,然后把 得到的数据送去进一步处理。

  如果相等,说明该列还没有结束,就可以创建一个新的会话session或使用原

  来的会话继续发送GEXTNEXT操作,从而实现对路由表中的某一列的遍历。

  同样的,如果把接收到的OlD的前18位与“1.3.6.1.2.1.4,21.1”作比较,如 果不等,说明路由表已经结束,否则就继续发送GEXTNEXT操作,从而实 现对整个路由表的遍历。

  逻辑网络拓扑发现是指找出网络层节点之间的连接关系,包括路由器与路由器、 路由器与子网之间的连接关系,因此也称为路由拓扑发现。反映在所生成的拓扑图中, 将只包括路由器与子网两种节点,并且子网节点至少与它的缺省路由器相邻。 目前在网络拓扑发现领域,逻辑网络拓扑发现是被研究最多的一个方面,并且涉 及的问题也最多。由于有关网络拓扑发现的规范和文档比较少,使得拓扑发现的研究 缺少可供参考的标准。因此,目前很多发现方法都是基于一定的前提,完成~定范围 内的拓扑发现。另外,网络拓扑结构是一种重要的网络信息,因而会涉及网络安全方 面的问题。例如,路径信息有时会因为不具备访问权限而无法获取,或者探测数据包 被防火墙过滤等等。所有这些对网络拓扑发现都造成了一定程度的影响。 路由器的一个端口可以连接一个子网,也可以同其他的路由器相连。当一个予网 内的某一个主机向其他子网发送数据时,数据包首先到达本予网的缺省路由器,然后 缺省路由器检查数据包中的目的地址,以决定是否转发给路由表中的下一个路由器, 下一个路由器再进行类似的处理。依此类推,数据包将最终到达目的主机。从上述路 由器的工作原理可以得知,无论采用何种路由协议,网络中的路由器都明确知道其邻 近的路由器,这就是所有逻辑网络拓扑发现算法的理论基础。 下面将对目前常见的几种逻辑网络拓扑发现算法分别进行讨论,并分析它们的优 缺点,最后详细描述了一种基于SNMP协议的逻辑网络拓扑发现算法。

  域名服务器(DNS)维持了一个域内每个名字到其IP地址的映射关系,大多数域 名服务器通过域名转换命令(zone transfer)命令可以返回该域内名字的列表。因此理 论上讲,利用DNS的这一特性可以发现域内的所有的主机和路由器设备。 算法首先对域内的DNS服务器进行zone transfer操作,得到域内所有主机和路由设 备的IP地址列表;然后对所有的lP地址进行广播Ping,以删除列表中无效的名字; 最后利用一种子网猜测算法【191得到子网地址及其和路出器之间的连接关系。 这种算法过分依赖于DNS

  态主机配置协议(DHCP)获取IP地址的主机并没有DNS服务。另外,处于安全方面

  考虑,网络管理人员会关闭DNS域转换服务,使得这种拓扑分析方法受到很大限制。

  RIP协议(选路信息协议)是Internet中常用的路由协议,它采用距离向量算法, 即路由器根据距离选择路由,所以也称为距离向量协议。路由器收集所有可到达目的 地的不同路径,并且保存有关到达每个目的地的最少站点数的路径信息,除到达目的 地的最佳路径外,任何其它信息均予以丢弃。同时,路由器也把所收集的路由信息用 RIP协议通知相邻的其它路由器。因此,可以通过RIP协议直接与路由器交互,获取相 关路由表信息,从中分析提取出路由拓扑【20】。

  该算法性能高、速度快而且发现结构准确,但是算法实现的前提是首先要实现RIP

  协议(包括协议的各种命令原语、组装和解析协议数据单元),实现难度比较大。另 外,该算法还要求目的网络内的路由器都支持和运行RIP协议(而RIP协议只适用于 小型的同构网络)。

  由于RIP协议不能适应大规模异构网络的互连,OSPF(开放最短路径优先)协议 应运而生。与RIP一样,OSPF也是一个内部网关协议。与采用距离向量的RIP协议不 同的是,OSPF是一个基于链路状态协议。在一个链路状态协议中,路由器并不与其邻 站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这 些信息发送给它的其他邻站,而邻站将这些信息在系统中传播出去。每个路由器接收 这些链路状态信息,并建立起完整的路由表。 在基于OSPF协议的拓扑发现中,可以直接通过定期导出路由器配黄文件或者定 期导出OSPF的链路状态数据库实现拓扑结构重现;或者使用拂议侦听器侦听所有IP 数据包从而分析拓扑结构的变化情况。由于OSPF为每个路由器都保存一份基本的网 络链路状态数据库,更加理想的方案是直接获得OSPF的数据包,在此数据库的基础 上提取网络拓扑信息,并实时获得更新的LSA来同步网络拓扑信息121】。 该算法也具有快速、高效和准确的特点,但同样的道理,算法也必须实现OSPF 协议(包括协议的各种命令原语、组装和解析协议数据单元),和RIP协议相比,OSPF 协议更复杂,实现难度更大。另外,该算法海要求目的网络内的路由器都支持OSPF 协议。

  ICMP(Intemet控制报文协议)是用于网关和主机传送控制信息或差错信息的协议 ICMP报文是用IP封装和发送的,它是IP的一部分,在每个IP实现中都必须有它。

  路由器使用这种机制向其它路由器或主机发送差错或控制报文,主机使用这种机制测 试目的主机是否可以到达。 最常用的两个应用ICMP协议的网络探测工具就是Ping命令和Traceroute命令。 Ping的功能是检测目的站点的可达性与状态,主机或路由器向指定目标发送ICMP 回送请求(echo request)报文,任何收到回送请求的机器形成1CMP回送应答(echo reply)报文并把它返回给最初的发送者。回送请求报文中包含一个可选数据区,回送 应答报文中包含了在请求中所发送数据的一个拷贝,因为请求和应答都是在IP数据报 中传送的,所以应答的成功接收就证实系统的主要部分是正常的。通常用异步Ping的 请求方式来提高探测的速度,同时不会导致网络阻塞。 Traceroute的功能是发现一条到目的机的路径,它利用IP报头中的TTL域。丌始 时信源设置IP头的TTL的值为0,发送报文给信宿,当第一个网关收到此报文后,发 现TTL为O,于是丢弃此报文,并发送一个类型为超时(Timeout)的ICMP报文给信 源,信源接受到此报文后对它进行解析,这样就得到了路由中的第一个网关地址;然 后信源发送TTL为l的报文给信宿,笫一个网关把它的TTL值减为0后转发给第二个 网关,第二个网关发现报文的TTL值为0,弃此报文并发送一个类型为超时的ICMP 报文给信源,这样就得到了路由中的第二个网关地址;如此循环下去,直到报文正确 到达,信源这样就得到了通往信宿的路由。 根据以上的原理,可以设计基于ICMP协议的逻辑网络拓扑发现算法如下:

  设定要探测的网络范围,即IP地址空间。然后选定一系列探测目的地址,这 些地址应尽可能地分布到目的网络的各个子网中。

  利用Ping依次检测给定地址区间的每一个lP地址,得到活动主机IP地址列 表;

  埘所有活动IP地址依次进行Traceroute操作,记录Traceroute操作的结果, 得到到达该IP地址设备的路由信息;

  对所有活动IP地址发送DNS数据包以确定所有活动设备的域名; 再对列表中的IP地址发送ICMP掩码请求报文得到该设备的子网掩码,并将 每个IP加入相应的子网;

  根据路由器接口地址和网络掩码区分网络,得到相应的网络地址,再根据 Traeeroute操作的结果建立路由器与路由器的连接,以及路由器和子网的连接 信息,从而得到整个网络的拓扑信息。

  在实现该算法时要注意的一个问题是对多接口主机的判定。因为多接口主机可能 靠廿有多个IP地址,但它们实际上代表同一个主机设备。由于DNS中对于一个多接口 主机的每个接口通常含有相同名字的记录,所以通过比较IP地址的域名可为判断多接 口主机提供一些线索,因此算法中通过向活动IP地址发送DNS数据包来确定主机域

  名,并依据这一规则将同一主机的IP地址合并。 该算法简单易于实现,并且Traceroute和Ping命令被绝大多数网络设备所支持, 因而浚方法的可行性比较好,是目前在没有SNMP支持的网络中发现逻辑网络拓扑最 有效的方法。但是由于要发送大量的拓扑探测数据包,因而该算法使得恻络负载较大, 另外,拓扑发现结果也因探测目的节点的选取不同而有所不同。

  目前,ICMP协议虽然广泛应用于网络拓扑发现,但它本身并不是为拓扑探测而设 计的一种协议,因而不能有效地得以应用,而且在网络安全方面,ICMP报文容易被误 认为是DoS攻击而被网关、防火墙过滤,甚至很多系统索性把ICMP的相关功能关闭。

  IPMP(IP Measurement Protocol,网络测量协议)是IETF最新提出的一种专门用

  于网络测量的协议1221。该协议在网络协议栈中的位置和ICMP相同,所有IPMP的 数据报都直接封装到IP报文中发送。和ICMP协议类似,它也有请求和应答报文、信 息测量报文等多种报文格式,其中,与路由拓扑探测有关的是请求和应答报文。算法

  设定目的IP地址空间,构建IPMP协议的响应请求数据包,逐一发送到各个 目的IP地址,并接收应答信息。

  根据返回信息中记录的路由路径,确定路由器节点以及它们之间的互联关系。 这个过程中一个重要处理就是合并路由器的多端口地址。因为对于同一路由 器,可能具有多个IP地址,对于拓扑发现算法,在发现的过程中必须考虑多 个IP是否对应的是同一路由器,以避免对同一路由器的重复搜索。

  ?在其它的探测站点也按照上述步骤进行探测,发现非最优路径。因为IPMP 探测数据包转发是基于最优路由的(即通过最优路径传输),而有些路径相 对当前探测点而言不是最优的,因此不能探测到,从而造成探测结果不完全, 解决此问题的的方法之一就是进行多点探测。

  IPMP协议可以有效避免上述各种限制,为网络数据包的丢失、单向路径长度、R-TT 值、单向网络延迟、路由路径信息等网络测量提供了一种便捷高效的实现手段。基于 IPMP协议的逻辑网络拓扑结构的发现算法与基于ICMP的拓扑发现相类似,但它的处 理过程更加简单有效。由于对于每一个目的IP地址,仅仅需要发送一个探测数据包, 因而网络资源占用很少,具有更高的效率和较快的发现速度。但它的缺点也显而易见, 就是IPMP协议不能被最广泛的路由器设备支持。不过,随着IPMP协议被广泛应用于 各类路由器上,基于IPMP协议的拓扑发现可以有效的替代基于ICMP协议的拓扑发现 算法。

  如果SNMP代理在网络节点中被广泛部署的话,基于SNMP协议的逻辑网络拓扑 发现将是非常准确和便捷的。在一个支持SNMP的网络坏境中浚算法有最高的精确度。

  使用基于SNMP协议的拓扑发现算法的理论基础就是从设备的MIB库中提取出与 逻辑刚络拓扑发现相关的信息,然后将这些信息归纳、总结,从而得出网络的路由拓 扑结构。 在算法中需要使用的MIB—II对象的描述如下【23]: 1、system组(1.3.6.1.2.¨) 算法中使用的system组的对象有sysObjectlD、sysLocation和SysService,各对象 的详细说明如表3—1所示。 对象名称 sysObjectlD

  OBJECT IDENTIFIER OBJECT IDENTIFIER nqTEGER

  2、ip组(1.3.6.1.2.1.3) 算法中使用的ip组的对象有简单对象ipForwarding和两个表对象ipAddrTable(地 址表)、ipRouteTable(路由表)。简单对象ipForwarding用来判断设备是否具有转发功 能,它的值只能为1或2,为l代表系统正在转发IP数据包,2则代表不在转发。表 对象ipAddrTable和ipRouteTable的详细说明如表3—2和表3.3所示。 (1)ipAddrTable地址表 地址表中包含了对端口的IP地址的相关信息的描述,它提供了设备的各个端口所 对应的端口号、IP地址以及IP地址所对应的子网掩码。 (2)ipRouterTable路由表 路由表是对端口的路由的相关信息描述,它是在拓扑发现算法中起着最重要作用 的信息组。它提供了设备的路由信息,为整个拓扑发现算法奠定了基础。其中 ipRouteType的值可能为invalid,说明这是一个无效的路由;如果是direct,说明连接 的是子网;如果是indirect,说明连接的是路由设备。

  lpRouteiflndex IpRouteNextHop IpRouteType

  描述信息 该路由项的目的地址 该路由项目的端口号 下一跳的地址 路由的类型

  表3-4显示了一个路由表的实例。路由表中的第一项中ipRouteType=direct(3),说 明与路由器的此端口连接的是子网,子网地址为211.65.103.X;第二项中 ipRouteType=indirect(4),说明与路由器端口连接的是邻接路由器,地址为202.119.64.1。

  IpRouteNextH0p 211.65.103.2 202.1 19.64.1

  表3-4一个路由表实例 3、interfaces组(1.3.6.1.2.1.2)

  算法中使用的interfaces组的对象是ifNumber,类型为INTERGER,表示系统中的 网络接口数量。

  l、对多地址的同一路由器的判定 路由器的多个接口对应不同的IP地址,也就是说,同~路由器具有多个IP地址。

  剥卡拓扑发现算法,在发现的过程中必须考虑多个IP是否对应的是同t路由器,以避 免对同一路由器的重复搜索。 大部分的传统算法是根据sysObjectID的值作为设备的ID来识别设备的。因为每 台设备在出厂时就被赋予了一个不同的sysObjectlD的值,所以这种方法在大多数情况 是正确的,但是由于它不像MAC地址一样是全世界唯一的,sysObjectlD的值有町能 有重复。因此文献【24】提出不仅使用sysObjectID的值,还使用sysLocation的值, 因为在sysObjectlD有可能重复的情况下,sysLocation的值是不可能相同的。但是在实 际的实现中发现校园网的路由器MIB中的sysLocation一般都没有赋值,即为空。 文献【25】提出参照OSPF协议将路由器地址表(ipAddrTable)中最小的IP地址作 为它的标记,也不失为一种比较理想的解决方法,但是实现起来略显复杂。 实际一卜,在取得当前路由器的IP地址时,给这一接口IP做一个标记(路由器ID), 然后访问该路由器的地址表ipAddrTable,遍历路由器中的地址表中的所有ipAdEntAddr 拥有同一标记的即为同一设备。这样通过地址表和路由表的结合,就可知道哪些IP地 址是属于同一设备的,本文即采用这一方法。 2、关于算法执行效率的问题 为了获得更准确的拓扑结构,拓扑发现算法需要对路由表中的每一IP地址都进行 探测。实际的网络环境中,网关路由表往往会很大,多至上千条记录,为了提高算法 的执行效率,就需要进行路由表冗余条目过滤。比如对于路由表中ipRouteDest的值为 255.255.255.255、127.0.0.0或0.0.0.0的,ipRouteNextHop的值为环回地址的(它代表 了一个本地接121),ipRouterype的值不是3或4的等等,在进行探测之前应该过滤掉。 同样的,对于其他的表(如地址表)也要进行类似的冗余条目的过滤。 3、对路由器直连子网的判定问题 对于路由器直连子网发现,传统的算法只通过地址表ipAddrTable进行判定的算法 不够准确。有些环境下路由接口在地址表中也有IP地址,但悬空时传统算法就会得到 多余的错误直连子网。 改进的思路是依靠路由表和地址表的匹配,路由表的ipRouteType为Direct(3)表示 目标所在地址直接与该路由器相连,取出这样的条目,将ipRouteDest和ipRouteMask 按位与得到子网地址,逐一的到地址表中匹配(地址表中的ipAdEmAddr和 ipAdEntNetMask按位与得到接口所在子网的地址),如果两者相同才表明路由表中这个 目标地址是与路由直连的子网,并记录子网地址和子网掩码【44】。 4、对路由器和三层交换机的区分问题 现在大多数的交换机为三层交换机,也就是说交换机有自己的IP地址,并且也具 有路由功能(可获取路由表信息)。在有些逻辑网络拓扑发现算法中使用system组的

  sysService对象的值是否为7来区分路由器和三层交换机,但实践证明这一思路并小能

  行的通,不同厂商路由网关的sysServices的值各不相同(有些为6,有些为7,有些为 76,有些为78),并无固定规律可循。 实际上,逻辑网络拓扑发现的目标是路由网关设备及其直连子嘲的发现,可以把 三层交换机发现的任务放在子网物理拓扑发现任务中,并且也使得算法流程更加清晰

  1、路由器队列 路由设备队列是用来存储网络中的路由器的基本信息,其数据结构表示和说明为: RouteList<RID,IPAddress>,其中: RID:路由器ID。 IPAddress:路由器的IP地址。 2、路由器与路由器连接队列 路由器队列是用来存储路由器之间的连接信息的。其数据结构表示和说明为: RconnectR<startRID,startPort,startlP,endRID,endPort,endIP>,其中: startRID:此连接一端的路由器的ID。 startPort:此连接一端的路由器的连接端口号。 startlP:此连接一端的路由器在连接端口上的IP地址。

  endPort:此连接另一端的路由器的连接端口号。 endIP:此连接另一端的路由器在连接端口上的IP地址。 3、路由器与子网连接队列 路由器与子网连接队列是用来存储路由器与子网之间的连接信息的。其数据结构 表示和说明为:RconneetNet<RID,gport,RIP,NetID> RID:此连接中路由器的ID。 aport:此连接对应的路由器的端口号。 RIP:此连接中路由器的IP地址。 NeflD:此连接中子网的标识,它又包括子网地址和子网掩码等。 4、地址表和路由表 地址表和路由表是整个算法中需要记录的最重要的数据,根据实际的需求将其设

  计为线性的数据结构(如数组),其表示和说明分别:RouteAddrTable<IPaddr,ifindex.

  Netmask>,RouteTable<ipDest,ifindex,ipNextHop,routeType>

  IPaddr:设备的lP地址。 ifindex:设备的端口号。 Netmask:设备的端口对应的子网掩码。 ipDest:路由项的目的地址。 ifindex:路由项所在的端口号。 ipNextHop:路由项的下一跳地址。 routeType:路由项的类型。

  算法的详细步骤描述如下: (1)获得起始路由器IP地址并加入路由器队列,同时设定算法能够发现的最大 跳数(从起始路由开始到达目的地所经过的路由器数目)。 (2)从路由器队列中取出当前路由器IP地址,获取它的路由表信息,并进行路 由表条目过滤。 (3)判断路由表中ipRouteType的值,如果该值为4(Indirect),表明目标地址 所在的子网不是直接与该路由器相连,必须至少再经过一个路由器。取出 路由表中jpRouteNextHop字段的值,同时保证该值不在路由器队列中,也 不是本路由器上的其中一个接口,那么,这个ipRouteNextHop的值就表示 一个有效的下一跳路由器,将其添加到路由器队列中,同时记录下这两个 路由的连接关系。 (4)如果路由表中的ipRouteType字段的值为3(Direct),那么表示目标所在 地址直接与该路由器相连,即发现~个子网。为了判断该子网的有效性, 取出ipRouteDest和jpRouteMask字段的值,按位与运算得到子网地址, 逐一的到地址表中匹配(地址表中的ipAdEntAddr和ipAdEntNetMask按位 与得到接口所在子网的地址),如果两者相同表明路由表中这个目标地址是 与路由直连的子网,同时记录子网信息以及网关与子网的连接信息144]。 (5)如此方法遍历路由器队列直到队列中的所有路由器都发现过或者到达指定 的最大跳数为止。 (6)根据获得的网络拓扑信息绘制网络拓扑图。

  1、关于起始路由器IP地址信息的获得 该算法能够实现的一个前提是至少要知道一个起始路由器的IP地址信息。如何判 断个给定的IP地址设备是否为路由器设备呢?这涉及到拓扑发现程序的运行方式, 总结如下:

  无论拓扑程序运行在何处,通过给定的一个起始路由器Ip地址信息就可以进行拓 扑发现算法的运行。 (2)从系统的配置文件中获得默认网关IP地址 获取程序运行的本地系统的默认网关地址,它就是与本地系统所在子网直连的路 由器的一个接13的IP地址,并以此为起始路由器实现拓扑发现算法。 (3)路由器IP地址猜测 由于网络管理员一般在设置路由器IP地址时,IP地址的最后一个字节往往为1、 63、129或193。基于这一点,在获得本地系统的IP地址和子网掩码后,可以猜测出 本地路由器的IP地址范围,然后对这些IP地址设备发送SNMP请求,获取interfaces 组的ifNumber对象和ip组的ipForwarding对象的值,如果itNumber的值大于l并且 ipForwarding的值等于1,就可以判断该IP地址设备为一路由器。这种猜测方法可以 根据不同的网络环境进行调接。 2、关于子网标识NetlD 标识子网使用NetlD表示的子网标识。再NetlD这个数据结构中存储了子网地址 和子网掩码信息,通过它可方便的判断网络设备与子网的关系,同时也可判断出属于 同一子网的设备,为下一步予网内物理拓扑的发现准备充分的信息。 3、算法可能存在的问题 基于SNMP协议的逻辑拓扑发现算法快速、高效,发现结果也是最准确的。并且 SNMP协议被大多数路由设备所支持,所以该算法的可行性也很高,但是,该算法有 一个限制就是要求网络中的关键设备必须支持SNMP代理,否则无法获得拓扑发现所 需要的数据,从而影响拓扑发现的完整性。

  物埋嗍拓扑发现(义称为以太网物理拓扑发现)是指发现网络实体的实际物理连 接(对应OSI第二层设备的连接),即能够获得交换机与交换机、交换机与路由器、交 换机与主机之间的互连关系。发现网络元素之间物理的布局与互连关系是完成许多重 要网络管理任务的前提,例如,主动与被动网络管理、服务器定位、事件关联和故障 源分析等。 本章从介绍以太网技术开始,分析了交换机的工作原理,并以此介绍了物理网络 拓扑发现算法的理论基础、算法描述和算法分析,并对算法中存在的问题和改进策略 进行了详细的阐述。

  以太网(Ethernet)是目前使用最广泛的局域网技术。以太网中的所有网络设备通 过以太网卡连接至网络主干电缆,采用广播方式传送数据。由于所有设备的数据都需 要通过网络主干电缆进行传送,为了避免多个设备同时进行数据传送而产生的冲突, 以太网采用CSMA/CD(Carrier

  检测的载波侦听多路访问)技术【30】。 以太刚最初是使用同轴电缆通过T型接头将各个终端主机连接在一起的,在逻辑上 采用总线拓扑结构。但是由于采用总线拓扑结构,网络设备在通过网络传送数据时会 发生冲突,因此,在一个以太网中不能同时存在过多网络设备,为了解决这个问题, 出现了网桥和交换机。并且在实际的网络设备安装时,通常会使用物理的星形拓扑结 构。 随着交换技术的发展,交换机越来越多地被用于以太网的组建和互联。交换机使 得以太嗍的各个子网段(subsegment)成为独立的冲突域,大大提高了以太网的性能。 这些独立的冲突域合起来称为一个子网(subnet),所谓子网就是其内部各网络节点之 间通信不需要经过路由器的路由转发。

  网桥工作在数据链路层,是基于MAC地址的帧交换设备。使用网桥将一个以太网 划分为两个网段,整个以太网上的网络设备处于同一个广播域,同时以网桥端口为边 界将以太网划分为两个冲突域,从而有效地降低网络设备的冲突,提高网络的有效带

  网桥在发送信息前,通常要接收到完整的帧并执行帧检验和(FCS),而交换 机在信息接受前就可以发送信息。

  利用交换机可以将以太网划分为更多网段,能够在以太网中增加冲突域的数量, 缩小冲突域范围,有效增加网络可用带宽,大大提升了网络性能。因此,越来越多的 以太网采用交换机划分网段。 网桥通过分析每个端口收到的进入帧的源地址,确定每个端口所能到达的网络设 备的MAC地址,并加入到MAC地址转发表中,从而可以了解整个网络的拓扑结构。 因此,终端设备不需要知道网络中网桥的存在,以这种方式工作的网桥又称为透明网 桥。透明网桥主要用在以太网环境中,并设计为对末节点的透明。 以太刚交换机对帧进行转发的方式和透明网桥是一样的,它们只基于目标MAC地

  址作出转发决定,所以不像路由那样会在路由器中形成地址层次。目前,交换机一般

  采用两种内部转发技术来处理分组【11】:短径转发(Cut-through Forwarding)和存储 转发(Store

  在短径转发模式中,交换机在发送信息之前不需要等待接收到一个完整的帧,交 换机在检查和校验了目的地址后就立刻开始转发分组。这意味着对分组的第一部分的 转发甚至可以在该分组的其他部分还在从输入端口的交换缓冲中读出的时候进行。因 此,交换机没有执行FCS检验,这可能导致发送一些错误帧,另外,这也会增加进行 帧传输的源物理网段和目的物理网段上的带宽消耗。这种转发模式的优点是具有较低 的交换延迟,缺点就是把所有的分组,无论是台法的还是不合法的都转发到了输出端

  在存储转发模式中,交换机在确定分组发送到哪里之前将把整个分组读入一个缓 冲区中,这样交换机就能检查帧长度的合法性并进行循环冗余校验(CRC)。如果帧太 长、太短或CRC出错,交换机就可以将该帧丢弃,而不必转发到下一个网段上。它减 少了错误帧的传送,也就减少了网络带宽的消耗。但是,交换机对分组进行的错误检 测会增加网络延迟。 综上所述,交换机实质上就是一种多端口的透明网桥,是当前以太网应用最广泛 的互联设备,也是以物理网路拓扑发现主要对象。为了方便表述,除了特别说明,以 卜.文中网桥和交换机具有相同意义。 基本上,交换机的工作原理可以用以下两个部分进行描述: 1、数据帧的转发与过滤

  首先,交换机基于目标MAC地址作出转发决定,所以它必须获取MAC地址的化

  置,这样才能准确的作出转发。 交换机从它的所有端口接收MAC(Media

  地址表并维护它。当…帧数据到达交换机时,交换机会记录此数据帧的源地址和数据 帧到达的相应端口号,并将这些信息保存到MAC地址表中。同时,交换机会执行帧检 验序列(FCS),以防止将错误的信息保存在MAC地址表中。此时,交换机所维护的 这张MAC地址表又被称为MAC地址转发表(FDB)。 然后,当交换机端口收到一个数据帧时,会将帧头包含的目的MAC地址与地址转 发表中保存的MAC地址进行匹配,以决定丢弃还是转发此数据帧。它所判定的原则是: ?如果目的MAC地址对应的端口为接收该帧的端口,则交换机丢弃该帧; ?如果目的MAC地址对应的端口不是接收该帧的端口,则交换机通过该端口 向目的地址转发;

  如果目的MAC地址不在地址转发表中,交换机就把该帧向除了收到该帧的 端口以外的所有端口同时进行转发;

  如果该帧的源MAC地址不在地址转发表中,交换机将会将源MAC地址与接 收该帧的端口号记录在地址转发表中。

  综上所述,当交换机启动时,它的MAC地址转发表是空的。交换机通过分析每个 端r]收到的进入帧的源地址,确定每个端口所能到达的网络设备的MAC地址,并加入 到MAC地址转发表中,从而可以了解整个网络的拓扑结构,实现帧数据的转发与过滤。 下面给出一个具体的实例来描述交换机的帧数据的转发与过滤的过程【31】。 该实例的网络实体的连接如图4.1所示。

  其中A、B、C是三个交换机设备,D、E、F是主机设备,各交换机的MAC地址 转发表如图4-2所示。 当主机D向主机E发送的数据帧时,该帧被主机E直接接受,交换机B同时通过

  端口1收到该l帧,并在MAC地址表中查找,发现主机E通过端口1到达,啊该帧恰 好是被端口1接收,因此交换机抛弃该帧。当主机D向主机F发送的数据帧时,变换 机B通过端口1收到该帧,并在MAC地址表中查找,发现主机F通过端口3到达, 于是将该帧由端口3转发至交换机A接收,并再次被交换机A转发至交换机C然后由 交换机C经端口l广播,主机F接收该帧。

  以太网在使用交换机划分网段时,需要绝对避免出现环路,否则会导致网络瘫痪。 但是,在使用树型拓扑结构划分网段的情况下,如果靠近根节点的交换机通信出现问 题,又会导致较大范围的网络通信故障。因此,在实际网络设计中,为了保证网络的 可靠性,一般都在网络中增加几条冗余的备份线路,这样数据报会在实际的网络拓扑 结构中形成环(Topology Loop)。 这种矛盾可以通过在交换机上启动STP(Spanning.Tree Protocol,生成树协议) 来解决。在使用STP创建含有冗余连接的以太网中,所有交换机通过定期发送和接收

  利用生成树算法计算网络的生成树拓扑,避免环路的出现。 下一节将详细介绍生成树协议的原理。

  合作生成树协议产生的。该协议使用生成树算法,计算出最佳路径,构建一个生成树

  来保证交换机在含有环状链路的网络中能构有效的工作。 生成树是一个链路和交换的子集,它能被用于产生连接到网络上的任何两个站点 或网段之间的无环路的通路。交换机通过定期发送和接收BPDU消息来建立和维护生 成树,在BPDU消息中包含了根交换机的标识符和本交换机到根交换机的距离,只有 那些到根交换机具有最小代价的交换机和交换机上的端口才可以出现在这棵树上。

  也就是说,利用生成树算法计算网络的生成树拓扑,根据计算的结果,交换机端 u被设置为如下五种状态之一: ?阻塞:接收BPDU,不转发帧。 ?听:接收帧,不转发帧。 ?学习:学习地址,不转发帧。 ?转发:学习地址,转发帧。

  处于转发状态的端口和链路组成了一棵到达每个网段的生成树,并用它来覆盖实 际的网络拓扑。 为了构造生成树,首先必须选出一个交换机作为生成树的根。实现的方法是每个 交换机广播其MAC地址,然后按根到每个交换机的最短路径来构造生成树。如果某个 交换机或网段故障,则重新计算。交换机通过BPDU互相通信,在交换机做出配置自 己的决定前,每个交换机和每个端口需要下列配置数据: ?交换机ID(唯一的标识) ?端r]ID(唯一的标识) ?端口相对优先权 ?各端口的代价(高带宽=低代价) 配置好各个交换机后,交换机将根据配置参数自动确定生成树,这一过程有三个 阶段【31】: (1)选择根交换机 具有最小交换机ID的交换机被选作根交换机。交换机lD应为唯一的,但若两个 交换机具有相同的最小ID,则MAC地址小的交换机被选作根。 (2)在其它所有交换机上选择根端口 除根交换机外的各个交换机需要选一个根端口,这应该是最适合与根交换机通信 的端口。通过计算各个端口到根交换机的花费,取最小者作为根端口。 (3)选择每个网段的“指定(designated)交换机”和“指定端口” 如果只有一个交换机违到某网段,它必然是该网段的指定交换机,如果多于一个, 则到根交换机代价最小的被选为该网段的指定交换机。“指定端口”连接指定交换机和 相应的网段,如果这样的端口不止一个,则低优先权的被选中。 综上所述,当一个交换机启动后,它假定自己是根交换机,发送出一个 CBPDU(Configuration Bridge

  的根交换机ID。一个交换机收到一个根交换机ID小于其所知ID的CBPDU时,它将 更新自己的表,如果该帧从根端口(上传)到达,则向所有指定端口(下传)分发。 当一个交换机收到一个根交换机ID大于其所知ID的CBPDU时,该信息被丢弃,如

  果该帧从指定端口到达,则回送一个帧告知真实根交换机的较低ID。当网络重新配置

  时,上述过程将重复,从而产生一个新的生成树。 图4—3展示了一个含环路的交换机连接,并假设其生成树状态表如图4-4。

  通过由表中的生成树状态信息可PA半,I断,交换机A成为根交换机,交换机B的端 口2与根交换机的端口2连接,交换机C的端口2与根交换机的端口3连接,交换机 B的端口3虽然与交换机C的端口3连接,但处于阻塞状态(物理连接,逻辑断开), 成为冗余连接或备份。如果交换机B的端口1接收到一个发往交换机C的1号端臼的 数据帧,只能通过交换机A转发。

  备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的新兴技术。IEEE于

  1999年颁布用以标准化VLAN实现方案的802.1Q协议标准草案。目前这种用于网络

  结点逻辑分段的方法正为越来越多的局域网所使用。 使用VLAN具有以下优点【31】: (1)确保网络安全 共享式局域网之所以很难保证网络的安全性,是因为只要用户插入一个活动端口, 就能访问网络。而VLAN能限制个别用户的访问,控制广播组的大小和位置,甚至能 锁定某台设备的MAC地址。 (2)控制网络的广播风暴 一个VLAN就是一个逻辑广播域,通过对VLAN的创建,隔离了广播,缩小了广 播范围,可以减少广播风暴的产生。同时,一个VLAN的广播风暴不会影响其它VLAN 的性能。 (3)简化网络管理 网络管理员能借助于VLAN技术轻松管理整个网络。通过VLAN管理员能方便地 在网络中移动和快捷地组建宽带网络,而无需改变任何硬件和通信线路。在不改动网 络物理连接的情况下可以任意地将网络设备在工作组或子网之间移动,VLAN提供了 网段和机构的弹性组合机制。 VLAN与普通局域网从原理上讲没有什么不同,它们都覆盖了一个,1‘播包能够达 到的范围(这称为广播域)。但从用户使用和网络管理的角度来看,VLAN与普通局域 网最基本的差异体现在:VLAN允许在同一个交换机上有多个分离的LAN。例如,己 知某个交换机上端口1~3 2位于VLANA上,而端口3 3~64则位于VLANB上。这 个交换机可以当作两个分离的网桥使用,一部分负责端口l~3 2之间的转发,另一部 分负责端口3

  划分VLAN的方法通常育如下三种: ?基于端口的VLAN划分:这种划分是把一个或多个交换机上的几个端口划分 一个逻辑组,这是鼹简单、最有效的划分方法。浚方法只需网络管理员对网 络设备的交换端口进行重新分配即可,不用考虑该端口所连接的设备。

  基于路由的VLAN划分:该方式允许一个VLAN跨越多个交换机,或~个端 口位于多个VLAN中。

  基于MAC地址的VLAN划分:网络管理员可按MAC地址将网络设备划分 为一个逻辑子网。由于只有网卡才分配有MAC地址,因此按MAC地址柬划 分VLAN实际上是将某些工作站和服务器划属于某个VLAN。事实七,陔 VLAN是一些MAC地址的集合。当设备移动时,VLAN能够自动识别。

  目前对于VLAN的划分主要采取基于端口和基于路由的划分,基于物理地址的划 分作为一种辅助手段。 在同一VLAN中,主机的通信使用广播方式,利用交换机进行,而跨VLAN的通 信则需要通过路由器完成。即一个路由器来连接这两个VLA。

本文链接:http://explodingspec.com/fankuibianjihe/184.html