SNMPv1/SNMPv2c

来自Linux78|wiki
Bob讨论 | 贡献2020年1月2日 (四) 15:11的版本 (创建页面,内容为“=== SNMPv1/SNMPv2c报文结构 === 如图所示,SNMPv1/SNMPv2c报文主要由版本、团体名、SNMP PDU三部分构成。 有框|居中…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

SNMPv1/SNMPv2c报文结构

如图所示,SNMPv1/SNMPv2c报文主要由版本、团体名、SNMP PDU三部分构成。

Snmp-3.png

报文中的主要字段定义如下:

版本:表示SNMP的版本,如果是SNMPv1报文则对应字段值为0,SNMPv2c则为1。

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

SNMPv1/SNMPv2c PDU:包含PDU类型、请求标识符、变量绑定列表等信息。其中SNMPv1 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU和Trap PDU几种类型,SNMPv2c PDU在SNMPv1的基础上新增了GetBulkRequest PDU和InformRequest PDU两种类型。

为了简化起见,SNMP操作今后叫做Get、GetNext、Set、Response、Trap、GetBulk和Inform操作。

SNMPv1/SNMPv2c操作类型

SNMPv1/SNMPv2c规定了7种操作类型,用来完成NMS和Agent之间的信息交换。

操作 描述 Get Get操作可以从Agent中提取一个或多个参数值。 GetNext GetNext操作可以从Agent中按照字典序提取下一个参数值。 Set Set操作可以设置Agent的一个或多个参数值。 Response Response操作可以返回一个或多个参数值。这个操作是由Agent发出的,它是GetRequest、GetNextRequest、SetRequest和GetBulkRequest四种操作的响应操作。Agent接收到来自NMS的Get/Set指令后,通过MIB完成相应的查询/修改操作,然后利用Response操作将信息回应给NMS。 Trap Trap信息是Agent主动向NMS发出的信息,告知管理进程设备端出现的情况。 GetBulk GetBulk操作实现了NMS对被管理设备的信息群查询。 Inform InformRequest也是被管理设备向NMS主动发送告警。与Trap告警不同的是,被管理设备发送Inform告警后,需要NMS回复InformResponse来进行确认。


SNMPv1版本不支持GetBulk和Inform操作。

SNMPv1/SNMPv2c工作原理

SNMPv1和SNMPv2c的工作原理基本一致。SNMPv1/SNMPv2c的工作原理如图

Snmp-4.png

Get操作

假定NMS想要获取被管理设备MIB节点sysContact的值,使用可读团体名为public,过程如下所示:

NMS:向Agent发送Get请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为public;PDU中PDU类型为Get类型,绑定变量填入MIB节点名sysContact。

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

GetNext操作

假定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发送出错响应。

Set操作

假定NMS想要设置被管理设备MIB节点sysName的值为HUAWEI,使用可写团体名为private,过程如下所示:

NMS:向Agent发送Set请求报文。报文中各字段的设置如下:版本号为所使用的SNMP版本;团体名为private;PDU中PDU类型为Set类型,绑定变量填入MIB节点名sysName和需要设置的值HUAWEI。

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

Trap操作

Trap不属于NMS对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过Agent向NMS发送Trap消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,Agent会向NMS发送warmStart的Trap。

这种Trap信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,Agent才会向管理进程报告。这种方法有其好处是仅在严重事件发生时才发送Trap信息,减少报文交互产生的流量。

SNMPv2c新增的操作如图所示。

Snmp-5.png

GetBulk操作

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

Inform操作

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

将告警暂时保存在Inform缓存中。

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

被管设备上会生成相应的告警日志。

由此可知,使用Inform告警可能会占用较多的系统资源。