SNMP协议详解

发布时间:2025-12-09 16:29:19 浏览次数:7

SNMP协议详解

  • 简单网络管理协议(SNMP)
    • 管理信息库MIB:
    • 管理信息结构(SMI)
      • ◆ 简单类型(simple)
      • ◆简单结构类型(simple-constructed)
      • ◆ 应用类型(application-wide)
  • SNMP共有5种报文,所以其PDU也有5中,第七点会详细介绍SNMP的5种协议数据单元。
    • 公共SNMP首部
    • get/set首部
    • trap首部
    • 变量绑定(variable-bindings)
    • 管理变量的表示
    • SNMP的运行过程
  • SNMP集中管理的配置
    • 被管理设备
    • SNMP代理
    • NMS(网络管理系统)
    • 哪些网络设备可以被执行SNMP的网络管理?
    • 为什么可以精确到设备上的每个部件或功能?

SNMPisan允许在15454网络上使用的应用层通信协议通过NMP访问外部网络,网络管理员可以管理网络性能,在网络规模日趋扩大,设备越来越多,功能越来越强的同时,网络的管理面临新的挑战,这将导致网络管理困难加剧。

网络管理功能分为:配置管理、性能管理、故障管理、安全管理、计费管理。
网络管理的组成:被管理端、代理程序、网络管理器、公共网络管理协议、管理数据库(MIB)。

简单网络管理协议(SNMP)

是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。

一套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议。

管理信息库MIB:

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。它们之间的关系如图1所示。

图1 NMS Agent和MIB的关系

MIB文件中的变量使用的名字取自ISO和ITU管理的对象标识符(object identifier)名字空间。它是一种分级树的结构。如图2所示,第一级有三个节点:ccitt、iso、iso-ccitt。低级的对象ID分别由相关组织分配。一个特定对象的标识符可通过由根到该对象的路径获得。一般网络设备取iso节点下的对象内容。如名字空间ip结点下一个名字为ipInReceives的MIB变量被指派数字值3,因而该变量的名字为:

iso.org.dod.internet.mgmt.mib.ip.ipInReceives

相应的数字表示(对象标识符OID,唯一标识一个MIB对象)为:

1.3.6.1.2.1.4.3

图2 MIB树结构

当网络管理协议在报文中使用MIB变量时,每个变量名后还要加一个后缀,以作为该变量的一个实例。如ipInReceives的实例数字表示为:1.3.6.1.2.1.4.3.0.

需要注意的是,MIB中的管理对象的OID有些需要动态确定,如IP路由表,为了指明地址202.120.86.71的下一站路由(next hop),我们可以引用这样的实例:

iso.org.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.202.120.86.71, 相应的数字表示为:1.3.6.1.2.1.4.21.1.7.202.120.86.71

对于这种动态对象标识的实例,由于无法转换为预先指定的Readkey名称,与飞邻的产品架构冲突(需要动态生成可变Readkey),暂不考虑支持。

管理信息结构(SMI)

SMI定义了SNMP框架所用信息的组织、组成和标识,它还为描述MIB对象和描述协议怎样交换信息奠定了基础。

SMI定义的数据类型:

◆ 简单类型(simple)

Integer:整型是-2,147,483,648~2,147,483,647的有符号整数

octet string: 字符串是0~65535个字节的有序序列

OBJECT IDENTIFIER: 来自按照ASN.1规则分配的对象标识符集

◆简单结构类型(simple-constructed)

SEQUENCE 用于列表。这一数据类型与大多数程序设计语言中的“structure”类似。一个SEQUENCE包括0个或更多元素,每一个元素又是另一个ASN.1数据类型

SEQUENCE OF type 用于表格。这一数据类型与大多数程序设计语言中的“array”类似。一个表格包括0个或更多元素,每一个元素又是另一个ASN.1数据类型。

◆ 应用类型(application-wide)

IpAddress: 以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节;

counter:计数器是一个非负的整数,它递增至最大值,而后回零。在SNMPv1中定义的计数器是32位的,即最大值为4,294,967,295;

Gauge :也是一个非负整数,它可以递增或递减,但达到最大值时保持在最大值,最大值为232-1;

time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;

SNMP共有5种报文,所以其PDU也有5中,第七点会详细介绍SNMP的5种协议数据单元。

SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。

get-request操作:从代理进程处提取一个或多个参数值。

get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值。

set-request操作:设置代理进程的一个或多个参数值。

get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。

前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,为了简化起见,前面3个操作今后叫做get、get-next和set操作。图1描述了SNMP的这5种报文操作。请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。

图2是封装成UDP数据报的5种操作的SNMP报文格式。可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部、trap首部、变量绑定。

公共SNMP首部

共三个字段:

  • 版本: 写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0。
  • 共同体:(community)共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。
  • PDU类型:根据PDU的类型,填入0~4中的一个数字,其对应关系如表2所示意图。
  • PDU类型名称
    0get-request
    1get-next-request
    2get-response
    3set-request
    4trap

    get/set首部

  • 请求标识符(request ID):这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文
  • 差错状态(error status):由代理进程回答时填入0~5中的一个数字,见表3的描述
  • 表3 差错状态描述

    差错状态名字说明
    0noError一切正常
    1tooBig代理无法将回答装入到一个SNMP报文之中
    2noSuchName操作指明了一个不存在的变量
    3badValue一个set操作指明了一个无效值或无效语法
    4readOnly管理进程试图修改一个只读变量
    5genErr某些其他的差错
    • 差错索引(error index);当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。

    trap首部

    企业(enterprise):填入trap报文的网络设备的对象标识符。此对象标识符肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。

    • trap类型:此字段正式的名称是generic-trap,共分为表4中的7种。
    trap类型名字说明
    0coldStart代理进行了初始化
    1warmStart代理进行了重新初始化
    2linkDown一个接口从工作状态变为故障状态
    3linkUp一个接口从故障状态变为工作状态
    4authenticationFailure从SNMP管理进程接收到具有一个无效共同体的报文
    5egpNeighborLoss一个EGP相邻路由器变为故障状态
    6enterpriseSpecific代理自定义的事件,需要用后面的“特定代码”来指明

    当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。

  • 特定代码(specific-code) 指明代理自定义的时间(若trap类型为6),否则为0。
  • 时间戳(timestamp)指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。
  • 变量绑定(variable-bindings)

    指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。

    管理变量的表示

    管理变量表示管理对象类型在某一时刻的值(或称该类型的实例),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称作实例。

    SNMP的运行过程

    驻留在被管设备上的AGENT从UDP端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果。

    下面根据RFC1157详细介绍Agent接受到报文后采取的动作:

    首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。

    第二步:将报文中的版本号取出,如果与本Agent支持的SNMP版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP版本1。

    第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。

    第四步:从通过验证的ASN.1对象中提出协议数据单元PDU,如果失败,丢弃报文,不做进一不处理。否则处理PDU,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。

    根据不同的PDU,SNMP协议实体将做不同的处理:

    SNMP集中管理的配置

    集中在一个点上,统一管理哪些,企业网络当中的一个点上面 ,就可以监控,其它网络设备,cpu 、内存、接口状态等实时信息

    被管理设备

    SNMP代理

    SNMP代理:管理代理通常是,也就是说被管理设备上的一个功能模块 ,换句话说被管理全部要支持SNMP

    NMS(网络管理系统)

    把本地的信息转换成SNMP的格式发送,给我们网络当中一个集中的管理平台,就是我们的 NMS(网络管理系统)

    NMS(网络管理系统) 和被管理网源 (SNMP代理) 一定是相同的

    不同的团体名称是不能相互管理的


    哪些网络设备可以被执行SNMP的网络管理?

    设备上能支持我们的功能模块就是(具备SNMP代理),嵌入网络设备网络模块

    为什么可以精确到设备上的每个部件或功能?


    不同组织结构的编号 ,这个设备能管制什么程度,是由MIB信息库决定的 ,信息库里面就把被管理设备的不同部件,去对应一个oid的字符串 ,我为什么可以能管理2950的交换机 它实际在MIB库里面,去找到了2950的交换机OID的字符串,落实代表2950的交换机


    org 是组织的


    VLAN 是交换机
    E1/0 是路由器

    SNMP协议是什么?
    SNMP 函数
    SNMP协议详解
    VLAN交换机设置
    PHP - Manual: SNMP (官方文档)
    基于php的snmp管理端开发
    SNMP学习笔记之SNMP的安装及Python的调用

    需要做网站?需要网络推广?欢迎咨询客户经理 13272073477