跳到主要内容

4. 发现

基于用户的安全模型要求发现过程获取有关其他 SNMP 引擎的足够信息,以便与它们进行通信。发现需要非权威 SNMP 引擎在通信进行之前了解权威 SNMP 引擎的 snmpEngineID 值。这可以通过生成一个 securityLevel 为 noAuthNoPriv、msgUserName 为零长度、msgAuthoritativeEngineID 值为零长度且 varBindList 为空的请求消息来实现。对此消息的响应将是一个 Report 消息,其中包含权威 SNMP 引擎的 snmpEngineID,作为 msgSecurityParameters 字段中 msgAuthoritativeEngineID 字段的值。它还在 varBindList 中包含一个带有 usmStatsUnknownEngineIDs 计数器的 Report PDU。

如果需要经过认证的通信,则发现过程还应与权威 SNMP 引擎建立时间同步。这可以通过发送一个经过认证的请求消息来实现,其中 msgAuthoritativeEngineID 的值设置为新获知的 snmpEngineID,并且 msgAuthoritativeEngineBoots 和 msgAuthoritativeEngineTime 的值设置为零。对于经过认证的请求消息,必须在 msgUserName 字段中使用有效的 userName。对此经过认证消息的响应将是一个 Report 消息,其中分别包含权威 SNMP 引擎的 snmpEngineBoots 和 snmpEngineTime 的最新值,作为 msgAuthoritativeEngineBoots 和 msgAuthoritativeEngineTime 字段的值。它还在 Report PDU 的 varBindList 中包含 usmStatsNotInTimeWindows 计数器。然后,时间同步作为第 3.2 节步骤 7b 过程的一部分自动发生。另请参见第 2.3 节。