SNMPv3报文类型
请求类
1.Get-Request
功能:查询指定OID值
备注:也可以用来查询EngineID
2.Get-NextRequest
功能:按顺序查询下一个OID值
3.Set-Request
功能:设定指定OID值
4.Get-BulkRequest
功能:批量获取多条OID数据
响应类
1.Get-Response
功能:对请求类的报文回复,包含查询结果或者错误信息
通知类
1.Report
功能:报告安全相关错误(认证失败、加密失败)
SNMPv3 引擎ID(EngineID)
一、核心功能:标识 SNMP 引擎
engineID 是 SNMP 引擎的全局标识符,其核心作用是:
1.区分不同引擎实例
同一设备上可能运行多个 SNMP 引擎(如管理端和代理)。
跨设备时,engineID 用于建立安全上下文(Security Context)。
2.绑定安全参数
用户(User)、组(Group)、视图(View)等安全配置均与 engineID 关联。
3.支持分布式管理
在大规模网络中,通过 engineID 快速定位设备或引擎实例。
二、工作原理:贯穿协议栈
1. 初始化阶段
管理端(NMS):
启动时生成或加载 engineID(通常为 00:00:00:00:00:00:00:00,需手动配置)。
代理(Agent):
厂商预配置(如 1.3.6.1.4.1.20408.1.1.1.1,包含 OID 和序列号)。
或基于 MAC 地址生成(如 00:0c:29🆎cd:ef)。
2. 通信阶段
请求类报文:
管理端在报文中携带自身 engineID,代理通过 engineID 匹配本地安全配置。
响应类报文:
代理返回自身 engineID,管理端验证是否为预期设备。
3. 安全参数推导
密钥生成:
engineID 参与 USM(用户安全模型)的密钥推导:
三、简单理解
1.SNMP v3 EngineID 是设备一个SNMP实例(租户)的唯一标识,可以配置多个租户。
2.SNMP v3 加密过程需要EngineID参与
SNMPv3新查询连接建立过程
1.管理端向终端发送Get-Request
管理端发送一个Get-Request请求,第一次查询不清楚终端的EngineID,不携带信息,PDU中不携带OID
2.终端回复Report,报告错误内容
终端发现管理端发送的 EngineID不正确,向管理端发送Report,并告知自己的EngineID和相关信息,并附上OID(此OID为usmStatsUnknownEngineIDs ,在RFC 3414进行查询,具体内容是“记录 SNMP 引擎收到的、未知 engineID 的消息次数”。)
3.管理端认证并开始查询信息
管理端得到终端EngineID 向终端发送正确的EngineID,并携带认证信息和PDU,PDU中携带需要查询的OID
4.终端回复查询信息
图略
结语
在学习SNMP v3的过程中发现,每个查询周期开始,笔者这边的管理端都会发送空值的EngineID,终端都要回复Report并计数,计数已经达到1600w次,按常理来说管理端应该记住每个设备的SNMP实例的EngineID,但查询了几个运维平台,均不记录这个值,每次查询都需要计数,暂不清楚这个计数导致什么问题