一、什么是SNMP?
SNMP是 “Simple Network Management Protocol” 的缩写,中文意思是简单网络管理协议,它是由互联网工作小组在RFC1157中定义的应用层协议,用于在网络实体或节点之间交换管理或监控信息。
二、为什么需要SNMP?
作为运维人员,我们很大一部分的工作就是为了保证我们的网络能够正常、稳定的运行。因此监控,控制,管理各种网络设备成了我们日常的工作。在网络兴起的早期,维护方式就是运维人员蹲在近端对设备进行各种操作,当网络设备越来越多,网络规模越来越大时,管理工作会变得越来越单调乏味,这样的近端维护方式也近乎不可能。因此,远程管理网络的需求日益迫切,SNMP应运而生。使用SNMP,一个运行网管软件的工作站就能对成千上万的网络设备进行监控和信息采集,这些信息可以用来构建网络或者定位网络中的问题。
三、SNMP的优点
如其名字所述,这个协议简单易懂,部署的开销成本也小。正因为它足够简单,所以被广泛的接受,事实上它已经成为了主要的网络管理标准。在一个网络设备上实现SNMP的管理比绝大部分其他管理方式都简单直接。
使用SNMP将带来如下好处:
标准化的协议:SNMP是TCP/IP网络的标准网络管理协议。互联网标准协议是由互联网组织志愿贡献的开放、非专利性的,SNMP的维护及将来所有的增强都将基于现有的协议标准。
广泛认可:所有主流供应商都支持SNMP。所有SNMP管理的设备使用相同的管理接口以支持通用的管理消息集合。
可移植性:SNMP独立于操作系统和编程语言。SNMP的功能设计同样是可移植的。同时它定义了一套核心操作集,所有支持SNMP的设备都需要支持这套操作。
轻量级:SNMP增强对设备的管理能力的同时不会对设备的操作方式或性能产生冲击。网络设备可以以极小的资源消耗和些微的负载作为代价增加SNMP的管理支持。
可扩展性:在所有SNMP管理的设备上都会支持相同的一套核心操作集。SNMP也支持计算机网络设备中各种类型的设备信息的交互,设备加入网络也变得简单。
广泛部署:SNMP是最流行的管理协议,最为受设备供应商关注,被广泛部署在各种各样的设备上。
四、SNMP的关键特征
SNMP一般主要由三个组件构成,这三个组件分别是:
网络设备:一般是指网络中需要监控和管理的设备或管理对象。
Agent:agent是网络设备和管理组件的中间件,是驻留在网络设备中的程序进程,它收集设备的管理信息并与管理组件交互。
一个典型的agent应有如下特征:
●支持完整的SNMP协议
●保存与检索定义在MIB中的管理信息
●收集与维护本地设备的信息
●发送事件给管理组件
●作为某些非SNMP可管理的节点上的代理
管理组件:一个管理组件或者说管理系统是一个远程部署的独立实体(区别于agent部署于被管理设备上)。一般典型可视为一台部署了管理组件的计算机,并且可能从地理位置上都与网络设备相隔甚远,管理者只需要通过这台计算机就能够对设备进行各种监控与管理操作。
一个典型的管理组件应有如下特征:
●实现网络管理系统
●支持完整的SNMP协议
●查询agent,获取agent 的响应消息,设置agent的变量,告知agent异步事件已收到等
通讯:管理组件与agent之间以协议数据单元进行通讯( Protocol Data Units,PDUs),数据在进行网络传输前必须进行分块和封装,SNMP传输的过程中,数据首先会被封装成PDU,PDU再被UDP协议封装进行传输。
SNMP消息的格式可以参考下图
1.msgVersion 指定SNMP的版本
2.msgID 指定SNMP消息唯一辨识符
3.msgMaxSize 指定交互SNMP实体所能接收的最大消息大小
4.msgFlags 指定消息的安全级别
5.msgSecurityModel 指定消息所使用的安全模式.SNMPv3为USM
6.msgAuthoritativeEngineID 此消息交互的SNMP实体的 SNMP EngineID
7.msgAuthoritativeEngineBoots 此消息交互的SNMP实体启动的次数
8.msgAuthoritativeEngineTime 此消息交互的SNMP实体自上次启动后所过去的时间
9.msgUserName 此消息交互的SNMP实体所使用的用户名
10.msgAuthoritaticationParameters 认证协议的参数
11.msgPrivacyParameters 加密协议的参数
12.contextEngineID 作为实现了某个具体管理功能上下文的唯一辨识符
13.contextName 用来标记一个上下文的名称
14.pdu SNMP实体间通信数据单元
管理模式:SNMP 对于管理组件和agent的实现一般可划分为如下三个层面:
●协议,定义SNMP的基本操作和管理组建与agent间消息交换的格式
●管理信息结构(Structure of Management Information (SMI)),定义SNMP该以何种形式访问管理对象的规则集合
●管理信息库(Management Information Base (MIB)),定义管理对象属性的集合
MIB和SMI使用一种叫做ASN.1(Abstract Syntax Notation One)的表示法来描述,这是一种以ASCII文本格式清晰描述数据的表示法。MIB的数据通过SNMP消息进行网络传输,传输前会通过简单编码规则( Basic Encoding Rules (BER))进行编码。
五、SNMP的基本操作
SNMP是一个请求-响应式的协议,它的基本操作可以分类如下:
●检索数据
●修改变量
●接收主动上报消息
检索数据:管理组件向agent发送请求以获取数据,有如下操作类型:
●GET:GET请求用以从agent上获取指定OID对应的一条或多条值。
●GETNEXT:与GET请求类似,最明显的区别是GETNEXT获取指定OID在系统树种所处位置的下一个OID。
●GETBULK:用于从agent上获取大表中的大量数据。
修改变量:管理组件有时会希望能够修改设备上的一些变量:
●SET:管理组件使用这个命令来修改设备的一些配置值。
接收主动上报消息:
●TRAP: 当agent遇到数据传输问题,或设备出现故障希望上层管理组件知晓时,使用TRAP操作上报此信息。
六、SNMP的版本
SNMP发展到目前,一共经历了三个主要版本,SNMPv1,SNMPv2c,SNMPv3。对于当今互联网迅猛发展的今天,信息安全已经是一个关乎产品命运的重要问题,曾经的SNMP由于缺乏足够的安全性而被人诟病甚至弃用,因此SNMPv3版本做了大量关于安全性的增强,这里我们也主要关注于SNMPv3版本的特性。
SNMPv3的主要目的如下:
1.校验收到的SNMP消息在网络传输过程中是否被篡改。
2.校验收到的SNMP消息其身份证明是否已经被创建。
3.检测收到的SNMP消息是否包含管理消息,是否是即时创建的。
4.保护每个收到的消息的内容不会被公开。
为实现上述目标,SNMP为系统提供了一个安全的管理环境,涉及以下内容:
●SNMP实体的身份证明以增强SNMP实体间的通信——每一个SNMP实体都会有一个叫SNMP EngineID的身份标识符,SNMP通信只能发生在已知身份的SNMP实体间(TRAP和Notification不受此规则限制。)
●支持安全模式——一个安全模式定义了管理域或内部网络中的安全策略,SNMP包含USM安全模式的实现。
●定义消息安全的校验服务规范:
○反信息篡改:保护校验通过的实体所生成的消息在传输过程中不会被未经校验的SNMP实体所修改。
○反伪装:防止SNMP实体通过伪装成其他实体的身份来越权执行某些操作。
○反消息流篡改:防止SNMP消息流被恶意重排序,推迟或重复从而施加未经校验的管理操作。
○反消息泄露:防止SNMP实体通信的信息被窃听。
●USM的规格定义——USM一般由如下几个通信机制组成:
○非认证不加密通信
○认证不加密通信
○认证加密通信
●定义不同的认证与加密协议——目前USM支持MD5和SHA认证协议,DES和AES加密协议。
●定义发现流程:可以通过通信地址发现SNMP实体的SNMP EngineID
●定义时间同步流程:增强远程SNMP实体间认证通信。
●定义SNMP 框架 MIB——增强对SNMP实体的管理和配置。
●定义USM的MIB——增强远程配置与管理的安全模式。
●定义VACM 的MIB——增强远程配置与管理的访问控制。
七、SNMP的实现工具
上面讲了很多关于SNMP原理的内容,了解完之后肯定是要具体使用,才有价值,这里介绍一个Linux上的SNMP实现工具。
1.安装net_snmp服务,这里我使用yum安装
2.检查安装情况
3.启动并检查SNMP的运行状态
4.验证SNMP服务
1)安装snmp管理工具:
2)执行SNMP命令查询系统主机名:
5.配置SNMP服务
出于安全考虑,我们创建SNMPv3的安全用户
1).停止SNMP服务,并增加SNMPv3用户,这里创建的用户默认是MD5认证和DES加密
2).将认证和加密协议分别修改为SHA和AES,提高安全性,然后启动SNMP服务
3).测试该用户的通信消息,成功获取。
4).一些其他功能
查看系统内存总量OID:.1.3.6.1.4.1.2021.4.5.0
查看当前可用内存OID:.1.3.6.1.4.1.2021.4.6.0
查看当前CPU负载OID:.1.3.6.1.4.1.2021.10.1.3.1
如果是远程查询,将localhost修改成目标主机的IP并指定SNMP的端口即可。
此外还有更多关于SNMP配置与开发,例如可以配置用户访问的内容,访问的权限,以及自定义MIB等,这里就不再一一赘述了,如果有兴趣可以去查阅相关资料进行研究。
转:IT技术博客大学习http://blogread.cn/it/article/7478?f=wb
- 网络运维必回的模拟器-GNS软件下载和安装
网络运维必回的模拟器-GNS软件下载和安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.GNS简介 1>.什么是GNS GNS3是一款具有图形化界面可以运行在多平台( ...
- (转)linux运维必会MySQL企业面试题
linux运维必会MySQL企业面试题 老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...
- Linux运维必会的实战编程笔试题(19题)
以下Linux运维笔试面试编程题,汇总整理自老男孩.马哥等培训机构,由运维派根据实战需求,略有调整: 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理 ...
- 运维必会之MySQL篇
第一章 SQL语句 语言分类 1)DDL(data definition language)数据定义语言(create.alter.drop)管理基础数据例如:库.表 #<==运维要熟练, ...
- mysql运维必会的一些知识点整理
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- Linux运维必会的MySQL企业面试题大全
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- (转)Awk使用案例总结(运维必会)
以下知识点可能有不对之处,请参考最新Awk学习文章:http://lizhenliang.blog.51cto.com/7876557/1892112 原文:http://blog.51cto.com ...
- mysql运维必会的一些知识点整理(转自民工哥)
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- psutil运维必会模块
目录 psutil介绍 安装psutil 获取CPU信息 获取内存信息 获取磁盘信息 获取网络信息 获取进程信息 psutil介绍 用Python来编写脚本简化日常的运维工作是Python的一个重要用 ...
随机推荐
- 什么是DCI
目录 备注什么是DCI?如何将Role注入到Data中?开发期注入字节码增强MixinTraitTemplateT4 + 部分类 + 显式接口实现 + 扩展类型,C#专用运行期注入Mixin动态代理为 ...
- 启动mysql错误解决方案,学会查看错误日志:mysql.sock丢失,mysqld_safe启动报错
本人还是个菜鸟,下面是我的经验之谈,能解决一些问题,有不对的地方,敬请斧正. 我的是CentOS6.3+MySQL5.1.57. 重启了一次服务器后,使用> mysql -u root -p登陆 ...
- jquery跨域请求数据
jquery跨域请求数据 jquery跨越请求数据.实际开发中经常会碰到两个网站数据交互问题,当向另一个站点请求数据该如何做? 实际上非常容易,请按照下面的步骤做: 第一:编写js,通过get获取远程 ...
- javascript操作写入txt文件及消息: Automation 服务器不能创建对象问题
简单的写入txt代码: function WriteTxt() { var fso, tf; fso = new ActiveXObject("Scripting.Fil ...
- POJ 2409 Let it Bead 组合数学
题目地址: http://poj.org/problem?id=2409 给你一串珠子有m个,用n种不同的颜色涂色,问有多少种分法. 用polay定理求解,对于排成一排的带编号的小球,按照某一种方案改 ...
- php提供service总结---wsdl篇
越来越多的架构偏向于面向接口和面向服务的设计了,当我们把抽象的落地变为实际的时候,我们感觉到了代码的厚度.而当我们把具体的业务再进一步抽象,我们就能发现藏在细节深处的回馈. php可以提供servic ...
- anadonca环境配置和模块安装
1.最方便的python环境配置: 下载anaconda即可,自带spyder,集成科学计算的库,自带pip,不用折腾. 想用sublime编写python并运行的话,需要自己配置编译环境,并下载插件 ...
- 结构-行为-样式-Js排序算法之 直接插入排序
最新因工作原因需要接触到算法,之前学习C++的时候有接触过算法,Javascript中实现算法其实也是大同小异.下面我讲下第一个实现的排序算法--直接插入排序.基本实现思路:假定一个数组中前n(n&g ...
- 一个简单的使用restc demo
最近不经意间看到饿了么团队开发的restc,接口调试工具(类似postman),其实调试接口都没用过工具,每次都只是运行起项目直接调接口.闲来无事,看到restc,就决定试试,后面觉得挺不错的,就分享 ...
- openstack-kilo--issue(十二)openstack-keystone和httpd服务同时占用35357和5000
== Keystone service == openstack-keystone: inactive 如上面显示的状态:如果启动了httpd就不能很好的启动openstack-keystone服务, ...