SNMP概述–运维必知的协议基础

一、什么是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

时间: 2024-10-20 10:11:15

SNMP概述–运维必知的协议基础的相关文章

Linux运维必会MySQL30道基础命令

Linux运维必会MySQL 30道基础命令 老男孩老师教学与培训核心思想:重目标.重思路.重方法.重实践.重习惯.重总结. 版权声明:余连辉 本系列文档为<老男孩 Linux 运维实战培训中心>内部教学用教案,只允许 VIP 学员 个人使用,为保护大家的学习利益,禁止私自传播,违者将取消 VIP 学员资格.严重者我们将法律起诉.如果你已经参加本培训,即视为你已无条件接受上述内容说明! 联系方式: 意见投诉信箱:[email protected] 网站运维交流群:114580181 24605

MySQL数据库企业级应用实战(Linux运维必学) 套餐上线了。

为了满足广大运维朋友的要求,国内运维界顶尖实战加教育专家老男孩老师亲自主讲的 MySQL数据库企业级应用实战(Linux运维必学)上线了 http://edu.51cto.com/roadmap/view/id-66.html 本套餐一共16套核心DBA课程,祝你掌握运维人员需要掌握的数据库核心重点知识,春节前优惠发布(节后会恢复原价),想掌握DBA的运维伙伴们请抓紧下手,学习课程只是一个连接纽带,选择一个好的优秀的导师,作为自己的前进指路灯,是成就自己的关键. 本课程100%企业实战积累的精华

linux运维必会MySQL企业面试题近百个

众所周知,MySQL是所有IT企业中的重中之重,linux运维人员如果能掌握MySQL数据库技术,对未来的高薪职业发展非常有帮助! linux运维必会MySQL企业面试题近百个 http://user.qzone.qq.com/49000448/blog/1427333863

Linux运维必会的MySQL企业面试题大全 推荐

Linux运维必会的MySQL企业面试题大全 推荐 (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld startservice mysqld startsystemctl  start mysqld 2.检测端口是否运行 lsof -i :3306netstat -lntup |grep 3306 3.为MySQL设置密码或者修改密码 设置密码 mysql -uroot -ppassword -e "set passowrd for root = passow

运维工程师必须掌握的基础技能和职业前景

运维工程师必须掌握的基础技能有哪些 运维工程师(Operations),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率.优化资源利用率提高整体的ROI.这是百度百科对运维工程师的定义.网上有好多大佬对这个问题做了很详细的阐述,这里我简单说一下自己工作接触到的一些技能和工具. 范围:linux运维 网络方面 我感觉网络是作为IT工作人员的基础中的基础,网络的使用贯穿了我们平时工作中,只是不是特别从事网络运维的工程师,很少下精力去研究它.由于我本身就是华为HCNP和华三H3CSE

博友话题:运维工程师必须掌握哪些基础技能?

都别再讨论优衣库啦,我们可是热爱技术的IT人.快来关注下本期的博友话题! 众所周知,运维工程师是集合网络.系统.数据库.开发.安全工作于一身的"复合型人才". 随着国内软件行业的发展和扩大化,有更多更复杂的系统出现,为了保证系统的稳定运行,需要有更多优秀的运维工程师.那么一个合格的运维工程师必须掌握哪些基础技能呢?在运维的路上需要注意哪些呢? 亲爱的小伙伴们,让我们一起讨论下:运维工程师必须掌握哪些基础技能呢? PS:小编会根据讨论情况准备神秘礼物给参加活动的小伙伴们哦~ (活动时间2

Linux运维系统工程师与java基础学习系列-8

Java天生骄傲系列-8 函数的应用(重点掌握) 如何定义函数 例1: package test.myeclipse;                 publicclass test1 { publicstaticvoid main(String[]args) { int Sum = getSum(); System.out.println("Sum="+Sum); } publicstaticint getSum() { return 3+4; } } 运行结果:Sum=7 例2:

Linux运维系统工程师与java基础学习系列-4

Java天生骄傲系列-4 程序流程控制 判断 选择 循环 判断结构: If语句三种格式: 1.  if(条件表达式) { 执行语句: } 2.  if(条件表达式) { 执行语句: } else { 执行语句: } 3.  if(条件表达式) { 执行语句: } else if (条件表达式) { 执行语句: } --. else { 执行语句: } if(条件表达式) { 执行语句: } 牛刀小试: package test.myeclipse; publicclass test1 { pub

Linux运维系统工程师与java基础学习系列-2

Java天生骄傲系列-2 运算符 1.   算术运算符 注: 1)"+"号除了用于加法运算以外,还用作字符串连接符: 2)字符串数据和任何数据使用+都是相连接,最终都会变成字符串. package day4javatest.myeclipse;         publicclass day4test1 { /** * @param args */ publicstaticvoid main(String[]args) { // TODO Auto-generated method s