您当前的位置:首页 > 计算机 > 网络通信

【snmp】简单网络管理协议SNMP

时间:04-11来源:作者:点击数:

术语

术语                     解释                    
SNMP (Simple Network Management Protocol) 简单网络管理协议
NMS(Network Management System) snmp网络管理系统
Agent snmp代理服务
MIB 管理信息库
SMI(Structure of management information) 管理信息结构,是一种语言
USM 基于用户安全模型
VACM 基于视图访问控制模型

一、什么是snmp

  SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB体系结构,改进后的协议就是著名的SNMP。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

  SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

  SNMP管理站和SNMP代理之间是松散耦合。他们之间的通信是通过UDP协议完成的。一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。但是当SNMP代理检测到网络元素异常的时候,也可以主动向SNMP管理站发送消息,通告当前异常状况。

  SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

  SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了【GET】操作;管理员需要向设备执行设置操作,所以SNMP提供了【SET】操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了【Trap】操作。

二、SNMP和UDP

  SNMP采用UDP协议在管理端和agent之间传输信息。SNMP采用UDP161端口接收和发送请求,162端口接收trap。SNMP消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。

三、snmp的实现结构

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为【管理站】,负责网管命令的发出、数据存储、及数据分析。【被】监管的设备上运行一个SNMP代理(Agent)),代理实现设备与管理站的SNMP通信。

管理站指的是运行了可以执行网络管理任务软件的服务器,通常被称作为网络管理工作站(NMS),NMS负责采样网络中代理(Agent)的信息,并接收代理(Agent)的trap。代理(Agent)是实际网络设备中用来实现SNMP功能的部分。代理(Agent)在UDP的161端口接收管理站(NMS)的读写请求消息,管理站(NMS)在UDP的162端口接收代理(Agent)的事件通告消息。所以一旦获取设备的访问权限(community,默认为public),就可以访问设备信息、改写和配置设备参数。由于采用UDP协议,不需要在代理(Agent)和管理站(NMS)之间保持连接。

管理站(NMS)与代理端(Agent)通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站(NMS)和代理(Agent)都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站(NMS)向代理(Agent)申请MIB中定义的数据,代理(Agent)识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站(NMS),完成一次管理操作。

SNMP协议之所以易于使用,这是因为它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap

  1. Get:管理站(NMS)读取代理(Agent)处对象的值。它是SNMP协议中使用率最高的一个命令,因为该命令是从网络设备中获得管理信息的基本方式。
  2. Set:管理站(NMS)设置代理者(Agent)处对象的值。它是一个特权命令,因为可以通过它来改动设备的配置或控制设备的运转状态。它可以设置设备的名称,关掉一个端口或清除一个地址解析表中的项等。
  3. Trap: 代理(Agent)主动向管理站(NMS)通报重要事件。它的功能就是在网络管理系统没有明确要求的前提下,由代理(Agent)通知网络管理系统(NMS)有一些特别的情况或问题发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。Trap 消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。管理站(NMS)可相应的作出处理。

四、snmp版本

SNMP目前共有v1,v2c,v3这三个版本

SNMPv1

SNMPv1是 SNMP 协议的最初版本,提供最小限度的网络管理功能。SNMPv1 的 SMI 和 MIB 都比较简单,且存在较多安全缺陷。SNMPv1 采用团体名认证。团体名的作用类似于密码,用来限制NMS对Agent 的访问。如果 SNMP 报文携带的团体名没有得到 NMS/Agent 的认可,该报文将被丢弃。SNMPV1 是一种简单的请求/响应协议。网络管理系统发出一个请求,snmp代理则返回一个响应。这一行为的实现是通过使用四种协议操作中的其中任一种完成的。这四种操作分别是GET、GETNEXT、SET 和 TRAP。

NMS 通过 GET 操作,从 SNMP 代理处得到一个或更多的对象(实例)值。如果代理处不能提供请求列表中所有的对象(实例)值,它也就不提供任何值。

NMS 使用 GETNEXT 操作,请求代理从请求列表或对象列表中取出下一 个对象实例值。

NMS 通过 SET 操作向 SNMP 代理发送命令,要求对对象值重新配置。

SNMP 代理通过 TRAP 操作不定时的通知 NMS 所发生的特定事件

SNMPV2

SNMPV2中还定了两种新操作,即GET BULK和 INFORM。NMS 通过 GET BULK 操作能有效地获取大块数据,如对象列表中的多行。请求多少数据 GETBULK 返回一个包含尽可能多的请求数据的应答消息。INFORM 操作使一个NMS 能发送 TRAP 给另一个 NMS 并收到回复。SNMPV2中,如果回复 GET BULK 操作的 SNMP 代理不能提供请求表中所有变量值,那么SNMP代理只提供部分结果。

SNMPV3

SNMPv3主要在安全性方面进行了增强,它采用了USM(基于用户的安全控制模型)和 VACM(基于视图的访问控制模型)技术。USM 提供了认证和加密功能,VACM 确定用户是否被允许访问特定的 MIB 对象以及访问方式。

SNMPV3中增加了安全管理方式及远程控制。SNMPV3 结构引入了基于用户的安全模型(USM)用于保证消息安全,基于视图的访问控制模型(VACM)用于访问控制。

SNMPV3使用 SNMP SET 命令配置MIB对象,使之能动态配置SNMP代理。这种动态配置方式支持本地或远程地配置实体的添加、删除及修改。

五、管理信息库MIB

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

MIB Tree

MIB数据对象以一种树状分层结构进行组织,这个树状结构中的每个分枝都有一个专用的名字和一个数字形式的标识符。上图表示的是标准MIB的组织体系,列出了从MIB结构树的树根到各层树枝的全部内容。结构树的分枝实际表示的是数据对象的逻辑分组。而树叶,有时候也叫节点(node),代表了各个数据对象。在结构树中使用子树表示增加的中间分枝和增加的树叶。 

使用这个树状分层结构,MIB浏览器能够以一种方便而且简洁的方式访问整个MIB数据库。MIB浏览器是这样一种工具,他能够遍历整棵MIB结构树,通常以图像显示的形式来表示各个分枝和树叶对象。能够通过其数字标识符来查找MIB中的数据对象,这个数字标识符号从结构树的顶部(或根部)开始,直到各个叶子节点(即数据对象)为止。这种访问方式和文档系统的组织方式一致。两者的主要区别在于文档系统中的路径名能够以绝对也能够以相对方式表示,而MIB数据对象只能以绝对方式表示,不能使用相对方式。例如,在图中,有三个顶级对象,即ISO、ITU-T和这两个组织的联合体。iso(1)位于结构树的最上方,而sysDescr(1)处在叶子节点的位置,现在看不到。通常用带点的符号来表示数据对象的标识符。要访问数据对象sysDescr(1),其完整的标识符应该是这样的:iso.org.dod.internet.mgmt.mib-2.system.sysDescr(这个标识符应该从左向右读)。数据对象也能够以另一种更短的格式表示,即用数字形式标识符代替分枝名形式的表示形式。这样,上面的那种形式的标识符iso.org.dod.internet.mgmt.mib-2.system.sysDescr 还能够用 1.3.6.1.2.1.1.1 来表示。这两种表达格式的作用是一致的,都表示同一个MIB数据对象。dod指Department of Defense美国国防部,mgmt表示管理,以前用mib表示管理信息库,现在改名为mib-2,system表示主机或路由器的操作系统这一类的信息。

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

OID(ObjectIdentifier):每个管理对象都有自己的OID(ObjectIdentifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点(.)分隔开,树的叶子节点才是真正能够被管理的对象。

六、管理信息结构(SMI)

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

SMI定义的数据类型:

◆ 简单类型(simple)

INTEGER:整型是-232-1~232的有符号整数

OCTER STRING:字符串是0~65535个字节的有序序列

DisplayString:0~多个8bit字节,每个字节必须是ASCII码,相当于字符串

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

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

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

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

◆ 应用类型(application-wide)

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

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

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

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

七、SNMP的消息构成

SNMP协议定义了数据包的格式,及网络管理员和管理代理之间的信息交换,它还控制着管理代理的MIB数据对象。因此,可用于处理管理代理定义的各种任务。

一条SNMP消息由"版本号"、"SNMP共同体名"和"协议数据单元(PDU)"构成,数据包的长度不是固定的。

  • 版本识别符(versionidentifier):用于说明现在使用的是哪个版本的SNMP协议,确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。
  • 团体名(CommunityName)团体(community)是基本的安全机制,用于实现SNMP网络管理员访问SNMP管理代理时的身份验证。类似于密码,默认值为 public。团体名(Community name)是管理代理的口令,管理员被允许访问数据对象的前提就是网络管理员知道网络代理的口令。如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。
  • 协议数据单元(PDU)PDU(协议数据单元)是SNMP消息中的数据区, 即Snmp通信时报文数据的载体。PDU指明了SNMP的消息类型及其相关参数。

1 、SNMP的5种协议数据单元

SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap。

(1)Get-Request、Get-Next-Request与Get-Response

SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。

(2)Set-Request

SNMP管理站用Set-Request可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。

(3)Trap

SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。

上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP封装。SNMP工作流程如图:

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

(1)公共SNMP首部

共三个字段:

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

(2)get/set首部

  • 请求标识符(request ID):这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文
  • 差错状态(error status):由代理进程回答时填入0~5中的一个数字,见如下表的描述
差错状态描述
差错状态 名称 说明
0 noError 一切正常
1 tooBig 代理无法将回答装入一个SNMP报文之中
2 noSuchName 操作指明了一个不存在的变量
3 badValue 一个set操作指明了一个无效值或无效语法
4 readOnly 管理进程试图修改一个只读变量
5 genErr 其他的差错

差错索引(error index)

当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。

(3)trap首部

trap报文格式如下:

  • 企业(enterprise):填入trap报文的网络设备的对象标识符。此对象标识符肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
  • 代理地址:即代理进程所在系统的地址。
  • trap类型:此字段正式的名称是generic-trap,共分为表4中的7种。
trap类型 名字 说明
0 coldStart 代理进行了初始化
1 warmStart 代理重新进行了初始化
2 linkDown 一个接口从工作状态变为故障状态
3 linkUp 一个接口从故障状态变为工作状态
4 authenticationFailure 从SNMP管理进程收到无效共同体的报文
5 egpNeighborLoss 一个EGP相邻路由器变为故障状态
6 enterpriseSpecific 代理自定义的事件,需要用后面的"特定代码"来指明

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

  • 特定代码:特定代码仅仅在trap类型为6时有效,否则都置为0,他是厂家自定义的事件代码。
  • 时间戳(timestamp):指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。

(4)变量绑定(variable-bindings)

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门