开篇:润墨网以专业的文秘视角,为您筛选了一篇网络拓扑自动发现系统设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:设计基于SNMP和其它协议的网络拓扑发现算法,实现三层交换机和路由器为网关的网络拓扑的快速发现,尽可能地发现完整的网络,且对网络带来的额外负载和开销尽可能小。
关键词:拓扑发现;ICMP;SNMP
中图分类号:TP393.02 文献标识码:A文章编号:1007-9599 (2011) 20-0000-01
Network Topology Auto-discovery System Design and Implementation
Tan Jian
(Guilin University of Electronic Science and Technology Hechi College,Yizhou546300,China)
Abstract:The design is based on SNMP and other protocols of the network topology discovery algorithm,three switches and routers as gateways rapid discovery of network topology,as much as possible to find a complete network,and network overhead of the extra load and as much as possible small.
Keywords:Topology discovery;ICMP;SNMP
一、系统功能模块
从功能上看,网络拓扑自动发现系统由4个模块构成:一)主干网拓扑发现模块主要功能为获取主干网中路由器、子网之间的连接信息,将路由器地址放入路由队列,将子网地址放入子网队列,将连接信息放入连接队列;二)子网拓扑发现模块主要功能是获取所有的子网内的所有主机地址、掩码和子网地址;三)主干网拓扑生成模块主要功能是在主干网拓扑并获得了已装有了所有路由器地址的路由队列、装有所有子网地址的子网队列和装有连接信息的连接队列后,将信息进一步进行处理,使网络设备及其连接关系以图像的形式展示在屏幕上;四)子网拓扑生成模块的功能是在获得了已装有了所有路由器地址的路由队列、装有所有连接信息的连接队列和装有所有主机地址的主机队列后,将信息进一步处理,将指定子网内的主机及其连接关系以图像的形式展示在屏幕上。
二、研究解决途径
本算法采用异步的方式发送和接收ICMP回应应答包,提高了算法的性能和效率。图4.19表示了SNMP和ICMP的层次位置关系。
图1:网络管理的层次结构
三、网络拓扑自动发现算法
(一)子网与路由器发现算法描述
1.与网管所在子网直连的路由器检测算法。确定主机地址。以子网地址+1为第一个主机地址,依次加1,增加N台机器为止,这样得到了N个主机地址IP。
检查该IP是否在子网内。若IP&MASK=Net,在子网中该地址可能是子网中一台主机的地址。
回应的ICMP包如果包含在输入的IP中,该IP地址是一台活动的主机。
对于已检测出来的主机,用异步方式向每台主机的161号端口发送SNMP报文,如果有回应则表示该主机运行了SNMP。
对于已经检测出的SNMP主机,检查其MIB值sysServices,这是一个整型变量,假设其值为m。设L是ISO七层模型中的某一层,如果该主机在第i层提供了服务,则Li被赋予相应的层数(Li取值范围为1,2,3,4,7)
i=1为物理层,如中继器;i=2为链路层;i=3为网络层,如路由器;i=4为传输层,如主机;i=7为应用层,如应用程序。由于路由器提供链路层和网络层,因此m=2(2-1)+2(3-1)=6。如果某台SNMP主机的值为6,则它是要找的路由器。
2.子网和路由器的连接检测算法。通过SNMP GetNext操作获取路由表,表中有两项极为重要的MIB变量ipRouteType和ipRouteDest,它们分别表示路由类型和所要到达的目的网络地址,如果ipRouteType的值为3,则表示目的网络与路由器直接相连。因而只需找出对应的ipRouteType的值为3的目的网络地址即可。同时可利用ipAdEnt If Index作为索引,与In2terface组的If Index和If Type相结合来确定子网的网络拓扑类型。
(二)主机发现算法描述
本算法中用到两种报文:回应(echo)请求或回应应答;信宿机发回响应的回应应答。下图所示的“标识符”和“序号”用于匹配请求与应答。
算法如下:
把子网内所有主机加入链表,设置一次发送和接收间的最大延迟、链表循环次数最大值和检查接收栈的时间。遍历链表,链表空则转至a。若检查接收栈的时间到,则转至d。依次检查节点;若此时时间与发包时间差值大于延迟便转c,不然检查下一节点。若循环次数超过最大值,从链表中删除,加入不可到达主机链表。不然发送ICMP包,设置当前时间为发包时间,循环计数加1。检查接收栈是否为空,若空就返回b。否则检查回应包,从链表中删除相应节点,加入可达主机链表。
四、算法的实现
(一)ICMP包的发送和接收。(1)构造ICMP包,填充ICMP包头中某些域,如序号、标识等;(2)用SOCK-RAW类型创建套接字,调用函数为socket();(3)采取异步方式,用WSAAsyncSelect()函数注册FD-READ事件;(4)分别用sentto()和recvfrom()发送和接收ICMP包,在接收到ICMP包时还要进行检验和匹配操作。
(二)用SNMP++技术实现SNMP编程。SNMP++把复杂的WinSNMP的APl函数封装成一个个相关的C++类,从而大大简化了SNMP网络管理软件开发的复杂性。它把SNMP编程中的核心部分都面向对象化封装起来,因此程序员无需了解SNMP底层的机制,只需了解SNMP编程的流程即可快速开发出高效的SNMP程序。
参考文献:
[1]胡谷雨,张巍等.简单网络管理协议教程[M].电子工业出版社,2000
[2]William Stallings.SNMP网络管理[M].中国电力出版社,2001
[3]李明江.SNMP简单网络管理协议[M].电子工业出版社,2007