SNMP(Simple Network Management Protocol)实在是一个非常重要的协议,在被监控设备上把的各种参数(包括设置参数、状态参数)写入到MIB库中,我们通过各种网管软件就能读到这些参数(比如:端口流量、CPU使用率等),甚至修改这些参数(比如:端口速率、双工模式、端口MTU等)。平时你telnet到设备通过敲命令修改设备配置,通过网管软件就能在图形界面一样可以实现。在网管软件和被监控设备之间(准确的说代理程序)就是通过SNMP协议来交互的。让我们来看看SNMP的一些详细内容吧。
一、SNMP组成部分
SNMP网络管理由下面几个部分组成:
1、网络管理站或管理进程(Manager)
就是管理工作站啦,网管软件就安装在此,常见的网络软件如:Cisco Works、HP OpenView、Solarwinds、Microsoft SMS、MRTG、Whatsup等。在SNMP组成部分中相当于Client的角色。
2、被管理设备
可网管的路由器、交换机、服务器、打印机等等。
3、代理程序(Agent)
集成在被管理的设备当中,运行被管理设备的SNMP服务端程序,是Server的角色,Cisco IOS的SNMP配置命令就是以snmp-server开头的。
4、MIB(Management Information Base)
被监控设备上的各种参数(包括设置参数、状态参数)都写到MIB库中,MIB包含所有代理进程的可被查询和修改参数。目前版本为MIB-Ⅱ。讲的MIB就必须要介绍一下对象表示符(OID)这个非常重要的概念。
OID: 是一个以点(".")分割的整数序列,这些整数构成一个树型结构,类似于DNS或Linux文件系统。OID从树的顶部开始,顶部没有标识,以root表示。OID不是随便分配的,它是由权威机构进行管理和分配的。(见OID结构图)
SNMP几个组成部分之间的关系,下图可以很清晰得体现出来(SNMP组成部分图示)
二、SNMP交互过程
SNMP管理进程和代理进程之间交互的报文分为5种:
1) get-request操作
从管理进程向代理进程(udp 161)请求一个或多个数值。linux下的snmpget命令就是完成这个操作。
2) get-next-request 操作
向代理进程(udp 161)请求一个或多个参数的下一个参数值。snmpwalk命令就是完成这个操作。
3) get-response操作
对管理进程提交的request进行响应,返回一个或多个参数值,从代理进程的UDP 161端口发出。
4) set-request操作
设置代理进程的的一个或多参数值,这个可是十分危险的操作。代理进程开放的端口是udp 161,snmpset执行这个操作。
5) trap操作
这个就有点特殊了,开放端口的是管理进程udp 162,代理进程主动发送该报文,通知管理进程有某些事情发生。trap是“陷阱”的意思,取这个名字还是非常形象的,一个掉到陷阱中的人,在那一霎那都会本能发出“救命”的呼声,希望有人听到。同样的道理,被监控设备遇到突发情况宕机,最后一刻发出以个trap,通知管理进程出事了,得赶快采取行动。
再通过“snmp报文交互图”来看看交互的过程。
三、SNMP的三个版本
目前SNMP的发展主要包括三个版本:SNMPv1、SNMPv2以及最新的SNMPv3。总体来看,SNMPv1和v2版本对用户权力的惟一限制是访问口令,而没有用户和权限分级的概念,只要提供相应的口令(即community),就可以对设备进行read或read/write操作,安全性相对来的薄弱。
SNMPv1使用明文发送,安全性最差。
SNMPv2相对snmpv1,同样适用明文发送,定义了了一个新的分组类型get-bulk-request,它高效率地从代理进程读取大块数据。
snmpv3实现提高安全性能的预期目标,尤其是在身份验证(如用户初始接入时的身份验证、信息完整性的分析、重复操作的预防)、加密、授权和访问控制、适当的远程安全配置和管理能力等方面。SNMPv3是在SNMPv2基础之上增加、完善了安全和管理机制。
可以参考如下抓包截图:
SNMP V1截图(明文,community:snmpv2):
SNMPV2抓包截图(明文,community:snmpv2):
SNMPV3截图(加密):
参考:《TCP/IP详解卷一》
阅读(9281) | 评论(0) | 转发(0) |