一种用于网管容量测试的SNMP模拟器及其测试方法
技术领域
本发明属于网络管理领域,尤其涉及到一种用于网管容量测试的SNMP模拟器及其测试方法。
背景技术
网络管理已经是现代通信***不可或缺的一部分,它是***提供高稳定性能和高质量服务的重要保障.网络管理***,不仅能有效地管理整个***,而且还要保证***的健壮性。SNMP是现在通用和成熟的互联网络管理协议,得到了当前绝大多数厂商的支持,在网络运行上不会存在任何不兼容的问题;大多数网管***都是基于SNMP标准协议实现。
接入网网管***需要管理的设备数量大,在广电网络中一个行政区的EOC数量可达数万。图1是现有的基于SNMP网络管理模型示意图,网管***和设备之间有大量的数据通信以及数据后期逻辑处理。如图2所示为在硬件条件固定情况下,网管***响应时间与被管理设备数量关系图。单个服务器上的网管***其处理能力在被管理设备数量达到一个临界点C时会开始出现操作响应增加;设备数量继续增长到临界点E时可能网管***开始完全无法使用。在网管***研发期间,搭建一个数万设备真实网络环境来验证网络***的两个临界点存在以下弊端:
1)高额设备的采购费用。
2)占用大量的机房空间。
3)被管理的接入网设备均是有源设备,消耗大量的电力。
4)搭建环境需要大量的人力资源投入。
发明内容
为解决上述问题,本发明提供了一种用于网管容量测试的SNMP模拟器,其特征在于,SNMP模拟器包括电脑、网卡、mib信息采集模块、mib数据裁剪模块、数据构造模块、虚拟设备对象树生成模块、人机交互模块;所述电脑上还运行有报文捕获线程、报文处理线程、报文发送线程、网管***监测模块;
所述Mib信息采集模块用于采集待测试网管***管理范围内各个EOC和/或EPON真实网络设备所有节点的mib数据;
所述mib数据裁剪模块用于将网管***不需要的节点mib数据从所有节点mib数据中剔除出去,并将剩余的节点mib数据保存成对应真实EOC设备型号的XML模板文件,且一种XML模板文件内的mib数据对应于一种虚拟设备的mib数据;
人机交互模块用于选择设备型号、定义起始IP地址、设置设备数量X、启动虚拟设备、停止虚拟设备、增减虚拟设备;
所述数据构造模块用于根据设备型号读取对应XML模板文件,生成X个包含虚拟设备mib数据的xml文件;
虚拟设备对象树生成模块用于根据人机交互模块的设置生成虚拟设备对象树;
所述报文捕获线程用于捕获源IP地址为网管***服务器IP的报文,并注册报文到达事件,将注册后的报文放入收包队列中;
所述报文处理线程用于循环的从收包队列中读取报文、处理报文,并将处理后产生的响应报文加入到发送报文队列;
所述报文发送线程循环读取发送队列报文,并加入网卡的发送缓冲区;
网管***监测模块用于观察EOC设备保活状态、服务器网络接口数量及流量、记录页面响应时间,找出网管***的容量临界点。
上述用于网管容量测试的SNMP模拟器的测试方法,包括如下步骤:
步骤一:采集真实EOC设备mib的所有节点数据,并保存为XML文件,所述XML文件里包含有各个节点的节点名称、节点号、父节点标识、节点取值;
步骤二:裁剪真实EOC设备mib节点数据,裁剪后的mib节点数据仅包括网管设备向各个EOC设备发起的SNMP请求中用到的mib节点数据,且裁剪后的mib数据保存为对应EOC设备型号的XML模板文件,所述XML模板文件里包括节点取值项、OID;
步骤三:选择EOC设备型号及需要生成的虚拟设备数量X,读取对应设备型号的XML模板文件,将节点取值项修改为指定值,生成X个包含虚拟设备mib数据的XML文件;
步骤四:根据步骤三所生成的XML文件中的IP地址,生成虚拟设备对象树;
步骤五:启动虚拟设备,加载对应XML文件中的mib数据,生成根据OID排序并具有父子关系的mib节点对象列表;
步骤六:直接从网卡提取源IP地址为网管***服务器IP的请求报文,并为每个到达的请求报文注册报文到达时间,并将注册过的报文放入到收报队列中;
步骤七:报文处理线程循环从收包队列中读取报文,进行处理后加入报文发送队列;
步骤八:报文发送线程循环接读取报文发送队列的报文,直接加入SNMP模拟器网卡的发送缓冲区;
步骤九:逐步增加或减少虚拟设备,并观察设备保活状态,服务器网络接口数量流量,记录页面响应时间,找网管***的容量临界点。
进一步的,在步骤七中,处理的报文有三种,分别为arp报文、icmp报文、基于udp的snmp报文;
如果为arp报文,处理方式为:如果报文携带的请求IP地址ip1为已经启动的虚拟设备IP地址,则构造mac地址为指定网卡mac地址、IP为ip1的arp响应报文,加入报文发送队列;通过这种arp欺骗,将网管***snmp请求数据引导至SNMP模拟器指定网卡上;
如果为icmp报文,处理方式为:如果请求的IP地址为已经启动的虚拟设备IP地址,则构造icmp响应报文,加入报文发送队列;
如果为基于udp的snmp报文,处理方式为:如果请求的IP地址为已经启动的虚拟设备IP地址,调用虚拟设备对象的snmp报文处理方法,返回snmp响应报文。
附图说明
图1是现有的基于SNMP网络管理模型示意图。
图2是在硬件条件固定情况下,网管***响应时间与被管理设备数量关系图。
图3是本发明的SNMP代理数据模型示意图。
图4是本发明数据报文处理流程图。
图5是本发明实例中SNMP报文解析流程图。
具体实施方式
本发明的设计构思为:本发明设置了一个SNMP模拟器,所述模拟器采集各个型号真实EOC和EPON等网络设备的mib节点取值,并裁剪保留一小部分必需mib节点取值并保存成mib数据模板;通过自定义数据改变mib数据模板,生成虚拟设备mib数据文件;使用winpcap直接从网络的物理线路中提取数据报文,动态解析数据包,不适用***的TCP/IP协议,不占用***端口;发送报文也直接发送原始的二层数据报文。
如图3所示,本发明所述SNMP模拟器为SNMP模拟器包括电脑、网卡、所述模拟器包含mib信息采集模块、mib数据裁剪模块、数据构造模块、虚拟设备对象树生成模块、人机交互模块;所述电脑上还运行有报文捕获线程、报文处理线程、报文发送线程、网管***监测模块。
所述Mib信息采集模块用于采集待测试网管***管理范围内各个EOC和/或EPON真实网络设备所有节点的mib数据。
所述mib数据裁剪模块用于将网管***不需要的节点mib数据从所有节点mib数据中剔除出去,并将剩余的节点mib数据保存成对应真实EOC设备型号的XML模板文件,且一种XML模板文件内的mib数据对应于一种虚拟设备的mib数据。
人机交互模块用于选择设备型号、定义起始IP地址、设置设备数量X、启动虚拟设备、停止虚拟设备、增减虚拟设备。
所述数据构造模块用于根据设备型号读取对应XML模板文件,生成X个包含虚拟设备mib数据的xml文件。
虚拟设备对象树生成模块用于根据人机交互模块的设置生成虚拟设备对象树。
所述报文捕获线程用于捕获源IP地址为网管***服务器IP的报文,并注册报文到达事件,将注册后的报文放入收包队列中。
所述报文处理线程用于循环的从收包队列中读取报文、处理报文,并将处理后产生的响应报文加入到发送报文队列。
所述报文发送线程循环读取发送队列报文,并加入网卡的发送缓冲区。
网管***监测模块用于观察EOC设备保活状态、服务器网络接口数量及流量、记录页面响应时间,找出网管***的容量临界点。
下面包括节点取值项、OID。
裁剪数据的原因在于,根据步骤一中的格式保存一个真实网络设备的MIB节点数据文件可能有几MB或者几十MB大小,在网管进行设备发现扫描和设备在线保活时,向设备发起的snmp请求中其实只用到一小部分节点。
以常用个人PC为例,假如PC***可用2GB内存(1GB约等于1000MB,1MB约等于1000KB),一个虚拟设备mib数据大小为10M,则只能模拟2*1000/10=200个左右虚拟设备(计算未考虑虚拟设备对象其他内存开销,下同),10000个虚拟设备则需要10000/200=50台PC,实施困难。
故而通过开发文档或抓包分析,只保留网管***发现和保活的snmp请求节点及其父亲节点和实例节点,将裁剪后的mib数据保存为对应设备型号的xml模板文件,其大小只有20KB左右;则10000台只占用(20/1000)*10000=200M的内存。
步骤三:选择EOC设备型号及需要生成的虚拟设备数量X、定义指定起始IP地址ip1、设备软硬件版本号、团体名、snmp版本等信息,读取对应设备型号的XML模板文件,将节点取值Value修改为指定值,生成X个包含虚拟设备mib数据的XML文件。优选的,所述X个包含虚拟设备mib数据的XML文件以设备IP1~IPX为名称。
步骤四:根据步骤三所生成的XML文件中的IP地址,生成虚拟设备对象树。
此步的具体为:选择生成的xml文件,获取文件名称和文件绝对路径。根据文件名称的IP地址点分十进制格式的前三位为分组名称生成分组对象,IP地址前三位相同的虚拟设备挂在同一个分组下,在图形界面生成虚拟设备对象树。
步骤五:在人机交互界面启动虚拟设备,加载对应XML文件中的mib数据,生成根据OID排序并具有父子关系的mib节点对象列表。
列表为虚拟设备对象的一个公共属性;每个虚拟设备对象拥有自己独立的mib节点对象列表。
步骤六:直接从网卡提取源IP地址为网管***服务器IP的SNMP或ARP请求报文(该方式的好处是不占用操作***端口,从而不会因***端口数限制模拟设备数量)。为每个到达的报文注册报文到达时间,并将注册过的报文放入到收报队列中;
步骤七:报文处理线程循环从收包队列中读取报文,进行处理后加入报文发送队列。
本具体实施方式中可处理三种报文:
如果为arp报文,处理方式为:如果报文携带的请求IP地址ip1为已经启动的虚拟设备IP地址,则构造mac地址为指定网卡mac地址、IP为ip1的arp响应报文,加入报文发送队列;通过这种arp欺骗,将网管***snmp请求数据引导至SNMP模拟器指定网卡上;
如果为icmp报文,处理方式为:如果请求的IP地址为已经启动的虚拟设备IP地址,则构造icmp响应报文,加入报文发送队列;
如果为基于udp的snmp报文,处理方式为:如果请求的IP地址为已经启动的虚拟设备IP地址,调用虚拟设备对象的snmp报文处理方法,返回snmp响应报文。处理方式如图5所示。
步骤八:报文发送线程循环接读取报文发送队列的报文,直接加入SNMP模拟器网卡的发送缓冲区,不经过***寻址转发。
报文捕获线程、报文处理线程、发送线程,三个线程同时运行;收包队列和发包队列为线程安全队列。
步骤九:逐步增加或减少虚拟设备,并观察设备保活状态,服务器网络接口数量流量,记录页面响应时间,找出在特定硬件环境下,网管***的容量临界点。
本发明的有益效果为:本发明通过模拟器数据模板生成模拟设备mib数据,直接通过底层的报文捕获和发送效率都很高,单个PC就可模拟数万个网络设备响应网管***的SNMP请求,并且响应时间为ms级,几乎等于真实网络设备的响应时间。本发明解决了网管***研发期间没有大量真实网络的设备时,对网管***容量无法有效验证的困难。有效验证网管容量及其高负载情况功能的可用性,同时节约大量的人力、电力、空间以及设备等资源。