SNMP:简单网络管理协议:

管理者使用161,被管理者使用162

age使用161把

 

(一)SNMP协议的版本包括:

SNMPv1、SNMPv2c、SNMPv3

 

 

(二)SNMP组成:

(1)网络管理系统nms:{是管理者的角色,可以发出,可以接受snmp报文}

①nms在网络中扮演管理者角色,是一个采用snmp协议对网络设备进行管理/监视的系统,运行在nms服务器上。

 

②nms可以向设备上的agent发出请求,查询或修改一个或多个具体的参数值。

 

③nms可以接收设备上的agent主动发送的trap信息,以获知被管理设备当前的状态。

 

 

(2)代理进程agent:{查mib,响应nms}

①agent是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自nms的请求,把管理数据汇报给发送请求的nms。

 

②agent接收到nms的请求信息后,通过mib表完成相应指令后,并把操作结果响应给nms。

 

③当设备发生故障或者其它事件时,设备会通过agent主动发送信息给nms,向nms报告设备当前的状态变化。

 

 

(3)被管对象management object:

①management object指被管理对象。每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件(如一块接口板),也可以是某些硬件,软件(如路由选择协议)及其的配置参数的集合。

 

 

(4)管理信息库mib:{定义了mib对应的变量就是数值对应的操作}

mib是一个数据库,指明了被管理设备所维护的变量(即能够被agent查询和设置的信息)。mib在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。

 

通过mib,可以完成以下功能:

①agent通过查询mib,可以获知设备当前的状态信息。

②agent通过修改mib,可以设置设备的状态参数

 

 

(5)总结:

每个被管理设备中都包含驻留在设备上的Agent进程、MIB和多个被管对象。NMS通过与运行在被管理设备上的Agent交互,由Agent通过对设备端的MIB的操作,完成NMS的指令

 

 

 

(三)SNMP报文处理过程:

Agent通过UDP端口161接收来自NMS的Request报文,Agent接收到报文后,其基本处理过程如下:

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

 

2、比较SNMP版本号:将报文中的版本号取出,与本Agent支持的SNMP版本号比较。如果不一致,则丢弃该报文,不做进一步处理。

 

3、团体名验证:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与Agent所在设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个Trap报文。SNMPv1提

供较弱的安全措施,在版本3中这一功能被加强。

 

4、提取PDU:从通过验证的ASN.1对象中提出协议数据单元PDU。如果失败,丢弃报文,不做进一步处理。

 

5、处理PDU:根据不同的PDU,SNMP协议实体进行不同的处理。得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,形成Response报文,编码发回网管站。

 

6、网管站得到响应报文后,经过同样的处理,最终显示结果。

 

 

 

 

(四)报文组成结构:

 

(1)snmpv1/snmpv2c报文主要由版本、团体名、snmp pdu三部分构成:

 

snmp_snmpv2和v3的区别

 

 

 

①版本:表示snmp的版本,如果是snmpv1报文则对应字段值为0,snmpv2c则为1。

 

②团体名:用于在agent与nms之间完成认证,字符串形式,用户可自行定义。团体名包括“可读”和“可写”两种,执行getrequest、getnextrequest操作时,采用“可读团体名”进行认证;执行set操作时,则采用“可写团体名”认证。

 

③ PDU:snmpv1/snmpv2c pdu:包含pdu类型、请求标识符、变量绑定列表等信息。其中snmpv1 pdu包括getrequest pdu、getnextrequest pdu、setrequest pdu、response pdu和trap pdu几种类型,snmpv2c pdu在snmpv1的基础上新增了getbulkrequest pdu和informrequest pdu两种类型。

 

 

(2)snmpv1/snmpv2c操作类型:

1、get-request:

假定nms想要获取被管理设备mib节点“系统联系人”{syscontact}的值,使用可读团体名为public,过程如下所示:

①nms:向agent发送get请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为public;pdu中pdu类型为get类型,绑定变量填入mib节点名syscontact。

 

②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求查询mib中的syscontact节点,得到syscontact的值并将其封装到response报文中的pdu,向nms发送响应;如果查询不成功,agent会向nms发送出错响应。

 

 

2、get-next-request:

假定nms想要获取被管理设备mib节点syscontact的下一个节点sysname值,使用可读团体名为public,过程如下所示:

 

①nms:向agent发送getnext请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为public;pdu中pdu类型为getnext类型,绑定变量填入mib节点名syscontact。

 

②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求查询mib中的syscontact的下一个节点sysname,得到sysname的值并将其封装到response报文中的pdu,向nms发送响应;如果查询不成功,agent会向nms发送出错响应。

 

 

3、set-request:

假定nms想要设置被管理设备mib节点sysname的值为huawei,使用可写团体名为private,过程如下所示:

 

①nms:向agent发送set请求报文。报文中各字段的设置如下:版本号为所使用的snmp版本;团体名为private;pdu中pdu类型为set类型,绑定变量填入mib节点名syscontact和需要设置的值huawei。

 

②agent:首先对报文中携带版本号和团体名进行认证,认证成功后,agent根据请求设置管理变量在管理信息库mib中对应的节点,设置成功后向nms发送响应;如果设置不成功,agent会向nms发送出错响应。

 

 

4、trap操作:

trap不属于nms对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过agent向nms上运行的nms发送trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,agent会向nms发送warmstart的trap。这种trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,agent才会向管理进程报告,这种方法有其好处是仅在严重事件发生时才发送trap信息,减少报文交互产生的流量。

 

 

 

 

(3)SNMPv2c新增两种报文类型:

1、getbulk操作:

基于getnext实现,相当于连续执行多次getnext操作。在nms上可以设置被管理设备在一次getbulk报文交互时,执行getnext操作的次数。

 

 

 

2、inform操作:

inform操作也是被管理设备向nms主动发送告警。与trap告警不同的是,被管理设备发送inform告警后,需要nms进行接收确认。如果被管设备没有收到确认信息则:

 

①将告警暂时保存在inform缓存中。

 

②重复发送该告警,直到nms确认收到该告警或者发送次数达到最大重传次数。

 

③被管设备上会生成相应的告警日志,由此可知,使用inform告警可能会占用较多的系统资源。

 

 

(7)总结:

 

1、nms发送get报文,里面会携带一个明确的oid值,告知被管理设备,被管理设备收到之后,就会查询id里面的对应的信息,并且通过respone报文告知nms

 

2、修改报文会通过:set报文里面携带一个oid,告知被管理id设备,去修改那一个过得配置,如果修改成功,被管理设备会通过reposn报文告知nms当前配置消失了

 

3、trap:会将自己的告警信息主动通过age送给nms

 

 

 

(五)snmpv3:

(1)报文结构:

snmp_snmpv2和v3的区别_02

 

(1)版本:表示snmp的版本,snmpv3报文则对应字段值为2。

 

 

(2)报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容。

 

 

(3)安全参数:包含snmp实体引擎的相关信息、用户名、认证参数、加密参数等安全信息。

 

 

(4)SNMPv3 PDU:SNMPv3的PDU包含3部分内容。其中有以下3点:

 

①context egineid:snmp唯一标识符,和pdu类型一起决定应该发往哪个应用程序。

 

②context name:用于确定context egineid对被管理设备的mib视图。

 

③pdu data:包含pdu类型、请求标识符、变量绑定列表等信息。其中snmpv3 pdu包括getrequest pdu、getnextrequest pdu、setrequest pdu、response pdu、trap pdu、getbulkrequest pdu和informrequest pdu几种类型。

 

 

 

(2)snmpv3的结构:

 

1、基于snmp的nms提供了一个通用的实现模型,即snmpv3实体。snmpv3实体可以分为snmpv3引擎和snmpv3应用程序,引擎与应用程序均由多个小模块组成。

 

2、snmpv3由于采用了用户安全模块usm(user-based security model)和基于视图的访问控制模块vacm(view-based access control model),在安全性上得到了提升。

 

3、usm:身份验证:提供身份验证和数据加密服务,身份验证是指agent或nms接到信息时首先必须确认信息是否来自有权限的nms或agent并且信息在传输过程中未被改变,这是一种使用安全哈希函数和密钥来产生信息验证码的有效工具。snmp使用的hmac可以分为两种:hmac-md5-96和hmac-sha-96。前者的哈希函数是md5,使用128位authkey作为输入。后者的哈希函数是sha-1,使用160位authkey作为输入。

 

4、加密:加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。加密的过程与身份验证类似,也需要管理站和代理共享同一密钥来实现信息的加密和解密。snmp使用以下三种加密算法:

des:使用56bit的密钥对一个64bit的明文块进行加密。

3des:使用三个56bit的des密钥(共168bit密钥)对明文进行加密。

aes:使用128bit、192bit或256bit密钥长度的aes算法对明文进行加密

这三个加密算法的安全性由高到低依次是:aes、3des、des,安全性高的加密算法实现机制复杂,运算速度慢。为充分保证设备安全,建议选择安全性更高的aes算法。

 

 

5、vacm{类似于一个权限列表一样}:对用户组或者团体名实现基于视图的访问控制。用户必须首先配置一个视图,并指明权限,v1v2只能设置读写的视图,可以设置用户只读的用户节点可以写,使用默认的读和写,是最大权限的进行管理,这样就会导致很大的问题,无法确定到这该用户访问多少权限合适而v1v2是不能实现的。用户可以在配置用户或者用户组或者团体名的时候,加载这个视图达到限制读写操作、inform或trap的目的。

 

 

 

 

(3)snmpv3的工作原理:{可以理解为先发一个空模板,得到agent的安全模板,在将这个模板填入数值就可以}

snmpv3的实现原理和snmpv1/snmpv2c基本一致,唯一的区别是snmpv3增加了身份验证和加密处理。

 

 

snmp_snmpv2和v3的区别_03

 

 

1、假定nms想要获取被管理设备mib节点syscontact的值,使用认证加密方式

 

2、nms:向agent发送不带安全参数的get请求报文,向agent获取context egineid、context name和安全参数(snmp实体引擎的相关信息)。

 

3、agent:响应nms的请求,并向nms反馈请求的参数。

 

4、nms:再次向agent发送get请求报文,报文中各字段的设置如下:

①版本:snmpv3版本。

 

②报头数据:指明采用认证、加密方式。

 

③安全参数:nms通过配置的算法计算出认证参数和加密参数。将这些参数和获取的安全参数填入相应字段。

 

④pdu:将获取的context egineid和context name填入相应字段,pdu类型设置为get,绑定变量填入mib节点名syscontact,并使用已配置的加密算法对pdu进行加密。

 

⑤agent:首先对消息进行认证,认证通过后对pdu进行解密。解密成功后,agent根据请求查询mib中的syscontact节点,得到syscontact的值并将其封装到response报文中的pdu,并对pdu进行加密,向nms发送响应。如果查询不成功或认证、解密失败,agent会向nms发送出错响应。

 

 

 

(4)snmpv3的配置用户组和名的方式:

 

1、采用snmp自身的安全模块usm配置的用户组和用户名。

 

2、采用aaa配置的本地用户名组和用户名作为snmpv3的用户组和用户名。

 

 

 

(5)SNMPv3优点:

①适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的管理需求。

 

 

②方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类型,定位到相应的子系统。

 

 

③扩展性好:通过SNMP实体,可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安全子系统中为其定义单独的模块,从而在SNMP中支持该协议。

 

 

④数据完整性:数据不会在未被授权方式下修改,数据顺序的改动也不会超出许可范围。

 

 

⑤数据来源验证:确认所收到的数据来自哪个用户。snmpv3定义的安全性是基于用户的,它验证的是生成消息的用户,而不是具体生成消息的应用程序。

 

 

⑥数据核实性检查:当nms或agent接收到消息时,对消息的生成时间进行检查,如果消息时间与系统当前时间的差超出了指定的时间范围,该消息就不被接受。这可以防止消息在网络传输过程中被恶意更改,或收到并处理恶意发送的消息。