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 节.