SNMP简单网络管理协议及开发测试工具

简介

SNMP 是专门设计用于在 IP 网络管理网络节点服务器工作站路由器交换机及HUBS等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)获知网络出现问题。

SNMP的前身是简单网关监控协议(SGMP,用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMIMIB,改进后的协议就是著名的SNMP。基于TCP/IP的SNMP网络管理框架是工业上的现行标准,由3个主要部分组成,分别是管理信息结构SMI(Structure ofManagement Information)、管理信息库MIB管理协议SNMP

  • SMI定义了SNMP框架所用信息的组织和标识,为MIB定义管理对象及使用管理对象提供模板。

  • MIB定义了可以通过SNMP进行访问的管理对象的集合

  • SNMP协议是应用层协议,定义了网络管理者如何对代理进程的MIB对象进行读写操作。

SNMP中的MIB是一种树状数据库,MIB管理的对象,就是树的端节点,每个节点都有唯一位置和唯一名字。IETF规定管理信息库对象识别符(OID,Object Identifier)唯一指定,其命名规则就是父节点的名字作为子节点名字的前缀。MIB树结构如下图所示:

snmps树

下表列出了常用的一些例子,这些类别是MIB 结构树中mib结点的子树。

MIB类别

包含的相关信息

system

扫描二维码关注公众号,回复: 9277269 查看本文章

被管理对象(如主机、路由器等设备)系统的总体信息

interface

各个网络接口的相关信息

at

地址转换(如:ARP映射)的相关信息

ip

IP协议的实现和运行相关信息

icmp

ICMP协议的实现和运行相关信息

tcp

TCP协议的实现和运行相关信息

udp

UDP协议的实现和运行相关信息

ospf

OSPF(开发最短路径优先)协议的实现和运行相关信息

bgp

BGP(边界网关)协议的实现和运行相关信息

rmon

远程网络坚实和实现和运行相关信息

Rip-2

RIP协议的实现和运行相关信息

dns

域名系统的实现和运行相关信息

组成部分

一个SNMP管理的网络由下列三个关键组件组成:

  • 网络管理系统(NMS,Network-management systems)

  • 被管理的设备(managed device)

  • 代理者(agent)

网络管理系统运行应用程序,以该应用程序监视并控制被管理的设备。也称为管理实体(managingentity),网络管理员在这儿与网络设备进行交互。网络管理系统提供网络管理需要的大量运算和记忆资源。一个被管理的网络可能存在一个以上的网络管理系统。

被管理的设备是一个网络节点,它包含一个存在于被管理的网络中的SNMP代理者被管理的设备通过管理信息库(MIB)收集并存储管理信息,并且让网络管理系统能够通过SNMP代理者取得这项信息。任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网络管理系统,网络管理系统既可以指一台专门用来进行网络管理的服务器,也可以指某个网络设备中执行管理功能的一个应用程序)和Agent之间的沟通桥梁。它们之间的关系如下图所示:

代理者是一种存在于被管理的设备中的网络管理软件模块。代理者控制本地机器的管理信息,以和SNMP兼容的格式传送这项信息。

技术优点

SNMP是管理进程(NMS)和代理进程(Agent)之间的通信协议。它规定了在网络环境中对设备进行监视和管理的标准化管理框架、通信的公共语言、相应的安全和访问控制机制。网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。

SNMP具有以下技术优点:

  • 基于TCP/IP互联网的标准协议,传输层协议一般采用UDP

  • 自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告。

  • 屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本的功能集,使得管理任务与被管设备的物理特性和实际网络类型相对独立,从而实现对不同厂商设备的管理。

  • 简单的请求—应答方式和主动通告方式相结合,并有超时和重传机制。

  • 报文种类少,报文格式简单,方便解析,易于实现。

  • SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性。

架构方式

主代理

主代理是一个在可运行SNMP的网络组件上运作的软件,可回应从管理站发出的SNMP要求。它的角色类似客户端/服务器结构(Client/Server)术语中的服务器。主代理依赖子代理提供有关特定功能的管理信息

如果系统当前拥有多个可管理的子系统,主代理就会传递它从一个或多个子代理处收到的请求。这些子代理在一个子系统以及对那个子系统进行监测和管理操作的接口内为关心的对象建模。主代理和子代理的角色可以合并,在这种情况下我们可以简单的称之为代理(agent)。

子代理

子代理是一个在可运行SNMP的网络组件上运作的软件,运行在特定子系统的特定管理信息库(MIB,Management Information Base)中定义的信息和管理功能。子代理的一些能力有:

搜集主代理的信息

配置主代理的参数

回应管理者的要求

产生警告或陷阱

对协议和管理信息结构的良好分离使得使用SNMP来监测和管理同一网络内上百的不同子系统非常简单。MIB模型运行管理OSI参考模型的所有层,并可以扩展至诸如数据库,电子邮件以及J2EE参考模型之类的应用。

管理站

管理者或者管理站提供第三个组件。它和一个客户端/服务器结构下的客户端一样工作。它根据一个管理员或应用程序的行为发出管理操作的请求,也接收从代理处获得的TRAP。

协议种类

目前, SNMP 有 3 种: SNMPV1 、 SNMPV2 、 SNMPV3。第 1 版和第 2 版没有太大差距,但 SNMPV2 是增强版本,包含了其它协议操作。与前两种相比, SNMPV3 则包含更多安全和远程配置。为了解决不同 SNMP 版本间的不兼容问题, RFC3584 中定义了三者共存策略。

SNMP 还包括一组由RMON、RMON2、MTB、MTB2、OCDS及OCDS定义的扩展协议。

协议结构

SNMP 是一种应用程序协议,封装在UDP中。各种版本的 SNMP 信息通用格式如下所示:

Version Community PDU

Version:SNMP 版本号。管理器和代理器必须使用相同版本的 SNMP。需要删除具有不同版本号的信息,并不对它们作进一步的处理。

Community:团体名称,用于在访问代理器之前认证管理器

PDU(协议数据单元):SNMPv1、v2 和 v3 中的 PDU 类型和格式将在对应文件中作具体介绍。

在分层网络结构,例如在开放式系统互联(OSI)模型中,在传输系统的每一层都将建立协议数据单元(PDU)PDU包含来自上层的信息和当前层的实体附加的信息,这个PDU会被传送到下一较低的层物理层实际以一种编帧的位流形式传输这些PDU,这些PDU由协议栈的较高层建造。接收系统自下而上传送这些分组通过协议栈,并在协议栈的每一层分离出PDU中的相关信息

每一层附加到PDU上的信息,是指定给另一个系统的同等层的,这就是对等层进行一次通信会话协调的过程。通过从传输层段剥离报头,执行协议数据检测以确定作为传输层段的部分数据的协议段的数据,以及执行标志验证和剥离,从而处理数据段。同时提供用于处理数据段的技术,其中接收到协议数据单元的报头部分。利用所接收的报头部分来确定将储存在应用空间中的数据的字节数。而且,利用所接收的报头部分来确定下一个协议数据单元的下一个报头部分。然后,发出窥视命令以获得下一个报头部分。另外提供用于利用所储存的部分循环冗余校验摘要和剩余数据来执行循环冗余校验的技术。

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

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

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

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

  • get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。

  • trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生

前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,为了简化起见,前面3个操作今后叫做get、get-next和set操作。

注意:在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文

开发和使用

第一版

SNMP的第一个RFC系列出现在1988年:

RFC 1065:基于TCP/IP网络的管理信息的结构和认定

RFC 1066:以基于TCP/IP网络的网络管理为基础的管理信息

RFC 1067:一个简单网络管理协议

这些协议被废除经由:

RFC 1155:基于TCP/IP网络的管理信息的结构和认定

RFC 1156:以基于TCP/IP网络的网络管理为基础的管理信息

RFC 1157:一个简单网络管理协议

SNMP协议工作在OSI模型应用层(第七层)。它(在第一版中)指定了四种核心协议数据单元(PDU):

GET,用来得到一条管理信息。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等

GETNEXT,用来反复得到管理信息的串行

SET,用来给一个被管理的子系统制造一个变化。SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。

TRAP,用来报告一个关于被管理子系统的警告或其他异步事件

典型的,SNMP为代理使用UDP端口161,为管理站使用UDP端口162

第一版因为其脆弱的安全性而备受争议。客户端的认证使用明码传送。在80年代,SNMP第一版被设计出来的时期,互联网标准的认证/安全并不被主要的协议设计团体所重视。

第二版

SNMP第二版(RFC 1441–RFC 1452)修订了第一版并且包含了在性能、安全、机密性和管理者之间通信这些领域的改进。它引入了GETBULK以取代反复的GETNEXT,藉以在单个请求中获取大量的管理数据。然而,SNMP第二版的新安全系统被认为过于复杂,而不被广泛接受。

SNMP v2c(基于社区的SNMP第二版)定义于RFC 1901–RFC 1908,一开始也非正式的被称为SNMP第1.5版。SNMPv2c包含SNMP第二版除了受争议的新SNMP第二版安全模型以外的部份,并以SNMP第一版的简单的基于社区的安全性方案取而代之。

SNMP v2u(基于用户的SNMP第二版)定义于RFC 1909–RFC 1910。这是一个SNMP第一版和SNMP第二版的折衷方案,试图提供比SNMP第一版更好的安全性,又不遭遇SNMP第二版的高复杂度。这产生一个被商业化的变种,称为SNMP v2*,而且它的机制最后被SNMP第三版的两个安全性框架之一采用。

第三版

Internet工程工作小组(IETF)把在RFC3411-RFC3418(STD0062)中定义的SNMP第三版作为2004年的标准版本。IETF将先前的版本定为“Obsolete”或“Historical”。

实际上,SNMP实现通常支持多个版本:典型的SNMPv1、SNMPv2c以及SNMPv3。参见RFC3584“Internet标准网络管理框架第一、二、三版间的共存”。

SNMP第三版提供三项重要的服务:认证、隐私和访问控制

应用

在大型网络管理中,网络管理员比较头痛的问题就是如何实时了解不在身边的网络设备的运行状况。若要一台一台的去查看网络设备的运行现状,那明显不是很现实。实际网络中,利用SNMP协议自动帮助管理员收集网络运行状况的方法应用最为广泛。通过这种方法,网络管理员只需要坐在自己的位置上,就可以了解全公司的网络设备的运行情况。有了这个简单网络管理协议(SNMP),网络管理员可以很方便的在SNMP Agent和NMS之间交换管理信息。SNMP的主要作用就是帮助企业网络管理人员更方便的了解网络性能、发现并解决网络问题、规划网络的未来发展。 

SNMP开发工具包

snmp4j是一个开源的基于java语言开发的snmp工具包,基于jdk1.8。

一般便宜的设备都不支持SNMP协议,因为这种低端的接入设备根本没有网络管理的必要,并且家用设备 一般都在3台以内,所以Snmp协议也用不到的。

SNMP walk与get的区别

snmpwalk是对OID值的遍历(比如某个OID值下面有N个节点,则依次遍历出这N个节点的值。如果对某个叶子节点的OID值做walk,则取得到数据就不正确了,因为它会认为该节点是某些节点的父节点,而对其进行遍历,而实际上该节点已经没有子节点了,那么它会取出与该叶子节点平级的下一个叶子节点的值,而不是当前请求的节子节点的值。)SNMPWALK是一个通过SNMP GET-NEXT类型PDU,实现对目标AGENT的某指定MIB分支信息进行完整提取输出的命令工作。

snmpget是取具体的OID的值。(适用于OID值是一个叶子节点的情况

发布了133 篇原创文章 · 获赞 478 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/fuhanghang/article/details/104291230