转 SNMP协议整理
http://blog.csdn.net/Mr_IT/archive/2006/08/12/1055152.aspx
从如下几个方面说明:
1>基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管的网络单元(也叫被管设备)。被管设备种类繁多,例如:路由器、X终端、终端服务器和打印机等。这些被管设备的共同点就是都运行TCP/IP协议。被管设备端和管理相关的软件叫做代理程序(agent)或代理进程。管理站可以显示所有被管设备的状态(例如连接是否掉线、各种连接上的流量状况等)
2>管理进程和代理进程之间的通信可以有两种方式。一种是管理进程向代理进程发出请求,询问一个具体的参数值;另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生。当然,管理进程除了可以向代理进程询问某些参数值以外,它还可以按要求改变代理进程的参数值。
3>基于TCP/IP的网络管理包含3个组成部分:
a.一个管理信息库MIB(Management Information Base)。管理信息库包含所有代理进程的所有可被查询和修改的参数。
b.关于MIB的一套公用的结构和表示符号。叫做管理信息结构SMI(Structure of Management Information)。
c.管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple Network Management Protocol)。尽管可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。
下面对这三个组成部分的前两个分别进行详细说明:
●管理信息结构SMI
包含以下数据类型:
INTEGER
OCTERSTRING 0或多个8bit字节,每个字节值在0~255之间
DISPLAYSTRING 0或多个8bit字节,但是每个字节必须是ASCII码
OBJECT IDENTIFIER 对象标识符,它指明一种"授权"命名的对象。"授权"的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的是一个整数序列。这种数据类型是以点(".")分隔的整数构成一个树型结构,类似于DNS或Unix的文件系统
NULL 代表相关的变量没有值
IPADDRESS 4字节长度的OCTERSTRING,以网络序表示的IP地址
PHYSADDRESS OCTERSTRING类型,代表物理地址
COUNTER 非负的整数,可从0递增到232-1(4294976295)。达到最大值后归0
GAUGE 非负的整数,取值范围为从0到4294976295(或增或减)。达到最大值后锁定,直到复位
TIMETICKS 时间计数器,以0.01秒为单位递增,但是不同的变量可以有不同的递增幅度。所以在定义这种类型的变量的时候,必须指定递增幅度
SEQUENCE 这一数据类型与C程序设计语言中的"structure"类似
SEQUENCE OF 这是一个向量的定义,其所有元素具有相同的类型
注:在SNMP中用到对象标识符数据类型,所有的MIB变量都从1.3.6.1.2.1这个标识开始
iso.org.dod.internet.private.enterprises(1.3.6.1.4.1)这个标识是给厂家自定义而预留的
●管理信息库MIB
所谓管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。MIB被划分为若干个组,如system、interfaces、at(地址转换)和ip组等
4>关于管理进程和代理进程之间的交互信息,SNMP定义了5种报文:
1)get-request操作:从代理进程处提取一个或多个参数值。
2)get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
3)set-request操作:设置代理进程的一个或多个参数值。
4)get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5)trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
注:前3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的。
前4种操作是简单的请求-应答方式(也就是管理进程发出请求,代理进程应答响应),而且在SNMP中往往使用UDP协议,所以可能发生管理进程和代理进程之间数据报丢失的情况。因此一定要有超时和重传机制。
5>AgentX协议
为了解决SNMP协议中Agent的可扩展性,IETF早期提出了SMUX(SNMP多重协议),后来发现存在缺陷。在1998年IETF提出了AgentX(Agent Extensibility)协议标准。AgentX是包含一个主代理和多个子代理进程的一种体系结构,多个子代理进程可以驻留在同一个设备或者相互连接的不同设备中。它们之间通过标准接口进行通信。主代理进程处理SNMP协议,每个子代理进程负责一个特定的MIB视图。当主代理进程在运行并负责与网络管理站通信时,单一的子代理进程API实现子代理进程的动态注册与注销。可扩展代理的优点在于,它能够在网络设备运行时动态增加和删除MIB实例。AgentX协议允许多个子代理来负责处理MIB信息,该过程对于SNMP管理应用程序是透明的。AgentX协议为代理的扩展提供了一个标准的解决方法,使得各子代理将它们的职责信息通告给主代理。每个符合AgentX的子代理运行在各自的进程空间里,因此比采用单个完整的SNMP代理具有更好的稳定性。另外,通过AgentX协议能够访问它们的内部状态,进而管理站随后也能通过SNMP访问到它们。随着服务器进程和应用程序处理的日益复杂,最后一点尤其重要。通过AgentX技术,我们可以利用标准的SNMP管理工具来管理大型软件系统。
《附录》:
agentx协议格式:
AgentX PDU Header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version | h.type | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
如下为对应的实际数据包
0: 0101 0000 0000 0000 0000 0000 012d 4865 .............-He
16: 3c00 0000 0000 0000 0504 0000 0100 0000 <...............
32: 881f 0000 0300 0000 0200 0000 0300 0000 ?..............
48: 1900 0000 4e65 742d 534e 4d50 2041 6765 ....Net-SNMP Age
64: 6e74 5820 7375 622d 6167 656e 7400 0000 ntX sub-agent...
01--h.version
01--h.type
3c--h.payload_length
h.type
The PDU type; one of the following values:
agentx-Open-PDU (1),
agentx-Close-PDU (2),
agentx-Register-PDU (3),
agentx-Unregister-PDU (4),
agentx-Get-PDU (5),
agentx-GetNext-PDU (6),
agentx-GetBulk-PDU (7),
agentx-TestSet-PDU (8),
agentx-CommitSet-PDU (9),
agentx-UndoSet-PDU (10),
agentx-CleanupSet-PDU (11),
agentx-Notify-PDU (12),
agentx-Ping-PDU (13),
agentx-IndexAllocate-PDU (14),
agentx-IndexDeallocate-PDU (15),
agentx-AddAgentCaps-PDU (16),
agentx-RemoveAgentCaps-PDU (17),
agentx-Response-PDU (18)
关于agentx协议的具体格式和说明可以查rfc2257文档
TrapV1数据包说明如下(包体数据为十进制,我已经按照包中内容的类型进行了分行注释,一般48为包中数据的分隔符):
48 130 1 0 2(version标识) 1(length) 0(version) 4(community标识) 0
164 129 248 6 6 (length)
43 6 1 4 1 42 (enterprise)
64 4 192 168 30 93 (AGENT Address)
2 1 0 (genericTrap) 2 1 0 (specificTrap)
67 2 3 200 (timestamp)
48 129 221 (length)
48 129 199 (本行总长度) 6(oid标识) 7 42 3 4 5 6 1 0 4(value标识) 129 187(length) 200 213 214 190 184 230 190 175 124 200 213 214 190 184 230 190 175 124 200 213 214 190 184 230 190 175 124 200 213 214 190 184 230 190 175 123 200 213 214 190 184 230 190 175 125 200 213 214 190 184 230 190 175 124 200 213 214 190 184 230 190 175 45 200 213 214 190 184 230 190 175 43 200 213 214 190 184 230 190 175 58 200 213 214 190 184 230 190 175 40 200 213 214 190 184 230 190 175 41 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175 200 213 214 190 184 230 190 175
48 17 (本行总长度) 6(oid标识) 9 43 6 1 6 3 18 1 3 0 64 4 192 168 30 93
对应的告警内容(只有1个字段的告警内容):
OID: 1.2.3.4.5.6.1.0 Value: 日志告警|日志告警|日志告警|日志告警{日志告警}日志告警|日志告警-日志告警+日志告警:日志告警(日志告警)日志告警日志告警日志告警日志告警日志告警日志告警日志告警日志告警日志告警日志告警日志告警
TrapV2数据包说明如下(包体数据为十进制,我已经按照包中内容的类型进行了分行注释,一般48为包中数据的分隔符):
48(trap包分隔标识) 130 1 67(length) 2(version标识) 1(length) 1(version) 4 6 112 117 98 108 105 99(public/private)
167 130 1 52(length)
2 1 0(requestID) 2 1 0(errorStatus) 2 1 0(errorIndex)
48 130 1 39 (length)
48 16(本行总长度) 6(oid标识) 8(length) 43 6 1 2 1 1 3 0 67 4(value标识) 23 221 23 13
48 25(本行总长度) 6(oid标识) 10(length) 43 6 1 6 3 1 1 4 1 0 6(oid标识) 11(length) 43 6 1 4 1 196 17 1 1 0 0
48 16(本行总长度) 6(oid标识)11 43 6 1 4 1 195 20 2 8 3 1 4(value标识) 1(length) 50
48 17 6 11 43 6 1 4 1 195 20 2 8 3 2 4 2 65 50
48 17 6 11 43 6 1 4 1 195 20 2 8 3 3 4 2 75 49
48 20 6 11 43 6 1 4 1 195 20 2 8 3 4 4 5 50 56 56 54 54
48 16 6 11 43 6 1 4 1 195 20 2 8 3 5 4 1 51
48 16 6 11 43 6 1 4 1 195 20 2 8 3 6 4 1 49
48 29 6 11 43 6 1 4 1 195 20 2 8 3 7 4 14 50 48 48 55 48 55 48 57 49 52 53 51 50 49
48 16 6 11 43 6 1 4 1 195 20 2 8 3 8 4 1 54
48 85 6 11 43 6 1 4 1 195 20 2 8 3 9 4 70 97 103 101 110 116 32 124 73 50 124 32 40 105 100 120 32 124 48 124 41 99 97 110 39 116 32 99 111 110 110 101 99 116 32 107 101 114 110 101 108 32 124 75 49 124 44 101 114 114 111 114 61 124 48 124 44 108 105 110 107 32 116 121 112 101 32 124 50 124 33
对应的告警内容(11个字段的告警内容):
OID:1.3.6.1.2.1.1.3.0 Value:46 days, 8:07:33.25
OID:1.3.6.1.6.3.1.1.4.1.0 Value:OID:1.3.6.1.4.1.8721.1.1.0.0
OID:1.3.6.1.4.1.8596.2.8.3.1 Value:2
OID:1.3.6.1.4.1.8596.2.8.3.2 Value:A2
OID:1.3.6.1.4.1.8596.2.8.3.3 Value:K1
OID:1.3.6.1.4.1.8596.2.8.3.4 Value:28866
OID:1.3.6.1.4.1.8596.2.8.3.5 Value:3
OID:1.3.6.1.4.1.8596.2.8.3.6 Value:1
OID:1.3.6.1.4.1.8596.2.8.3.7 Value:20070709145321
OID:1.3.6.1.4.1.8596.2.8.3.8 Value:6
OID:1.3.6.1.4.1.8596.2.8.3.9 Value:agent |I2| (idx |0|)can't connect kernel |K1|,error=|0|,link type |2|!