`
fp_moon
  • 浏览: 983167 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SNMP协议入门

阅读更多

1. SNMP管理模型
  1.1.   什么是SNMP
  SNMP(Simple Network Management Protocol)是被广泛接受并投入使用的工业标准,它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。它采用轮询机制,提供最基本的功能集。最适合小型、快速、低价格的环境使用。它只要求无证实的传输层协议UDP,受到许多产品的广泛支持。SNMP在TCP/IP协议族中的地位如下图:
  

 


  1.2.   SNMP的基本操作:
  

 


  SNMP以GET-SET方式替代了复杂的命令集,利用基本操作演绎出全部操作。用户可以采用管理信息库标准或按标准的方式来定义自己的管理信息库(MIB)。这样做的好处是:通过降低占网管系统中大多数的代理部件的成本来降低整个网管系统的成本。
  
  1.3.   网管站和代理
  网管站(NMS)对网络设备发送各种查询报文,并接收来自被管设备的响应及陷阱(trap)报文,将结果显示出来。代理(agent)是驻留在被管设备上的一个进程,负责接受、处理来自网管站的请求报文,然后从设备上其他协议模块中取得管理变量的数值,形成响应报文,反送给NMS。在一些紧急情况下,如接口状态发生改变,呼叫成功等时候,主动通知NMS(发送陷阱TRAP报文)。
  
  他们的关系如下图:
  

 


  SNMP就是用来规定NMS和Agent之间是如何传递管理信息的应用层协议。
  
  1.4.   ASN.1和SMI
  SNMP是应用层协议,它要求两端的协议实体交换各种报文,而低层要求用户数据都是BYTE序列,这就产生了一个问题: SNMP协议实体如何从接受到的一个BYTE序列中识别出报文又如何把一个用内部数据结构表示的报文转换成一个可供发送的BYTE序列, 也就是编解码问题。
  
  解决这个问题,就需要一个定义从实际的软件数据结构中抽象出来的数据类型的表示方法,称为抽象句法。
  
  ASN.1就是用来描述抽象记法的语言,事实上可应用与任何协议层,在它的基础上,通过规定编码规则,就可以确定数据在传送中的八比特组的值。
  
  SMI(Struct of Management Imformation),通过定义一个宏OBJECT-TYPE,规定了管理对象的表示方法,从这个意义上说,它是ASN.1的一个子集。另外它还定义了几个SNMP常用的基本类型和值。
  
  MIB (Management Imformation Base), 是所监控网络设备的标准变量定义的集合。SNMP用层次结构命名方案来识别管理对象,就象一棵树,树的节点表示管理对象,它可以用从根开始的一条路径来无二义的识别。见下图:
  

 


  管理对象B可以用一串数字唯一确定{1.2.1.1} 这串数字是管理对象的object identifier(客体标识符)。通过object identifier可确定从根到 B的一条路径。
  
  管理对象 A 的object identifier 是{1.2.1.1.5},或{B 5},后一种表示方法表明A是B的第5棵孩子。
  
  在agent中这棵树是用较复杂的数据结构来实现的,幸运的是,建树这个工作可由MIB编译器完成。在树的叶节点中,存放有访问函数的指针,Agent就是通过调用这些函数来从相关模块取得管理变量的值的。
  
  1.5.   SNMP报文
  SNMP报文结构如下:(编码之前)
  

 


  SNMP共有5中报文,所以其PDU也有5中,仅以GetRequest-PDU为例
  

 


  2.管理变量的表示
  管理变量表示管理对象类型在某一时刻的值(或称该类型的实例),SNMP以管理变量作为操作对象。
  
  管理变量的表示方法是这样规定的:形如x.y,其中x是管理对象的object identifer。y是能唯一确定对象类型值的一组数字,在非表型变量中为0,在表型变量中是这个表的索引,比如接口表中的接口号,或路由表中的目的网络地址等等 。如:在MIB文件里定义了ipAdEntNetMask这一管理对象,其object identifier为1.3.6.1.1.5.6.1.3它是个路由表中的一项,它的一个实例就是路由表中某一行的子网掩码,如果这行的索引、目的网络地址为129.102.1.0。则这个变量名是:1.3.6.1.1.5.6.1.3.129.102.1.0。在以后的说明中,为了方便,把唯一确定管理变量的一组数字,也就是x.y中的y称作实例。
  
  3.SNMP的运行过程
  驻留在被管设备上的AGENT从UDP端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果。
  
  下面根据RFC1157详细介绍Agent接受到报文后采取的动作:
  
  首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。
  
  第二步:将报文中的版本号取出,如果与本Agent支持的SNMP版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP版本1。
  
  第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。
  
  第四步:从通过验证的ASN.1对象中提出协议数据单元PDU,如果失败,丢弃报文,不做进一不处理。否则处理PDU,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。
  
  根据不同的PDU,SNMP协议实体将做不同的处理:
  
  1.6.   GetRequest PDU:
  第一种情况:如果PDU中的变量名在本地维护的MIB树中不存在,则接受到这个PDU的协议实体将向发出者发送一个GetResponse报文,其中的PDU与源PDU只有一点不同:将ERROR-STATUS置为noSuchName,并在ERROR-INDEX中指出产生该变量在变量LIST中的位置。
  
  第二种情况:如果本地协议实体将产生的响应报文的长度大于本地长度限制,将向该PDU的发出者发送一个GetResponse报文,该PDU除了ERROR-STATUS置为tooBig,ERROR-INDEX置为0以外,与源PDU相同。
  
  第三种情况:如果本地协议实体因为其他原因不能产生正确的响应报文,将向该PDU的发出者发送一个GetResponse报文,该PDU除了ERROR-STATUS置为genErr,ERROR-INDEX置为出错变量在变量LIST中的位置,其余与源PDU相同。
  
  第四中情况:如果上面的情况都没有发生,则本地协议实体向该PDU的发出者发送一个GetResponse报文,该PDU中将包含变量名和相应值的对偶表,ERROR-STATUS为noError,ERROR-INDEX为0,request-id域的值应与收到PDU的request-id相同。
  
  1.7.   GetNextRequest PDU
  GetNextRequest PDU的最重要的功能是表的遍历,这种操作受到了前面所说的管理变量的表示方法的支持,从而可以访问一组相关的变量,就好象他们在一个表内。
  
  下面通过一个例子解释表遍历的过程:
  
  被管设备维护如下路由表:
  
     Destination         NextHop     Metric
  
     10.0.0.99            89.1.1.42    5
  
     9.1.2.3             99.0.0.3    3
  
     10.0.0.51            89.1.1.42    5
  
  假设网管站欲取得这张路由表的信息,该表的索引是目的网络地址。
  
  网管站向被管设备发送一个GetNextRequest PDU,其中的受管对象的标识如下
  
  GetNextRequest(ipRouteDest, ipRouteNextHop, ipRouteMetric1)
  
  SNMP agent响应如下GetResponse PDU:
  
  GetResponse (( ipRouteDest.9.1.2.3 = "9.1.2.3" ),
  
   ( ipRouteNextHop.9.1.2.3 = "99.0.0.3" ),( ipRouteMetric1.9.1.2.3 = 3 ))
  
  网管站继续:
  
  GetNextRequest ( ipRouteDest.9.1.2.3,ipRouteNextHop.9.1.2.3,ipRouteMetric1.9.1.2.3 )
  
  agent响应:
  
  GetResponse((ipRouteDest.10.0.0.51="10.0.0.51"),(ipRouteNextHop.10.0.0.51="89.1.1.42"),( ipRouteMetric1.10.0.0.51 = 5 ))
  
  值得注意的是agent必须能够确定下一个管理变量名,以保证所有变量能被取到且只被取到一次。
  
  网管站继续:
  
  GetNextRequest ( ipRouteDest.10.0.0.51,ipRouteNextHop.10.0.0.51,ipRouteMetric1.10.0.0.51 )
  
  agent响应:GetResponse (( ipRouteDest.10.0.0.99 = "10.0.0.99" ),( ipRouteNextHop.10.0.0.99 = "89.1.1.42" ),( ipRouteMetric1.10.0.0.99 = 5 ))
  
  网管站继续:
  
  GetNextRequest(ipRouteDest.10.0.0.99,ipRouteNextHop.10.0.0.99,ipRouteMetric1.10.0.0.99)
  
  这时因为路由表中所有的行都被取遍,agent因返回路由表对象的下一字典后继即该管理对象在MIB树中的后序遍历的直接后继。这里应是nettoMediaIndex,管理对象的OBJECT IDENTIFIER。这个响应通知网管站对表的遍历已经完成。
  
  1.8.   GetResponse PDU
  GetResponse PDU只有当受到getRequest GetNextReque

 

原文:http://cisco.chinaitlab.com/others/25316.html

分享到:
评论

相关推荐

    最好的SNMP协议编程入门

    在这个“最好的SNMP协议编程入门”中,我们将探讨如何使用Java来实现SNMP的功能,从而更好地理解和操作网络环境。 首先,SNMP主要由三部分构成:管理站(Manager)、代理(Agent)和管理信息库(MIB)。在给定的...

    snmp从入门到精通

    Agent负责收集和提供管理信息,而SNMP协议则负责这些信息在Agent和Server之间的传输。客户端通常发起SNMP请求,并可以接收来自Agent的响应或 traps。 2. **MIB**:管理信息库是一个结构化的数据库,用于存储网络...

    snmp/snmp++协议基础入门

    SNMP++则是SNMP协议的一种高级实现,提供了更丰富的功能和更强大的性能,通常用于开发复杂的网络管理系统。 SNMP协议的基础知识主要包括以下几个方面: 1. **协议结构**:SNMP由管理信息库(MIB)、管理站...

    snmp开发入门基础

    SNMP(Simple Network Management Protocol,简单网络管理协议)是网络管理员用来监控和管理网络设备的常用工具。作为初学者,了解SNMP的基础知识是至关重要的。以下是对SNMP开发入门的一些核心概念和步骤的详细解释...

    snmp_intro_practice.rar_NET-SNMP_SNMP_SNMP Agent_SNMP 协议_net snm

    SNMP协议定义了管理站和代理之间的消息格式和交互过程,包括Get、Set、Trap等操作,用于获取、设置网络设备的配置参数或接收设备发送的报警信息。 "net_snmp"标签则强调了使用NET-SNMP库来实现这些功能。NET-SNMP...

    DP500028 SNMP协议原理ISSUE1.0_20061229_A.ppt

    该PPT主要介绍了SNMP协议的基本原理和知识,内容充实,主要介绍了简单网络管理协议的原理以及应用,是一份不可多得的入门级教程。

    snmpv1.1.rar_SNMP_SNMP 协议_java snmp_java snmpv1_snmp java

    1. SNMP协议基础: - 工作机制:SNMP基于UDP(用户数据报协议),使用端口161(SNMP服务)和162(SNMP陷阱)进行通信。 - 数据结构:MIB(Management Information Base)是SNMP中的核心,存储网络设备的配置和状态...

    SNMP MIB入门资料

    SNMP MIB(Management Information Base)是SNMP协议的核心组成部分,它定义了网络设备管理信息的结构和存储方式。 SNMP MIB是一个树状的数据库,包含了网络设备的各种可管理对象,如接口状态、内存使用情况、CPU...

    snmp4j入门实例+snmp4j.jar+XPsnmp安装包

    通过学习这个入门实例,开发者可以掌握如何使用SNMP4J进行设备查询和配置,同时对SNMP协议有更深入的理解。而XP SNMP的安装和配置则帮助开发者在本地进行测试,模拟真实的网络管理场景。在实际应用中,SNMP4J可以被...

    snmp示例程序,很好的snmp入门程序

    "consoleExamples"这个文件可能包含了一些命令行接口的SNMP示例代码,这将帮助初学者理解如何使用SNMP协议进行通信。通常,这些例子会涵盖如何初始化SNMP会话,如何执行GET和SET请求,以及如何处理TRAP通知。通过...

    snmp入门培训资料

    SNMP(Simple Network Management Protocol)是网络管理领域中一种广泛使用的协议,主要目的是为了管理和监控网络设备。...通过中兴通讯的SNMP入门培训,可以深入了解SNMP协议及其在网络管理中的应用。

    SNMP 入门与编程资料

    SNMP协议分为多个版本,包括SNMPv1、SNMPv2c和SNMPv3。SNMPv1是最基本的版本,但安全性较弱;SNMPv2c在v1基础上增加了更多的功能和性能改进;SNMPv3则提供了身份验证、加密和隐私保护,增强了安全性。 在SNMP编程中...

    SNMP的入门程序MIBWalk的运行和代码分析

    MIBWalk是基于SNMP协议的一个入门级程序,用于在网络中遍历和查询MIB(Management Information Base)信息,相当于在SNMP环境中执行“walk”操作,即获取MIB树中的所有对象。 实验目的是通过编译运行MIBWalk源代码...

    snmp入门例子

    SNMP 入门例子 SNMP(Simple Network Management Protocol)是 TCP/IP 五层协议中的应用层协议,提供了一种简单和方便的模式来管理网络中的各个元素。这篇文章将对 SNMP 进行详细的介绍,并提供了相关的例子,适合 ...

    SNMP 入门到开发。已在Window2008R2 上使用

    3. **通信协议**:SNMP协议本身,定义了管理站和代理之间数据报交换的格式。通常,SNMP使用UDP作为传输层协议,因为其效率高且无需建立连接。 SNMP的发展历程: - SNMPv1在1989年发布,是最初的版本,主要用于IP...

    SNMP.zip_SNMP

    这个SNMP.zip文件中的SNMP.docx文档,很可能是对SNMP协议的深入解析,适合初学者学习和理解。 SNMP协议主要由三部分构成:管理信息结构(Management Information Base,MIB)、管理站(Manager)和代理(Agent)。...

    java_conn_SNMPtrap_send_accept.rar_SNMP_SNMPtrap_snmp java

    4. **Snmp功能实现**:`使用snmp4j实现Snmp功能.mht`文件涵盖了SNMP的各种操作,如GET、GETNEXT、SET以及Inform请求,这些都是SNMP协议的核心功能。 5. **SNMP4J示例代码**:`JAVA利用SNMP4J实现Snmp Trap例子.mht`...

    snmp.zip,mfc开发,很不错的

    这可能是某个开发者或团队为了帮助其他开发者理解和使用SNMP协议,在MFC环境下进行网络管理程序开发时所编写的代码示例、文档或工具。 SNMP主要由三个组件构成:管理站(Manager)、代理(Agent)和管理信息库(MIB...

Global site tag (gtag.js) - Google Analytics