Skip to main content

SNMP报文格式

SNMPv1

SNMPv1报文主要由版本、团体名、SNMP PDU三部分构成。

报文格式

 +-------------------------------------------+
 | IP首部| UDP首部 | 版本 |团体名|SNMPv1 PDU |
 +-------------------------------------------+
字段 描述
版本 表示SNMP的版本,版本字段的值是报文版本号减1,如果是SNMPv1报文则对应字段值为0。
团体名 用于在Agent与NMS之间完成认证,字符串形式,常用的是6个字符“public”。团体名包括“可读”和“可写”两种,执行Get、GetNext操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证。
SNMPv1 PDU 包含PDU类型、请求标识符、变量绑定列表等信息,可以为GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU或Trap PDU几种类型。

SNMPv1 PUD格式

PDU的格式如下:

SNMPv1 PUD格式
+---------------------------------------------------------------+
|PDU Type| Request ID|Error Status|Error Index|Variable Bindings|
+---------------------------------------------------------------+
字段 描述
PDU Type

协议数据单元的类型。PDU(Protocol Data Unit)共有5种类型:

GetRequest-PDU

GetNextRequest-PDU

GetResponse-PDU

SetRequest-PDU

Trap-PDU

Request ID 请求标示字段,唯一的标示一个请求报文。
Error Status

错误状态标示字段,SNMPv1中错误码包括:

noSuchName:指定了一个代理不知道的对象。

tooBig:代理不能一次把请求的结果放入到一个PDU中。 

badValue:进行set操作时候把变量修改为一个无效的值。

genErr:除以上错误外的其他错误。

Error Index 错误索引字段。
Variable Bindings 变量绑定字段。

参考标准

标准 描述
RFC 1157 A Simple Network Management Protocol (SNMP)

SNMPv2c

与SNMPv1 PDU类似,SNMPv2c PDU也包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU,并新增了GetBulkRequest PDU和InformRequest PDU两种类型。

报文格式

+------------------------------------------------------+
| IP首部 | UDP首部 | 版本 | 团体名 | SNMPv2c PDU |
+------------------------------------------------------+
字段 描述
版本 表示SNMP的版本,版本字段的值是报文版本号减1,如果是SNMPv2报文则对应字段值为1。
团体名 用于在Agent与NMS之间完成认证,字符串形式,常用的是6个字符“public”。团体名包括“可读”和“可写”两种,执行Get、GetNext操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证。
SNMPv2c PDU 包含PDU类型、请求标识符、变量绑定列表等信息,可以为GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU、GetBulkRequest PDU和InformRequest PDU几种类型。

SNMPv2c PDU格式

其中,PDU的格式如下:

SNMPv2c PUD格式
+---------------------------------------------------------------+
|PDU Type| Request ID|Error Status|Error Index|Variable Bindings|
+---------------------------------------------------------------+
字段 描述
PDU Type

协议数据单元的类型。PDU(Protocol Data Unit)有如下几种类型:

GetRequest GetNextRequest Response SetRequest Trap GetBulkRequest InformRequest

Request ID 请求标示字段,唯一的标示一个请求报文。
Error Status

错错误状态标示字段。SNMPv2c中错误码包括:

wrongValue:进行set操作时候把变量修改为一个无效的值

wrongEncoding:进行编码字段的值,与其他的字段不一致

wrongType:进行set操作时候把变量修改为一个无效的类型 

wrongLength:进行set操作时候把一个变量值设置成与它长度不一致的值

inconsistentValue:把一个变量设置为其他的情况下有效的值,当前情况下无效 

noAccess:试图设置一个不可访问的值

notWritable:试图修改一个存在,但不能修改的值 

noCreation:试图修改一个存在,但不能创建的值

inconsistentName:试图设置一个当前不存在且当前不能创建的变量 

resourceUnavailable:设置过程中申请某些资源失败

commitFailed:set操作失败

undoFailed:进行set操作失败,有些赋值无法回复 

genErr:除以上错误外的其他错误

Error Index 错误索引字段。
Variable Bindings 变量绑定字段。

参考标准

标准 描述
RFC 1901 Introduction to Community-based SNMPv2
RFC 1902 Structure of Management Information for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1903 Textual Conventions for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1904 Conformance Statements for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1905 Protocol Operations for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1906 Transport Mappings for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1907 Management Information Base for Version 2 of the Simple Network Management Protocol (SNMPv2)
RFC 1909 An Administrative Infrastructure for SNMPv2

 

SNMPv3

SNMPv3报文结构从功能上来说,与SNMPv1、SNMPv2c的区别主要增加了报头数据和安全参数。

报文格式

 +----------------------------------------------------------+
 | IP首部 | UDP首部 | 版本 | 报头数据 | 安全参数| SNMPv3 PDU     |
 +----------------------------------------------------------+
字段 描述
版本 表示SNMP的版本,版本字段的值是报文版本号减1,如果是SNMPv3报文则对应字段值为3。
报头数据

主要包含消息发送者所能支持的最大消息尺寸、消息是否进行加密/认证、采用的安全模式等描述内容。 格式如下:

 

+--------------------------------------------------+
| Msg ID | Msg Max size | Msg Flag | Msg Sec Model |
+--------------------------------------------------+

Msg ID:可以使请求和应答相互关联,响应报文中的Msg ID和发送报文中的值相同。 

Msg Max size:消息发送者支持的最大的消息尺寸。 

Msg Sec Model:指明了发送方采用的安全模式。 

Msg Flag:请求报文指定是否要求回应report消息,消息是否进行了加密和认证。

安全参数

包含用户名、密钥、加密参数等安全信息。 格式如下:

 

+--------------------------------------------------------------------------+
|Auth Engin ID|Auth EngBoots|Auth Engine Time|User Name|Auth Para|Priv Para|
+--------------------------------------------------------------------------+

Auth Engin ID:唯一的标识一个认证。 

Auth Engin Boots:从配置认证引擎到现在,认证引擎重新启动的次数。 

Auth Engin Time:从配置认证引擎到现在的时间。 

User Name:用户名。 

Auth Para:认证参数值。 

Priv Para:加密后的参数值。

SNMPv3 PDU

包含PDU类型、请求标识符、变量绑定列表等信息,可以为GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU、GetBulk PDU等几种类型。 格式如下:

+-----------------------------------+
|Context Eng ID | Context name| Data|
+-----------------------------------+

 

Context Egine ID:SNMP唯一标识符,和PDU类型一起决定应该发往那个应用程序。

Context Name:指明上下文之间的关系,由应用程序决定。

Data:报文的数据内容。

参考标准

标准 描述
RFC 2570 Introduction to Version 3 of the Internet-standard Network Management Framework
RFC 2574 User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)
RFC 3414 User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)
RFC 3584 Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network Management Framework