初识SNMP协议

一.SNMP协议简单介绍

SNMP,全称:simple network management protocol,顾名思义是用来管理网络的一个标准协议。管理的对象可以是路由器、交换机、防火墙、网络主机、网络应用服务、甚至是温湿度传感器等等,只要是连接在网络中的设备都可以作为管理的对象。而这些联网的设备的生产厂商都应该要支持snmp协议才行。

SNMP采用C/S的结构,服务端成为一般称为Agent,一般网络设备厂商都会在自己的设备中添加Agent,进行相应的配置后就能开启snmp server功能了。

为了方便查询,snmp协议采用mib库(管理信息库)来描述要查询的对象,通过mib能知道到底一台网络设备道理能查询那些信息该怎么查,查询的值代表什么意思。

mib采用树形结构来组织所有的可管理的对象,如图:

snmp mib库结构示意图


snmp采用类似sql的方式来查询需要管理的对象,称为OID,全称ObjectID,但是要简单的多了,通过使用“.”来逐级查找信息。在我另一篇文章《SNMP 协议 OID的设计思路》中讲了oid实现既简单有强大的查询设计的。


另外snmp不仅可以查询网管数据,还可以控制设备哦,

二.SNMP协议分析

1.snmp默认采用udp161端口来完成get request、set request、getnext request、response ,采用udp162来接收snmp trap信息


2.snmp分为三个版本,v1、v2c、v3。v1和v2c采用明文传输数据,v2添加了64位数据类型支持和get bulk (貌似没怎么用到),v3是支持加密传输和身份验证的。个人感觉v2c比v1最大的改进是支持64位的数据格式,这对于现在的网络设备意义还是非常大的,因为现在的网络设备带宽都非常大了,目前运营商里100G带宽的设备也在测试了,必须使用64位的流量计数器才能计算出准确的流量来。

3.数据报文格式


至于报文中是什么意思就不说了,网上能找到一大堆。


snmp使用UDP162端口发送trap报文,他是一种设备主动将信息发给网管系统的方法,类似于syslog,只不过syslog是人类语言可阅读的,而snmptrap是给程序读的。

三.SNMP协议的应用开发

snmp开发分客户端和服务端,因为我做网络管理软件所以平常主要是接触客户端的开发,如果使用开发库来开发会很简单,只要按照一定的操作规定来使用行了。后续我会写一些解析开发库的文章来了解snmp开发比较底层的一些东西。


已经有别人写好的snmp开发库:比较出名的有net-snmp、snmp++,还有微软的winsnmp API,注意:微软有两套snmp的开发库,其中一套只支持v1版本,另一套可以支持v1和v2。net-snmp是C语言库,snmp++是C++库,两个都是跨平台的,其中snmp++使用比较简单,但是我更喜欢net-snmp。

另外还有ObjectSNMP的java库、php的snmp模块等。

唠叨几句:

snmp只是一个工具而已,平时的工作中更多的时间在处理那些网络监控中遇到的各种各样的问题,比如在没有mib库的情况下要完成对网络设备的兼容,网络设备的自动发现,网络拓扑的自动发现、处理各种性能数据,WLAN监控,BRAS监控等等。如果只会snmp那你就歇菜了,这是一个既要懂网络又要懂编程的领域。^_^

今天就写这么多吧,后续会有更过关于snmp的内容。


posted @ 2013-09-26 23:08  macwe  阅读(1082)  评论(0编辑  收藏  举报