一种SNMP中带条件的获取数据的方法
技术领域
本发明涉及一种通信领域的数据传输方法,尤其涉及一种SNMP(SimpleNetwork Management Protocol,简单网络管理协议)中带条件的获取数据的方法。
背景技术
网络管理,一般是指对网络系统中的各种设备进行监测、分析与控制,从而保障整个网络系统可靠、有效地运行.网络管理员通过管理工作站与代理之间的交互通信而达到对网络进行管理的目的.
为了保证管理工作站与代理之间能正确地交换管理信息,需对管理信息作出定义和在管理工作站与代理两者之间达成一致协议。管理信息即是管理对象,有时简称为对象,管理对象的集合称为管理信息库(ManagementInformation Base,MIB),管理工作站与代理之间的协议就是网管协议.目前,世界上使用最广泛的网管协议是基于TCP/IP的简单网络管理协议SNMP,该协议简单、易于实现且具有良好的可扩充性,是工业界事实上的网管协议标准.
简单网络管理协议SNMP是由互联网工程任务组(Internet EngineeringTask Force,IETF)定义的一套网络管理协议。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。SNMP构建在UDP(User DatagramProtocol,用户数据报协议)层之上,是一种高层的通信协议。
参照图1所示,为SNMP的模式示意图。SNMP协议采用一种管理/代理站模式,即我们经常所说的MANAGER----AGENT模式。对MANAGER提供一个统一的网管接口,无论被管设备有多复杂,对MANAGER来说只需要和AGENT交互就可以获得所有被管设备的网管信息。SNMP管理和代理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报,从而实现无连接操作。MANAGER上运行管理进程,AGENT上运行代理进程。MANAGER所需要管理的对象信息都存贮到AGENT上,如上所述,被管理的对象信息称为MIB,而管理对象必须被“标识”。MIB保存被管理设备的相关管理信息。在SNMP AGENT里,MIB通常用文本文件格式保存。一个MIB描述了包含在数据库中的对象或表项。
参照图2所示,为MIB库的树形结构示意图。MIB是一个树形的结构,该树是由一个根及与之相连接的许多节点组成,并对每一个节点进行编码,即每一个节点由一个非负整数值和尽可能简明的文字说明所标识。每一个节点可能也拥有同样被标记的子节点。当描述一个对象时,你可以使用几种格式,最简单的格式是列出由根开始到所讨论的对象遍历该树所找到的整数值。例如,其中PRIVATE分支的对象标识名称就是1.3.6.1.4,这个点分十进制标识称为OID(Object Identifier,对象标识符)。
MIB中树形结构的节点结构可以分为两类,简单变量和表格。简单变量就是一个叶子对应一个数据,标识起来比较简单。对于表格,要实现对于表格中的每个单元格进行标识略微复杂,需要定义一个称为索引的表项。
比如图3的表格,假设它挂在MIB树的1.3.6.1.4.1.2下面,则表格的OID为1.3.6.1.4.1.2,以单板地址为索引。那么操作时我们需要在表格的OID后面再添加几个数据才能唯一标识一个表中的实例,每个实例就是对应的表中的每个单元格。假如需要取单板地址为2的告警类型,则发送下去的OID应该为1.3.6.1.4.1.2.2.2,其中,后面的两个值“2.2”前面一个“2”就是索引,后面一个“2”代表列数,这样就可以唯一标识一个表中的实例。这时,实例的ID由OID和索引组成。
MANAGER与AGENT之间通过SNMP协议交互信息,需要遵循一定的SNMP报文格式和采用固定的操作原语。SNMP的操作原语(即操作命令)有GET-REQUEST、GET-NEXT-REQUEST、和GET-BULK等等。下面具体说明各个原语的作用。
MANAGER通过GET-REQUEST向AGENT提取特定实例的值;通过GET-NEXT-REQUEST向AGENT查找与变量绑定列表的实例的ID相匹配的实例的下一个实例的值,就是返回比下发的索引大的那个实例,比如有索引值为2,3,4的实例,现在GET-NEXT-REQUEST命令下发的索引是2,则返回索引值为3的实例。SNMP中的GET-BULK操作是批量获取所有的数据,GET-BULK实际上是通过迭代调用GET-NEXT-REQUEST操作来实现。
参照图4所示,为现有的SNMP中获取数据的方法流程图。该方法包括:MANAGER向AGENT发送GET-BULK查询命令,AGENT向MANAGER返回第一条结果,MANAGER再以收到的第一条结果作为索引向AGENT发送GET-NEXT-REQUEST,直到收到AGENT返回空为止,发送的这些GET-NEXT-REQUEST操作的命令标识(即请求ID)和GET-BULK一致。
但是GET-BULK只能查询整个表的所有数据,而不能只查询符合条件的的数据。
对于嵌入式系统而言,用户可能只是关心表中的很少的数据。由于系统的处理能力和通讯速度有限,把整个表的数据都返回给MANAGER需要很长的时间并且在用户不需要时对于系统资源的利用来说是一种浪费。
为了解决只查询符合条件的数据的问题,现有技术中提供了一种技术,该技术在MANAGER侧对AGENT返回的数据进行筛选,该技术的缺点在于由MANAGER进行过滤,导致了MANAGER和AGENT之间交互的数据量仍然较大。
发明内容
本发明所要解决的技术问题是提供一种能够实现带条件查询和获取数据的方法,克服一般SNMP的GET-BULK及GET-NEXT-REQUEST操作不能只返回符合条件的数据的缺点,提高系统工作效率。
为了解决上述技术问题,本发明提供了一种SNMP中带条件的获取数据的方法,用于在管理站MANAGER向代理站AGENT发送的命令中获取管理信息库MIB中的数据记录,所述方法包括以下步骤:
(1)对MIB中的数据记录的查询条件即索引进行特定的编码,使得当这个索引值为一个特定的编码时,这个值表示条件,而不是索引;
(2)MANAGER向AGENT发送GET-BULK或GET-NEXT-REQUEST命令;
(3)AGENT收到所述GET-BULK或GET-NEXT-REQUEST命令,判断所述命令的命令标识和上一条命令的命令标识是否相同,如果命令标识不相同并且本条命令的索引与步骤(1)的编码相同,则解析出编码中的查询条件,返回符合所述查询条件的第一条数据记录。
进一步,步骤(3)还包括:解析出编码中的查询条件后,保存所述查询条件。
进一步,步骤(3)中如果本条命令的命令标识和上一条命令的命令标识相同,则遍历MIB中的所有数据记录,如果数据记录符合所述查询条件并且其索引的内容比本条命令的索引大,则返回这条数据记录。
进一步,所述对MIB中的数据记录的查询条件进行编码,包括:将所述查询条件转换成ASCII码或者点分十进制码。
进一步,所述方法还包括以下步骤:
(4)保存本次命令的命令标识。
本发明SNMP中带条件的获取数据的方法可以方便地按照条件对MIB中的数据记录进行查询,从而提高了系统工作效率。
附图说明
图1为SNMP的模式示意图。
图2为MIB库的树形结构示意图。
图3为MIB库树形结构的节点为表格结构时的表格结构示意图。
图4为现有的SNMP中获取数据的方法流程图。
图5为本发明SNMP中带条件获取数据的方法流程图。
具体实施方式
本发明通过对SNMP中的GET-BULK及GET-NEXT-REQUEST操作中所带的索引进行特殊的编码从而实现对数据的按条件获取。
下面结合附图对本发明的优选实施例进行详细说明。
优选实施例一:
参照图5所示,为本发明SNMP中带条件获取数据的方法流程图。所述方法包括以下步骤:
步骤501:对索引即数据记录的查询条件进行特殊的编码,使得当这个索引值为一个特定的编码时,这个值表示条件,而不是索引。
这个特定的编码用户可以自己定义,比如可以约定条件的格式为“condition.field.字段号.类型.条件.field。”类型如果填1表示整数,填2表示字符串等。比如索引值为99.111.110.100.105.116.105.111.110.102.105.101.108.100.1.1.123.102.105.101.108.100.2.2.111.107.102.105.101.108.100(即c.o.n.d.i.t.i.o.n.f.i.e.l.d.1.1.123.f.i.e.l.d.2.2.o.k.f.i.e.l.d)时,表示这个查询条件为查询第一个字段等于123并且第二个字段等于“ok”。99.111.110.100.105.116.105.111.110是condition的每个字母的ASCII码。
当然,本实施例仅示例性示出了采用ASCII码的编码方式,所述编码还可以为点分十进制码及其他多种编码方式。
步骤502:MANAGER向AGENT发送GET-BULK或GET-NEXT-REQUEST命令,AGENT收到MANAGER的GET-BULK或GET-NEXT-REQUEST命令;
步骤503:AGENT判断命令标识(即请求的ID)和上一次收到的同一类型的命令的请求ID是否相同,如果相同,则表示上一次的GET-BULK查询还没有结束,直接进入步骤508处理,如果不同,进入步骤504处理;
其中,判断请求的ID和上一次收到的命令的ID是否相同为对命令标识中的标识码进行数据比较;
步骤504:判断索引是不是以上面设定的编码开头,如果不是,则执行步骤505;如果是,执行步骤506;
步骤505:按照SNMP标准的该操作原语的处理流程进行处理,执行步骤509,结束;
步骤506:按照约定解析出查询条件并保存起来,
步骤507:返回符合所述查询条件的第一条记录,执行步骤509,结束;
步骤508:遍历表的所有的数据记录,如果数据记录符合查询条件并且其索引比MANAGER发下来的命令的索引大,则返回这条记录,执行步骤509,结束;
步骤509:保存本次的请求ID,流程结束。
优选实施例二:
从网管上对传输设备的一些设置参数进行带条件的查询,假设现在设备上保存了所有板的告警信息,现在要查询2号板的数据。告警信息表包括单板地址、端口、告警原因和告警等级等字段。
实现的过程如下:
1.对索引即查询条件进行特殊的编码。
条件的格式为“condition.feld.字段号.类型.条件.field”,类型填1表示整数。构造查询条件为OID.99.111.110.100.105.116.105.111.110.102.105.101.108.100.1.1.2.102.105.101.108.100(即OID.condition.field.1.1.2.field)。
2.AGENT收到MANAGER的GET-BULK或GET-NEXT-REQUEST命令的时候,如果命令的请求ID和上一条命令的请求ID不相同并且索引符合上面约定的条件,则按照约定解析出查询的条件并保存起来,然后返回符合条件的第一条记录。
3.如果请求ID和上一条命令的请求ID相同,则遍历表的所有的数据记录,如果数据记录符合条件并且其索引比MANAGER发下来的命令的索引大,则返回这条记录。
4.保存本次的请求ID。
通过上面步骤,我们就可以在SNMP中实现按照条件进行批量查询的操作,只返回用户关心的数据,从而减少了MANAGER和AGENT之间传输的数据量,提高了效率。
当然,上述实施例不是对本发明技术方案的进一步限定,任何熟悉本领域的技术人员对本发明技术特征所做的等同替换或相应变形,仍在本发明的保护范围之内。